![]() |
Delphi-Version: 2010
Auf das Öffnen einer anderen Form/Dialog reagieren?
Moin.
Ich hätte da mal eine Frage bzw. ein Problem: Ich müsste auf das Öffnen einer Sub-Form oder eines Dialogs aus der MainForm meiner Windows-App reagieren. D.h.: Wenn ich z.B. in einer Toolbar auf einen Button klicke, dann geht eine andere Form (modal) auf. Darauf möchte ich in der MainForm reagieren, um zuvor noch etws anderes machen zu können. Auf welche Botschaft muss die MainForm da reagieren? Ein 'OnDeativate' funktioniert hier nicht, genausowenig ein WM_KILLFOCUS. Ich möchte hier nicht für jeden Aufruf einer Form extra Logik programmieren müssen, da es ein paar Dutzend sind... Irgendeine Idee, wie man sich da 'rein-hookt'? Danke & lG, Marc |
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
Ich weiß zwar nicht, was Du genau machen willst, aber Du hast ja das OnClick-Event des jeweiligen Buttons bzw. die TAction, die mit dem Button verbunden ist. Da kann man doch reagieren ...
|
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
Vielleicht
![]() |
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
Cool, kannte ich noch gar nicht.
|
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
Zitat:
[GELÖST] Okay - das geht mit "Application.OnGetActiveFormHandle". Perfekt & Danke, Marc |
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
Offenbar hab ich das Problem falsch verstanden - Beitrag kann gelöscht werden ... :(
Zitat:
Delphi-Quellcode:
Da deinen ToolButtons vermutlich unterschiedliche Ereignisbehandlungsmethoden zugewiesen werden, löst du in jeder dieser Ereignisbehandlungen dieses Event aus:
UNIT SubForm;
INTERFACE USES Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, System.Actions, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs; TYPE TToolButtonClickedEvent = Procedure of Object; TYPE TFormSub = CLASS(TForm) ... PRIVATE { Private-Deklarationen } fToolButtonClicked : TToolButtonClickedEvent; ... PUBLIC { Public-Deklarationen } ... Property OnToolButtonClicked : TToolButtonClickedEvent read fToolButtonClicked write fToolButtonClicked; END; VAR FormMain: TFormMain; IMPLEMENTATION ...
Delphi-Quellcode:
In deiner MainForm-Unit reagierst du dann mit der gewählten Methode auf das Ereignis in der SubForm:
Procedure TFormSub.MyToolBtn1Execute(Sender: TObject);
begin MachIrgendwas; ... If Assigned(fToolButtonClicked) Then fToolButtonClicked; end;
Delphi-Quellcode:
Procedure TFormMain.FormActivate(Sender: TObject);
begin ... SubForm.OnToolButtonClicked := MeineReaktionsMethode; ... end; |
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
@Perlsau:
Danke - aber genau dies wollte ich vermeiden, da es sehr, sehr viele Stellen im Programm sind, die entweder eigene Dialoge oder System-Dialog öffnen. Vielleicht mal zum eigentlichen Problem: Ich habe einen eigenen Hint, der detailliert Auskunft über bestimmte Dinge gibt. Dieses HintWindow bleibt ~20 Sekunden stehen, damit man genügend Zeit zum Lesen hat. Ruft man nun einen System-Dialog aus einem Menü auf, und die Maus ist zufälligerweise auf einem Eintrag mit einem Hint, dann poppt der entsprechende Dialog auf, aber das Hint-Window eben auch. Und genau dieses möchte ich dann eben vorher explizit schließen können. Darum muss ich mich global da irgendwie reinhooken. Mit oben genannten Botschaften bzw. Events scheint das aber nun zu klappen. Danke, Marc |
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
Ich hoffe du hast
![]() Wenn ein Systemdialog aufgeht, geht an dein Fenster ein WM_ENABLE mit wParam=0 (False) raus. Und nachher dann mit wParam<>0 (True). |
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
Zitat:
Habe ich - danke. Geht nun auch so wie gewünscht ;-) |
AW: Auf das Öffnen einer anderen Form/Dialog reagieren?
Zitat:
Das ist jetzt eine ernstgemeinte Frage und kein Spruch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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