Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Botschaft bei Aktivieren eines Fensters (https://www.delphipraxis.net/130251-botschaft-bei-aktivieren-eines-fensters.html)

oki 5. Mär 2009 13:59


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

Bernhard Geyer 5. Mär 2009 14:01

Re: Botschaft bei Aktivieren eines Fensters
 
Wenn das alle deine Formulare sind häng doch dein Mainform an das OnActivate-Event des entsprechenden Formulares.

jaenicke 5. Mär 2009 14:02

Re: Botschaft bei Aktivieren eines Fensters
 
Es gibt das Ereignis OnActivate, das genau das machen sollte.

oki 5. Mär 2009 14:06

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

taaktaak 5. Mär 2009 14:31

Re: Botschaft bei Aktivieren eines Fensters
 
... jedes Fenster könnte in seinem OnActivate() / OnDeactivate() eine UserMessage an das MainForm senden

jaenicke 5. Mär 2009 14:34

Re: Botschaft bei Aktivieren eines Fensters
 
Zitat:

Zitat von oki
@jaenicke: Jo, in Application? oder in meinem MainForm? Die bekommen dann mit, dass andere Fenster meiner Anwendung aktiviert und deaktiviert werden?

Ich meinte das wie Bernhard, aber du könntest einfach ein gemeinsames Elternformular erstellen, von dem du alle anderen Formulare ableitest. Dafür musst du ja jeweils nur die eine Zeile mit dem class(TForm) entsprechend ändern.

SirThornberry 5. Mär 2009 14:37

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.

jaenicke 5. Mär 2009 14:39

Re: Botschaft bei Aktivieren eines Fensters
 
So würde ich es ja eigentlich auch machen, aber:
Zitat:

Zitat von oki
@Bernhard: Das wollte ich vermeiden!


oki 5. Mär 2009 14:40

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ß

jaenicke 5. Mär 2009 14:43

Re: Botschaft bei Aktivieren eines Fensters
 
Zitat:

Zitat von oki
@ SirThornberry: :wall: Da hätte ich auch gleich drauf kommen können.

Ich dachte das wäre klar, wenn das Formular dynamisch erstellt wird. Dann ist ja alles klar. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.
Seite 1 von 2  1 2      

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