Delphi-PRAXiS

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 Hat Fenster den Eingabefokus? (https://www.delphipraxis.net/73524-hat-fenster-den-eingabefokus.html)

VizeTE 19. Jul 2006 11:34


Hat Fenster den Eingabefokus?
 
Hallo,

ich möchte wissen ob ein Fenster "vor" einem anderen Fenster des selben Programms ist bzw ob es den Eingabfokus hat.

Das Problem mal am konkreten Beispiel:

Ich habe ein Hauptformular und ein zusätzliches Fenster, welches ich nicht Modal anzeige. Im Hauptfenster läuft ein Timer. Dieser führt bestimmte Routinen aus. Das soll er aber nur machen wenn das Zweitfenster nicht den Eingabefokus hat.

Ich habe es mit der Funktion "Zweitfenster.Focused" probiert. Da kommt aber immer false zurück.

Nun hatte ich die Idee ob man nicht die z-Order der Fenster abfragen kann. Wenn das Zweitfenster den Fokus hat muß es in der z-Order ja über dem Hauptfenster liegen. Leider weiß ich jedoch nicht wie das funktioniert.

Kann mir da jemand auf die Sprünge helfen oder hat wer eine andere Idee?


Danke,
Daniel

WtF 19. Jul 2006 11:43

Re: Hat Fenster den Eingabefokus?
 
Wenn du nicht vom Zweitfenster das focus abrufen kannst dann überprüf doch einfach ob das Hauptfenster den Fokus nicht hat. Dann weißt du doch das dass zweitfenster den Fokus hat.
MfG Steffen

VizeTE 19. Jul 2006 12:08

Re: Hat Fenster den Eingabefokus?
 
Das funktioniert leider auch nicht. Wenn ich vom Hauptform Focudes abfrage bekomme ich ebenso immer false als Ergebnis. Ich gehe davon aus, daß ich nur von dem aktuellen Eingabefeld "true" zurückbekomme.

Aber selbst wenn würde es auch nicht funktionieren. Der Timer soll auch ausgeführt werden wenn ein anderes Programm den Fokus hat. Nur halt nicht wenn das eigene Fenster vorn ist nicht.

pinhead 19. Jul 2006 12:14

Re: Hat Fenster den Eingabefokus?
 
wie schauts aus mit

Delphi-Quellcode:
procedure Tform1.Timer1Timer(Sender: TObject);
begin
  if not form2.showing then
  begin
    //Hier deine Routinen
  end;
end;

VizeTE 19. Jul 2006 12:30

Re: Hat Fenster den Eingabefokus?
 
Das funktioniert auch nicht, leider.

Zitat:

Zitat von Delphi-Hilfe
Ist die Eigenschaft Visible eines Steuerelements und aller in der Hierarchie übergeordneten Komponenten auf True gesetzt, hat Showing auf jeden Falls den Wert True.

Wenn das Zweitfenster angezeigt aber von dem Hauptfenster überdeckt wird hat es dennoch den Status "Visible=true". Also wird auch "Showing" den Wert true zurückgeben. Es wird ja auch angezeigt, eben nur im Hintergrund.

pinhead 19. Jul 2006 12:35

Re: Hat Fenster den Eingabefokus?
 
dann halt

Delphi-Quellcode:
procedure Tform1.Timer1Timer(Sender: TObject);
begin
  if not form2.active then
  begin
    //Hier deine Routinen
  end;
end;
"Mit Active kann festgestellt werden, ob das aktuelle Formular aktiv ist. Das aktive Formular empfängt alle Tastatureingaben. Wenn es eine Titelleiste enthält, wird das Formular mit den in der Systemsteuerung festgelegten Farben angezeigt.

Hat Active den Wert true, besitzt das Formular den Fokus. Ist die Eigenschaft auf false gesetzt, ist das Formular nicht aktiv."

VizeTE 19. Jul 2006 12:55

Re: Hat Fenster den Eingabefokus?
 
ja, so scheints zu funktionieren.

Danke! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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