![]() |
Botschaft bei Aktivieren eines Fensters
Hi Leute,
ich möchte in meinem MainForm oder über Application mitbekommen, wann ein Fenster meiner Anwendung den Focus erhält. Das gestaltet sich momentan erstaunlich schwer. ich estelle zur Laufzeit dynamisch mehrere Fenster. jetzt möchte ich, dass beim Aktivieren eines der Fenster mein MainForm automatisch mitbekommt, welches Fenster gerade deaktiviert und welches aktiviert wurde. Erst dachte ich, ich mache es einfach über OnMessage von Application. Aber da tauchen die Botschaften nicht auf. Als Botschaftsmeldungen habe ich wm_SetFocus und wm_KillFocus abgefangen und einen Brakepoint gesetzt. Da passiert abr nichts wenn ich zwischen den Fenstern hinundher schalte. Ich habe den Eindruck, dass das über Broadcast läuft und somit nicht in der Botschaftswarteschlange landet. Kennt einer eine Möglichkeit, wie man das lösen kann? Gruß Oki |
Re: Botschaft bei Aktivieren eines Fensters
Wenn das alle deine Formulare sind häng doch dein Mainform an das OnActivate-Event des entsprechenden Formulares.
|
Re: Botschaft bei Aktivieren eines Fensters
Es gibt das Ereignis OnActivate, das genau das machen sollte.
|
Re: Botschaft bei Aktivieren eines Fensters
@Bernhard: Das wollte ich vermeiden!
@jaenicke: Jo, in Application? oder in meinem MainForm? Die bekommen dann mit, dass andere Fenster meiner Anwendung aktiviert und deaktiviert werden? Gruß Oki |
Re: Botschaft bei Aktivieren eines Fensters
... jedes Fenster könnte in seinem OnActivate() / OnDeactivate() eine UserMessage an das MainForm senden
|
Re: Botschaft bei Aktivieren eines Fensters
Zitat:
|
Re: Botschaft bei Aktivieren eines Fensters
ich würde beim dynamichen erstellen der Forms einfach denen ein OnActive-Eventhandler zuweisen. In diesem kannst du dann anhand des Senders unterscheiden von welchem Fenster es ausgelöst wurde.
|
Re: Botschaft bei Aktivieren eines Fensters
So würde ich es ja eigentlich auch machen, aber:
Zitat:
|
Re: Botschaft bei Aktivieren eines Fensters
Hi taaktaak,
Das wollte ich wie gesagt vermeiden. Ich hatte die Hoffnung, dass das mit einer Botschaft über die Warteschlange läuft. Eigentlich erstelle ich die Fenster zur Laufzeit anhand ihres Klassennamens. Zum Glück sind das aber alles Nachfahren eines von mir erstellten Basisformulars. Somit werde ich eine eigene Botschaft in Activate und Deaktivate aufnehmen. Wollte das Rad nur nicht zweimal erfinden. Dank an alle, gruß oki Ahh, roter Kasten. @ jaenicke: Das entspricht wohl meinem jetzigen Weg. @ SirThornberry: :wall: Da hätte ich auch gleich drauf kommen können. Dank und Gruß |
Re: Botschaft bei Aktivieren eines Fensters
Zitat:
|
Re: Botschaft bei Aktivieren eines Fensters
Noch mal zum Geraderücken. Ich hatte Bernhards Beitrag so verstanden, dass ich eine eigene Botschaft implementiere. Auf den Gedanken vorhandene Ereignisse zu verwenden hätte ich eigentlich kommen müssen. Aber manchmal hat man es eben schwer. :mrgreen:
Gruß oki |
Re: Botschaft bei Aktivieren eines Fensters
Ach jetzt verstehe ich das erst. :wink:
Damit sollten für spätere Leser des Threads dann auch alle Klarheiten restlos beseitigt sein. :mrgreen: |
Re: Botschaft bei Aktivieren eines Fensters
Hi,
was spricht gegen Screen.OnActiveFormChange? Gruß, Frank |
Re: Botschaft bei Aktivieren eines Fensters
Diese am Anfang genannte Anforderung:
Zitat:
|
Re: Botschaft bei Aktivieren eines Fensters
Hi Dataspider,
wird das Ereignis von allen Formularen ausgelöst oder nur von den TopLevel-Formularen? Ich teste das mal. Gruß oki |
Re: Botschaft bei Aktivieren eines Fensters
Das sagt die Hilfe zu OnActiveFormChange:
Zitat:
grup oki |
Re: Botschaft bei Aktivieren eines Fensters
Ja, aber es wird IMHO sehr wohl ausgelöst, wenn die Anwendung durch Klick auf ein Form (welches vorher nicht das aktive war) aktiviert wird.
Cu, Frank |
Re: Botschaft bei Aktivieren eines Fensters
Auch ohne Click? Z.B. wenn es per Code creiert und mit Show angezeigt wird?
Gruß |
Re: Botschaft bei Aktivieren eines Fensters
Zitat:
Delphi-Quellcode:
Zumindest wird hier das Ereignis ausgelöst und die MessageBox zeigt mir TForm5 an.
procedure TForm2.ActiveFormChange(Sender: TObject);
begin MessageDlg(Screen.ActiveForm.ClassName, mtInformation, [mbOK], 0); end; procedure TForm2.Button2Click(Sender: TObject); begin Screen.OnActiveFormChange := ActiveFormChange; with TForm5.Create(Application) do Show; end; Cu, Frank |
Re: Botschaft bei Aktivieren eines Fensters
Hi Dataspider,
dann ist das auch ein gangbarer Weg und man kann die Ereignisse frei lassen. Dank für die Mühe. Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 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