Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Fenster ausblenden und Fokus abgeben / verlieren (https://www.delphipraxis.net/161820-fenster-ausblenden-und-fokus-abgeben-verlieren.html)

Schwedenbitter 22. Jul 2011 11:20

Fenster ausblenden und Fokus abgeben / verlieren
 
Hallo,

ich habe in einer Applikation ein Fenster, dass nach der Eingabe von Informationen ausgeblendet wird. Dies mache ich über einen
Delphi-Quellcode:
TTimer
mittels
Delphi-Quellcode:
AlphaBlendValue
.
Jetzt ist mein Problem, dass das Fenster solange den Fokus behält, bis ich nach Erreichen von
Delphi-Quellcode:
AlphaBlendValue = 0
dieses mit
Delphi-Quellcode:
Hide;
gänzlich verstecke. Wenn der/die Benutzer weitere Eingaben machen, beziehen diese sich aber auf das Fenster und werden in mein TMemo eingetragen. Das ist gelinde ausgedrückt ungünstig.

Ich möchte daher den Fokus an die Anwendung abgeben, die ihn vor dem Aufrug meines Fensters hatte - notfalls ein irgend eine Anwendung.

Wie mache ich das?

Suche mit "Fokus abgeben", "Fokus verlieren" hat mich nicht weiter gebracht.

Gruß, Alex

stahli 22. Jul 2011 12:09

AW: Fenster ausblenden und Fokus abgeben / verlieren
 
Ich nutze die gleiche Verfahrensweise und habe damit eigentlich kein Problem.
Das ausfaden geschieht nach einem OK-Button-Klick in ca. 1 Sekunde. Dass der Focus erst danach wechselt, stellt kein Problem dar.

Anders herum kann der User auch ein anderes Formular anklicken, wodurch das betreffene Formular deaktiviert wird und dadurch das ausfaden gestartet wird.
Dann hat das neue Formular bereits den Fokus, was der User in dem Fall auch erwartet.

Wie man das Eingabeformular vorzeitig "deaktiviert" kann ich jetzt nicht sagen.

himitsu 22. Jul 2011 12:22

AW: Fenster ausblenden und Fokus abgeben / verlieren
 
Fokus abgeben:

Man gibt etwas Anderem den Fokus (über {dasAndere}.SetFocus),
oder man setzt ActiveControl der Form ganz einfach auf nil (hier geht der Fokus auf die Form über, was einen Self.SetFocus entspricht). :stupid:

stahli 22. Jul 2011 12:25

AW: Fenster ausblenden und Fokus abgeben / verlieren
 
Aber es soll das Formular aktiviert werden, das aktioviert wird, wenn das aktuelle Formular geschlossen wird (ohne dass das aktuelle Formular sofort geschlossen wird).

Schwedenbitter 22. Jul 2011 13:59

AW: Fenster ausblenden und Fokus abgeben / verlieren
 
Vermutlich habe ich mich missverständlich ausgedrückt. Ich habe eine Anwendung, die mehr oder weniger im Hintergrund läuft; ein Chat um genau zu sein. Per Hotkey wird das MainForm sichtbar gemacht und das Programm erhält einen Eintrag in der Taskleiste. Der Benutzer tippt nun seine Nachricht ein und quittiert mit OK.

Jetzt wird das Fenster etwas verzögert wieder ausgefadet (<- blödes Wort) und dann inkl. Taskleisteneintrag versteckt. Während des Ausfadens ist es aber nicht vor weiteren Eingaben des Benutzers geschützt und/oder der Benutzer möchte bereits ohne weitere Klicks mit etwas anderem arbeiten. Wir haben hier ein Büro, in dem die Tastatur berufsbedingt deutlich mehr als die Maus bedient wird...

Anders herum gefragt:
Wie ermittle ich, wer den Focus hatte, bevor ihn mein Programm erhält. Dann könnte ich mir doch das merken und den wieder zurückgeben. Oder ist das zu einfach gedacht?

BUG 22. Jul 2011 14:23

AW: Fenster ausblenden und Fokus abgeben / verlieren
 
Das geht doch in die Richtung :arrow: getWindow

EDIT: Oder enumWindows und du aktivierst das erste Fenster, das nicht zu deiner Anwendung gehört.

Schwedenbitter 22. Jul 2011 15:26

AW: Fenster ausblenden und Fokus abgeben / verlieren
 
Danke für Eure Tipps!

Ich bin bei der Forensuche jetzt hierauf gestoßen. Insbesondere der Hinweis von himitsu hat mir geholfen.

Ich mache es jetzt so, dass ich vor dem Öffnen meines Fensters mit
Delphi-Quellcode:
GetForegroundWindow
das aktuell im Fokus befindliche Fenster ermittle. Dann werfe ich einen TTimer an, mit dem ich diesen Wert aktuell halte ( <> self.Handle). Gleich zu Beginn des Ausfadens gebe ich dann den Fokus zurück, was hoffentlich mit
Delphi-Quellcode:
SetForegroundWindow
geht. Mein Fenster hat damit nicht mehr den Focus.
Ich hatte bloß gedacht/gehofft, es würde einfacher gehen...

Das sollte mein Problem lösen. Ich bin mal so frech und melde mich zurück, falls es nicht klappt. Im Grunde hätte ich gleich selbst drauf kommen können. Aber manchmal hat man ein Brett vor dem Kopft. Bloß gut, dass es :dp: gibt.


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