PDA

Visualizza la versione completa : [DELPHI] Intercettare chiusura di Form


vanzer
12-10-2006, 10:58
Salve a tutti,
passo subito a spiegare il mio problema:
Sfruttando un ApplicationEvents, posto su una form principale, vorrei sapere quando le varie form che vengono chiuse. Pensavo di intercettare il messaggio in questa maniera, ma non funziona..

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message = WM_CLOSE then
begin
//Codice
end;
end;

Qualche idea?

FSL
12-10-2006, 12:54
Perchè non usare l'evento OnClose di ogni Form?

Ciao
FSL

vanzer
12-10-2006, 14:13
Perchè ho tante form....quasi trenta....
Non volevo aggiungere in unit per unit righe di codice, ma stavo cercando una soluzione al problema più possibe pulita e performante, senza toccare troppo il codice dell' applicazione

FSL
12-10-2006, 15:03
In un caso simile, avevo risolto con una sola riga di codice per ogni form...

sulle form secondarie alla chiusura invio un messaggio alla MainForm:


// Form1.FormClose:
SendMessage (MainForm.Handle, WM_USER, 1, 0);

// Form2.FormClose:
SendMessage (MainForm.Handle, WM_USER, 2, 0);

....

// Form30.FormClose:
SendMessage (MainForm.Handle, WM_USER, 30, 0);

Sul MainForm ho un dispatcher dei messaggi:


private
procedure WMformClose (var msg : TMessage); message WM_USER;

implementation;

procedure TMainForm.WMformClose (var msg : TMessage);
var
FormClosed: integer;
begin
FormClosed:= msg.wParam;
case FormClosed of
1:
2:
// ecc...
end;
end;


Ciao
FSL

vanzer
12-10-2006, 15:16
Ok, grazie mille! direi che può andare, anche se però avrei preferito trovare un messaggio di windows specifico, in modo da non dover aggiungere nessuna riga di codice alle form

alka
12-10-2006, 19:27
La soluzione è ancora più semplice: sfruttare la VFI (Visual Form Inheritance) di Delphi, cioè la possibilità di ereditare un Form esistente creandone una classe discendente.

Nella classe del Form base è possibile gestire l'evento OnClose segnalando a chi di dovere l'avvenuta chiusura del Form stesso; ereditando altri Form da questo, si eredita anche il meccanismo di segnalazione ed è sufficiente aggiungere l'implementazione specifica per ciascuno di questi.

Se servono ulteriori dettagli o chiarimenti, basta chiedere.

Ciao! :ciauz:

vanzer
13-10-2006, 08:41
Muchas Gracias! Grazie all' ultima risp, il problema è risolto!

Ciao a tutti! :yuppi: :yuppi: :yuppi:

Loading