AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Existenz eines Formulars steuern
Thema durchsuchen
Ansicht
Themen-Optionen

Existenz eines Formulars steuern

Ein Thema von Mattze · begonnen am 7. Jun 2017 · letzter Beitrag vom 9. Jun 2017
Antwort Antwort
Seite 1 von 2  1 2      
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Existenz eines Formulars steuern

  Alt 7. Jun 2017, 16:22
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
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 16:56
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.
Nr.1 Delphi-Tool: [F7]

Geändert von ConnorMcLeod ( 7. Jun 2017 um 17:00 Uhr)
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 17:10
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 17:14
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.
$2B or not $2B

Geändert von himitsu ( 7. Jun 2017 um 17:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 17:57
Vorschlag: im OnEnter der Form den Zeitpunkt (GetTickCount) merken und im OnClick des Buttons ist es 2b, bei einem kleinem zeitlichen Abstand.
Genau, deshalb würde ich die History machen, somit ist relativ klar, wer und in welchem zeitlichen Abstand den Focus vorher hatte. Kann ja ein kleiner Ringbuffer sein mit nur drei Einträgen oder so.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 18:31
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.
$2B or not $2B
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#7

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 18:34
Könnte man nicht auch einfach alle Forms durchgehen und auf Active prüfen?
So mache ich es jedenfalls.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 18:49
Screen.ActiveForm ? :stupdi:

Aber im OnButtonClick ist das ja bereits umgeschaltet.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 19:08
die VCL schiebt die Fenster immer an Position 0, wenn sie den Fokus bekommen.
Eben, und genau diesen Automatismus können wir hier nicht gebrauchen
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#10

AW: Existenz eines Formulars steuern

  Alt 7. Jun 2017, 19:48
Warum nicht mit TForm.OnActivate/OnDeactivate steuern oder merken, welche Form den Fokus hatte?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:40 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