![]() |
Existenz eines Formulars steuern
Hi,
entweder habe ich einen Knoten im Gehirn (Wahrscheinlich!) oder es geht wirklich nicht... Ich habe 2 Formulare (F1 und F2). Auf F1 liegt ein Toolbutton (TBtn, natürlich auf einer Toolbar). Beim Click auf TBtn soll folgendes geschehen: 1. F2 existiert nicht. Dann wird es erzeugt, angezeigt und aktiviert - kein Problem. 2. F2 existiert schon. 2a: F2 ist hinter F1 und deaktiviert. Es wird nach vorne geholt und aktiviert. - kein Problem 2b: F2 ist vorne und aktiviert. Dann soll es beim Click auf TBtn von F1 "beendet" werden (Zerstört, freigegeben... - wie immer man das nennen will). Das Freigeben selbst ist auch kein Problem. Das Problem: Wie unterscheide ich 2a und 2b? Die Z-Order (WM_Activate) wird schon vor dem TBtnClick geändert. Mit Getforegroundwindow und Getnextwindow habe ich es auch nicht geschafft. Geht sowas überhaupt? (D7 pro) Gruß Mattze |
AW: Existenz eines Formulars steuern
Sobald man den TBtn clickt, ändert der Focus jedenfalls zu F1. So gesehen geht's nicht, weil man zu diesem Zeitpunkt nicht mehr weiß, welche Form den Focus vorher hatte.
D.h. vllt fällt Dir eine schlaue globale Variable ein, in der steht, welche Form in den Vordergrund geholt wurde - ausgenommen man clickt auf TBtn => dann soll sich diese Variable nicht ändern. Ich ahne ein Wirrwarr von abgefangenen WindowsMessages ;-) EDIT: die globale Variable könnte auch eine Art History-Liste sein, damit wäre mglw besser entscheidbar, ob TBtn gedrückt wurde. |
AW: Existenz eines Formulars steuern
Hallo
und Danke für die schnelle Antwort. Mit einer globalen Variable habe ich das auch mal probiert. (Es reicht eine public-Variable in F2, da F2 sowieso nur untersucht wird, wenn es existiert.) Aber auch damit kriege ich es nicht hin. Ich habe gedacht, dass ich das mit dem Handle aus WM_Activate - LParam kriege, aber nee... Du hast wahrscheinlich recht, dass man da ein ziemliches Wirrwarr mit Windows-Messages anstellen muss. Mal sehen... Vielleicht fällt mir ja doch noch etwas ein. Gruß Mattze |
AW: Existenz eines Formulars steuern
Garnicht.
Wenn du auf den Knopf drückst, muß die Form vorher den Fokus bekommen und das kannst du im Button-Click natürlich nicht unterscheiden, da dort die Form schon "lange" vor dem Klickevent den Fokus besitzt. 100% sicher lässt sich das einfach nicht lösen. Vorschlag: im OnEnter der Form den Zeitpunkt (GetTickCount) merken und im OnClick des Buttons ist es 2b, bei einem kleinem zeitlichen Abstand. OK, genauso wie beim TSpeedButton kann man auch eine Form so einstellen, dass sie beim Klicken nicht den Fokus bekommt, was z.B. bei den virtuellen Tastaturen genutzt wird, aber dann bekommt deine Form1 garkeinen Fokus mehr. |
AW: Existenz eines Formulars steuern
Zitat:
|
AW: Existenz eines Formulars steuern
Die History gibt es bereits.
Screen.Forms Da sind alle VCL-Forms drin und die VCL schiebt die Fenster immer an Position 0, wenn sie den Fokus bekommen. Also von 0 bis X hat man bereits alle Fenster, in der Reihenfolge ihrer letzten Aktivierung. |
AW: Existenz eines Formulars steuern
Könnte man nicht auch einfach alle Forms durchgehen und auf Active prüfen?
So mache ich es jedenfalls. |
AW: Existenz eines Formulars steuern
Screen.ActiveForm ? :stupdi:
Aber im OnButtonClick ist das ja bereits umgeschaltet. |
AW: Existenz eines Formulars steuern
Zitat:
|
AW: Existenz eines Formulars steuern
Warum nicht mit TForm.OnActivate/OnDeactivate steuern oder merken, welche Form den Fokus hatte?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 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