Newsgroup: it.comp.lang.delphi
Titolo: ShowForm ?

Voglio mostrare il pannello principlae della mia applicazione, ma prima che 
l'utente faccia delle scelte, voglio mostrare un avviso con una finestra, se 
si verificano date condizioni. Ho provato a mettere il codice relativo a 
questa finestra di avviso dentro il FormShow del pannello principale, ma non 
va bene perchè la finestra di avviso appare prima di quest'ultimo. D'altra 
parte non c'è un AfterShowForm... Come faccio ? 


Scusa, non ho capito:
quale deve apparire prima ed in quale caso?
NioBi
--- posted by geoForum on 
http://www.delphiedintorni.it


Prova con l'evento OnActivate: scatta dopo l'evento OnShow, con
la finestra principale gia' visibile sullo schermo.
Devi pero' fare attenzione perche' l'evento scatta ogni volta che
la finestra si riattiva, ad esempio subito dopo aver mostrato
una dialog.
ciao
Giacomo

"Stark"  ha scritto nel messaggio

Fai i controlli che devi fare PRIMA che venga creata la form principale,
piu' o meno cosi'
program Project1;
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
  Application.Initialize;
  // qui fai i controlli che devi fare
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Un esempio:
http://delphi.about.com/od/formsdialogs/a/splashscreen.htm
Ciao
ACSH
-- 
If you don't think carefully, you might think that programming is
just typing statements in a programming language.
(Ward Cunningham)



Metti un timer nella finestra principale, con Enabled impostata a False
ed Interval ad un valore basso (500 dovrebbe andar bene); nell'evento
OnCreate della finestra principale se è il caso di visualizzare la
finestra con l'avviso, imposti a True la proprietà Enabled del timer.
Nell'evento OnTimer associato al timer in questione, come prima di
riga di codice reimposti a False la sua proprietà Enabled e procedi con
la visualizzazione della finestra di dialogo con l'avviso voluto.
Giuseppe

 OnCreate [...]
Anche io ho usato lo stesso tip, e funziona perfettamente ;-)
-- 
Morde

Personalmente preferisco l'OnActivate in quanto con il timer devi garantirti 
che nel delay non accada nulla.
Ad esempio, supponi che la finestra in questione venga aperta tramite un 
bottone e che l'operatore schiacci il bottone usando il tasto Invio, ma 
supponi che sto tizio sia un po' addormentato e si incanti un attimo (la 
cosa non è infrequente): se la finestra è rapida ad aprirsi e il tasto invio 
è ancora schiacciato il componente attivo della nuova finestra potrebbe 
ricevere il comando e avviare un processo prima della comparsa del messaggio 
che vuoi dargli.
Gianni 

 parte non c'è un AfterShowForm... Come faccio ?
OnActivate
stabilisci mediante un flag privato della form se si tratta della prima
attivazione e nel caso procedi. Es.:
procedure TuaForm.OnActivate(.....);
begin
  Update; // si forza il disegno della form
  if fAlreadyActivated then
  begin
    fAlreadyActivated := True;
    // fai le tue operazioni
  end;
end;
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Metti un timer nella finestra principale
Meglio evitare l'uso dei timer per cose non legate ad una
"temporizzazione".


 prima di quest'ultimo. D'altra parte non c'è un AfterShowForm... Come 
Io ho modificato un pochino un idea trovata qui
http://tinyurl.com/2perht
 e sembra funzionare.
Saluti Goblin
-- 
Ibis et redibis non morietur in bellum.

 ....
Io sono d'accordissimo con te ed Andrea; infatti, questa tecnica la uso
*solo* nella mainform dei miei progetti per visualizzare, all'avvio del
programma, un dialogo modale con le informazioni sul programma ed il
cliente, e posso dire che finora non mai avuto problemi.
Giuseppe

 attivazione e nel caso procedi.
a questa soluzione non avevo pensato, mi sembra migliore dell'uso del
timer..
-- 
Morde

Come ho postato la domanda, mi sono ammalato, così oggi mi sono goduto tutte 
le risposte. Grazie a tutti. Direi che mi piace l'idea dell'activate, che 
d'altra parte già uso per altre ragioni, ma avevo il problema di non 
rieseguire + volte il codice. L'idea del flag mi piace, solo che non ho 
capito come si realizza. Nell'esempio fAlreadyActivated dove è dichiarata ? 
Cos'è un flag privato della form ? Grazie se qualcuno vorrà chiarirmi quanto 
sopra.
"Andrea Laforgia" <x...@xx.xx> ha scritto nel messaggio 
news:f48idi$tda$1...@news.newsland.it...
