AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi MDI-Applikation - Ereignis bei Schließen eines Childfenster
Thema durchsuchen
Ansicht
Themen-Optionen

MDI-Applikation - Ereignis bei Schließen eines Childfenster

Ein Thema von mschaefer · begonnen am 26. Apr 2003 · letzter Beitrag vom 1. Mai 2003
Antwort Antwort
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#1

MDI-Applikation - Ereignis bei Schließen eines Childfenster

  Alt 26. Apr 2003, 12:22
Moin, moin zusammen,

Wie kann ich in einer MDI-Applikation im MDI-Fenster mitbekommen (Ereignis??) wenn ein Clientfenster geschlossen wurde ?

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 26. Apr 2003, 12: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#3

Selbst definierte Message

  Alt 26. Apr 2003, 12:34
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
Martin Schaefer
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 26. Apr 2003, 12: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#5
  Alt 26. Apr 2003, 19: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
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#6

Meine Lösung

  Alt 1. Mai 2003, 20:43
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.. ..

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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