Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MDI-Applikation - Ereignis bei Schließen eines Childfenster (https://www.delphipraxis.net/4368-mdi-applikation-ereignis-bei-schliessen-eines-childfenster.html)

mschaefer 26. Apr 2003 11:22


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

Christian Seehase 26. Apr 2003 11:24

Moin Martin,

eine spontane Idee:
Du könntest im OnClose/OnDestroy des MDI Child eine entsprechende selbst definierte Message an Dein MDI Fenster schicken.

mschaefer 26. Apr 2003 11:34

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

Christian Seehase 26. Apr 2003 11:38

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.

woki 26. Apr 2003 18:00

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

mschaefer 1. Mai 2003 19:43

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 23:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz