Newsgroup: it.comp.lang.delphi
Titolo: Passaggio di dati tra projectFile e form

Eseguo delle operazioni nel projectFile il cui esito chiude il project, per 
cui l'utente non sa nemmeno che c'è stata una esecuzione, oppure entra in un 
modo normale e si apre l'applicazione.
Vorrei sapere se l'applicazione che si apre potrebbe approfittare di alcune 
info create nella prima fase dal codice eseguito nel file di progetto (che 
poi sono una stringList e alcuni valori).
Mi pare di no, ma non si sa mai ... 
 
 
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
http://www.avast.com
 
 

 Mi pare di no, ma non si sa mai ... 
 
Infatti. Per poterlo fare dovresti poter mettere in una UNIT
qualcosa tipo "uses ...., projectFile, ..." che non e' ammesso.
 
L'unica cosa che puoi fare e' mettere queste variabili globali
in una terza UNIT che puoi includere sia dal main che ci scrive 
sia dalla UNIT da cui vai a leggere queste informazioni.
 
ciao
Giacomo
 

"Giacomo Degli Esposti"  ha scritto nel messaggio 
news:2c9cb6ed-ea58-441d...@googlegroups.com...
Infatti. Per poterlo fare dovresti poter mettere in una UNIT
qualcosa tipo "uses ...., projectFile, ..." che non e' ammesso.
L'unica cosa che puoi fare e' mettere queste variabili globali
in una terza UNIT che puoi includere sia dal main che ci scrive
sia dalla UNIT da cui vai a leggere queste informazioni.
ciao
Giacomo
 
In effetti, nel source del progetto, ho dovuto mettere uno 'uses' in cui in 
aggiunta ad alcune classi tipiche (SysUtils, classes, ..), ho inserito delle 
mie units, tra cui una generica che contiene alune proc che uso nel codice 
che viene eseguito nel project. Potrei usare una di queste, che nel caso 
l'elaborazione prosegua con l'apertura dell'applicazione, mi passi questi 
dati. Ma come si fa in pratica ? Per esempio, nel project definisco e creo 
una stringList che riempio con delle info che poi servono all'applicazione 
che poi apro. Praticamente, se il codice nel project lascia la stringList 
vuota, si chiude qui. Altrimenti l'applicazione si apre e ricrea e 
ricostruisce la stringList. In questo caso, come dovrei fare per passare la 
stringList dal progetto alla unit dell'applicazione ? puoi fare un esempio 
concreto? 
 
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
http://www.avast.com
 
 

 Mi pare di no, ma non si sa mai ... 
 
xche non provare da aggiungere delle property apposite al mainform?
A quel punto il mainform ha i valori disponibili e puo farne cio che gli pare.
 
A.
 
 
 
 
 
 
A.


"Alberto Salvati"  ha scritto nel messaggio 
news:9277ce1d-d4cd-4803...@googlegroups.com...
xche non provare da aggiungere delle property apposite al mainform?
A quel punto il mainform ha i valori disponibili e puo farne cio che gli 
pare.
A.
In pratica, non dovrei sbarazzarmi della StringList creata nella unit del 
progetto, per passarla al MainForm dell'applicazione (che eventualmente 
dovessi aprire) che dovrebbe dichiarala come property ? Provo qui di seguito 
e tu prova a dirmi se interpreto bene:
 
Program Project1
......
var
    Lista: TStringList;
    .....
    codice che crea e riempie Lista
    .....
    se Lista è vuota, chiudo project1
    se Lista non è vuota:
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    MainForm1.Lista;
    Application.CreateForm(TForm, MainForm1);
    Application.Run;
end;
 
Nel MainForm1:
 
private
  fLista: TStringList;
public
  property Lista: TStringList read fLista write fLista;


Ciao Stark,
 
S> var
S> Lista: TStringList;
S> .....
S> MainForm1.Lista;
S> Application.CreateForm(TForm, MainForm1);
 
Così no. Così ti ritrovi una bella Access Violation perché MainForm1 non 
è inizializzata quando utilizzi MainForm1.Lista...
 
O la lista la passi nel costruttore di TMainForm1, oppure la crei direttamente 
in TManiForm1... Oppure... ci sono tante diverse opzioni, ma dipende da quello 
che vuoi fare...
 
Saluti,
David
 
 

 end;
 
Prova cosi':
 
...
     Application.Initialize;
     Application.MainFormOnTaskbar := True;
     Application.CreateForm(TForm, MainForm1);
// assegni il valoro solo dopo aver costruito la form...
     MainForm1.Lista.Assign( lista );
     Application.Run;
 
 
ciao
Giacomo

nel tuo mainform dichiari una property **readolny**:
 
property MyList: TStringList read FMyList;
 
 
Sta a te decidere se preferisci usare OnCreate/onDestroy (puah) o dichiarare un override del costruttore e del distruttore e metterci dentro la creazione di FMyList e la sua free.
Io preferisco, se posso, logiche deterministiche agli eventi, poi vedi tu.
 
 
Poi:
 
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm, MainForm1);
 
      MainForm1.MyList.AddStrings( lista ); 
//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^      
      FreeAndNil(Lista);
      Application.Run;
 
 
Assign non è male, come idea.
Peccato che non tutte le classi lo implementa(va)no nel modo corretto.
Avendo 2 istanze della stessa classe (TSTringList), tanto vale usare metodi espliciti.
 
Un ultimo suggerimento.
I commenti non servono tanto a spiegare COSA fai ma PERCHE' LO FAI e magari xche le cose sono fatte in un modo e non in un altro.
Il COSA lo capisci leggendo il codice...
 
A.

"Alberto Salvati"  ha scritto nel messaggio 
news:b426f04c-d90b-48f2...@googlegroups.com...
nel tuo mainform dichiari una property **readolny**:
property MyList: TStringList read FMyList;
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm, MainForm1);
      MainForm1.MyList.AddStrings( lista );
      FreeAndNil(Lista);
      Application.Run;
A.
 
Funziona tutto proprio come volevo, grazie ! 


     MainForm1.Lista;
 
MainForm1.SetBlaBlaList(Lista);
 
oppure:
 
MainForm1.BlaBlaList := Lista;
 
MainForm1 avra` un metodo SetBlaBlaList() che impostera` il membro lista con i valori passati (potra` assegnare la lista cosi` com'e` o clonarla). Questo metodo sara` pubblico, se scegli la prima strada, o protetto e usato dalla property come setter, se scegli la seconda strada.