Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Delphi - Apertura form
Forum - Delphi - Apertura form

Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 17:11
Martedì, 21/03/2017
Ho 10 form all'interno di un progetto che si chiamano rispettivamente form1, form2, form3 etc etc...
ho la necessita di aprire uno di questi form a mio piacimento senza dover creare tante linee di codice separate tipo:

form1.show
form2.show
form3.show

etc etc...

mi chiedevo: esiste un modo per avviare uno di questi form usando una variabile o un sistema simile che mi permetta di usare un solo codice? esempio

form[x].show;

Grazie mille.



Il sapere appartiene al mondo
PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 268
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 8:29
Mercoledì, 22/03/2017
La strada più facile è usare la classe (oggetto) TScreen http://docs.embarcadero.com/products/rad_studio/delphiAndc ...
Se invece vuoi complicarti la vita, ma con una maggiore flessibilità, allora ti scrivi una piccola classe che gestisce a tuo piacimento le varie form.
Saluti
G.


Ibis et redibis non morieris in bello
PM Quote
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 10:01
Mercoledì, 22/03/2017
Ciao Goblin e grazie mille per le info. Diciamo che usando la classe Tscreen funziona pero ho ancora un dubbio.. c'e' un modo per identificare il numero del form in questione? oppure vanno in ordine crescente? cioe' se ho 200 form il numero 0 sara il primo che ho creato il numero 1 sara il secondo che ho creato e cosi via?? non c'e' un altro modo per identificare il form tipo tramite tag o simili? se io non conosco quale e' l'ordine numerico dei form che ho nel progetto come faccio? spero tu abbia capito.
Grazie ancora




Il sapere appartiene al mondo
PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 268
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 10:48
Mercoledì, 22/03/2017
Ciao,
Mi spiace ma le uniche info che ti posso dare sono le stesse che leggo nella wiki di embarcadero:

Use Forms to access a form by index. The value of Index is a number between zero (the first form) and FormCount - 1. Forms can be used with FormCount when an application needs to iterate over all its forms, including all dialogs.

Forms only lists the TForm descendants in the application. This does not include, for example, property pages. To get a list that includes TCustomForm descendants that do not descend from TForm, use CustomForms instead.
Warning: The order in which Forms lists its forms is affected by the Z order of the forms. Do not change the Z order of forms when using Forms to iterate over the forms in an application.

Ma ciò non toglie che ci vuole poco per scrivere 2 righe di codice che ti ritorna l'indice della form da aprire passando un tag o un il nome.

Qualcosa del tipo

Codice sorgente - presumibilmente Delphi

  1. Function TFMain.GetMyForm(sName: String; nTag: Integer): Integer;
  2. Var x: Integer;
  3. begin
  4.   Result := -1;
  5.   if sName = '' then  // ricerco x tag
  6.   begin
  7.     for x := 0 to Screen.FormCount-1 do
  8.       if Screen.Forms[x].Tag = nTag then
  9.       begin
  10.         Result := x;
  11.         break;
  12.       end;
  13.   end
  14.   else   // ricerco x nome
  15.   begin
  16.     for x := 0 to Screen.FormCount-1 do
  17.       if Screen.Forms[x].Name = sName then
  18.       begin
  19.         Result := x;
  20.         break;
  21.       end;
  22.   end;
  23. end;  
  24.  
  25. ........
  26. // ricerca per nome
  27.   nForm := GetMyForm('pippo', -1);
  28. // ricerca per tag
  29.   nForm := GetMyForm('', 3);
  30.  
  31.   if nForm > 0 then
  32.     Screen.Forms[nForm].ShowModal
  33.   else if nForm = 0 then
  34.     showmessage('Form principale')
  35.   else
  36.     showmessage('Form non trovata');



Ovviamente devi avere una lista di nomi, oppure di Tag univoci, assegnati ogni volta che una form viene creata.

Oppure un oggetto in ascolto ogni volta che una form viene creata o distrutta con dentro la lista, la descrizione, il tag o quello che desideri e gli indici delle form al momento "vive" nella tua applicazione, interrogando questo oggetto in base ai tuoi parametri lui ti ritorna l'indice della form desiderata e a quel punto basta la chiamata: Screen.Forms[indice].ShowModal.
Spero di aver capito la tua richiesta.
Saluti
G.



Ibis et redibis non morieris in bello
PM Quote
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 11:04
Giovedì, 23/03/2017
Tutto Chiaro! Grazie mille! :k:


Il sapere appartiene al mondo
PM Quote