![]() |
MDI-Applikation - Ereignis bei Schließen eines Childfenster
Moin, moin zusammen,
Wie kann ich in einer MDI-Applikation im MDI-Fenster mitbekommen (Ereignis??) wenn ein Clientfenster geschlossen wurde ? Grüße // Martin |
Moin Martin,
eine spontane Idee: Du könntest im OnClose/OnDestroy des MDI Child eine entsprechende selbst definierte Message an Dein MDI Fenster schicken. |
Selbst definierte Message
Hallo Chris,
die Idee ist nicht nur spontan sondern würde auch gut passen. Wie man an solche Messages rankommt weiß ich schon, aber wie sende ich so´n Ding ? Grüße //Martin |
Moin Martin,
ich würd' mir eine Message mit RegisterWindowMessage definieren, und diese kann dann mit SendMessage an Dein Formular verschickt werden. Für beides solltest Du hier viele Beispiele finden können. |
Hallo Martin,
wenn ein Childfenster geschlossen wird, werden OnCloseRequest und dann Onclose dieses Childfensters aufgerufen (wie oben angedeutet). Dieses childfenster und das mdi-Fenster befinden sich innerhalb einer Appplikation, du kannst also eigentlich auch ohne den Umweg über die Windowsmessage auf diese Ereignisse reagieren, auch notwendige Aktionen des MDI-Fenster betreffend ausführen. Grüsse Wolfgang |
Meine Lösung
Hallo Wolfgang, hallo Chris
erst mal Danke für die Info´s. Wolgang, Du hast natürlich recht. Ein direkter Aufruf auf die Unit des MDI-Formular genügt beim schließen des Clientfensters vollkommen. Chris muß allerdings geahnt haben wo ich hin wollte. Meine Client- Formulare werden dynamisch erzeugt und hinterher vom Hauptformular freigegeben. Da der direkte Aufruf "Gib mich frei" beim Rücksprung ins tiefe Nirwana geht ist die Message-Variante bei mir passend. Was nun entstanden ist hänge ich gerade noch an: // Definition - Unit interface uses messages; Type TMessage = record Msg: Cardinal; WParam: Longint; LParam: Longint; Result: Longint end; Const UM_TransferData = WM_USER + 200; implementation end. // Senden Unit inteface procedure InternalWindowMessage_Send ( const WParam : integer; const LParam : integer); implementation procedure TForm2.InternalWindowMessage_Send ( const WParam : integer; const LParam : integer); var hReceiver : LongInt; begin hReceiver := FindWindow('Form1', Nil); If IsWindow( hReceiver ) Then Begin PostMessage( hReceiver , UM_TransferData, WParam, LParam ); End; End; // oder im Client Window zum Senden an das MDI-Window procedure TForm2.InternalWindowMessage_Send ( const WParam : integer; const LParam : integer); var hReceiver : LongInt; hReceiverName : string; begin hReceiverName := Owner.ClassName; { wandelt short in longstring } hReceiver := FindWindow( PChar( hReceiverName ), Nil); If IsWindow( hReceiver ) Then Begin PostMessage( hReceiver , UM_TransferData, WParam, LParam ); End; End; // Empfangen Unit inteface Procedure Receive_InternalWindowMessage( Var msg: TMessage ); message UM_TransferData; implementation Procedure TForm1.Receive_InternalWindowMessage ( var msg: TMessage ); Begin Case msg.WParam of 0 : Begin Select_MDI_Form( msg.LParam ); End; 1 : Begin // zweite Aufgbe ... End; End; {Case} End; Soweit zu den Taten des Tages.. :party: .. Grüße // Martin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz