Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [DELPHI] Aprire una form dal suo nome

    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.

  2. #2
    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:
    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;
    la chiamata:
    codice:
    ApriForm('Form1');
    Ovviamente nella form l'ultima riga dovrà essere il register della classe 'form'

    codice:
     
    Initialization
      RegisterClass(TForm1)
    Finalization
      UnregisterClass(TForm1)

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,324
    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...

  4. #4
    Volendo approfondire la problematica, come mai hai bisogno di risalire a un Form mediante il nome?
    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.
    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.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,324
    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.
    Ok, allora direi che hai scelto la strada più semplice e immediata per i requisiti che hai esposto sino ad ora.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Originariamente inviato da alka
    Ok, allora direi che hai scelto la strada più semplice e immediata per i requisiti che hai esposto sino ad ora.
    Bene detto da una persona che delphi praticamente inizia ad usarlo a colazione ... spero sia un complimento

    N.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.