Come dal titolo,
In una variabile di tipo stringa ho il nome della form:
sNome := 'Form1';
come faccio a creare 'al volo' la form?
qualcosa del tipo
var oForm:TForm
begin
oForm := <snome>.create(self);
oForm.show;
end;
N.
Come dal titolo,
In una variabile di tipo stringa ho il nome della form:
sNome := 'Form1';
come faccio a creare 'al volo' la form?
qualcosa del tipo
var oForm:TForm
begin
oForm := <snome>.create(self);
oForm.show;
end;
N.
Mi rispondo da solo, ad uso di chi ne avrà (??) bisogno... spulciando la VCL e l'help di delphi, il quale recita:
Call GetClass to obtain a class from a class name. This class can be used as a parameter to routines that require a class.
The Class must be registered before GetClass can find it.
Dunque da queste 2 righe sono risalito a questo codice:
la chiamata:codice:Procedure ApriForm(sNome: String); Var oForm: TForm; oClass:TFormClass; begin oClass := TFormClass(GetClass('T'+sNome)); if Assigned(oClass) then begin oForm := oClass.Create(Self); oForm.Show; end; end;
Ovviamente nella form l'ultima riga dovrà essere il register della classe 'form'codice:ApriForm('Form1');
codice:Initialization RegisterClass(TForm1) Finalization UnregisterClass(TForm1)
Innanzitutto, ottima ricerca: la risposta che hai ottenuto è quella corretta.
Volendo approfondire la problematica, come mai hai bisogno di risalire a un Form mediante il nome?
Te lo chiedo per capire se la tua esigenza può essere risolta in altro modo, visto che in tanti anni non mi è mai capitato di doverlo fare (o meglio, ho adottato architetture che presupponevano altre operazioni più complesse, ma gestite in ogni caso dal framework).
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Il tutto è nato dal voler costruire un menu partendo da una tabella di un DB per poi caricarlo a run time in modo da avere un menù dinamico, senza ricompilare l'eseguibile, e in base a vari utenti o diritti o qualsiasi altra cosa mi possa venire in mente.Volendo approfondire la problematica, come mai hai bisogno di risalire a un Form mediante il nome?
L'idea mi è sembrata abbastanza buona, ma ovviamente quando seleziono una voce che implica l'apertura di una form non ho niente di tangibile, ma solo il nome della form scritta dentro un campo della tabella e da qui l'esigenza di estrarre la classe e aprire la form.
Il prossimo passo che sto cercando di risolvere, ma non volevo postarlo qui sul forum evitando una seconda figura da 'Pinguino' è eseguire un metodo/funzione partendo sempre da una stringa, il tutto ovviamente si ricollega sempre a voci di menù in quanto a volte ho bisogno di aprire una form, ma altre volte posso aver bisogno semplicemente di lanciare una funzione...
N.
Ok, allora direi che hai scelto la strada più semplice e immediata per i requisiti che hai esposto sino ad ora.Originariamente inviato da Nettuno95
Il tutto è nato dal voler costruire un menu partendo da una tabella di un DB per poi caricarlo a run time in modo da avere un menù dinamico, senza ricompilare l'eseguibile, e in base a vari utenti o diritti o qualsiasi altra cosa mi possa venire in mente.
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Bene detto da una persona che delphi praticamente inizia ad usarlo a colazione ... spero sia un complimentoOriginariamente inviato da alka
Ok, allora direi che hai scelto la strada più semplice e immediata per i requisiti che hai esposto sino ad ora.
N.