AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

D12 VCL Eingabefokus nach Menü-Hotkeys

Ein Thema von WiWo · begonnen am 3. Jul 2024 · letzter Beitrag vom 4. Jul 2024
Antwort Antwort
Seite 1 von 2  1 2      
WiWo

Registriert seit: 16. Aug 2007
17 Beiträge
 
#1

D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 3. Jul 2024, 10:58
Ein blödes Problem, das ich noch nicht lösen konnte:
Ich habe Child-Formulare, die ich aus einem Hauptmenü heraus aufrufe. Wenn ich in meinem Programm einen Style (nicht "WINDOWS") verwende, so passiert folgendes:
Bei Aufruf meiner Child-Form per Menü-Hotkeys (also nicht per Maus) hat direkt danach weiter das Hauptmenü den Eingabe-Fokus. Das passiert nicht bei Style "WINDOWS". Es gibt nun Kunden, die es gewohnt sind, viel mit den Hotkeys zu arbeiten und direkt nach Aufruf eines Programmpunkts erwarten, dort Eingaben zu machen (z.B. ebenfalls per Hotkey ein Suchfenster zu öffnen). Die geraten jetzt ins Stolpern, da sie zuerst mal das neu aufgemachte Child-Fenster per Maus anklicken müssen.
Ich hab schon allerlei Versuche gemacht, den Fokus zur frisch geöffneten Form zu kriegen, aber ohne Erfolg.
Vielleicht hat hier jemand eine Idee oder sogar eine Lösung?

Winfried.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#2

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 3. Jul 2024, 11:17
Zeig doch mal etwas Code.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#3

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 3. Jul 2024, 15:27
Ein blödes Problem, das ich noch nicht lösen konnte:
Ich habe Child-Formulare, die ich aus einem Hauptmenü heraus aufrufe. Wenn ich in meinem Programm einen Style (nicht "WINDOWS") verwende, so passiert folgendes:
Bei Aufruf meiner Child-Form per Menü-Hotkeys (also nicht per Maus) hat direkt danach weiter das Hauptmenü den Eingabe-Fokus. Das passiert nicht bei Style "WINDOWS". Es gibt nun Kunden, die es gewohnt sind, viel mit den Hotkeys zu arbeiten und direkt nach Aufruf eines Programmpunkts erwarten, dort Eingaben zu machen (z.B. ebenfalls per Hotkey ein Suchfenster zu öffnen). Die geraten jetzt ins Stolpern, da sie zuerst mal das neu aufgemachte Child-Fenster per Maus anklicken müssen.
Ich hab schon allerlei Versuche gemacht, den Fokus zur frisch geöffneten Form zu kriegen, aber ohne Erfolg.
Vielleicht hat hier jemand eine Idee oder sogar eine Lösung?

Winfried.
Ist in dem Childform die Property ActiveControl gesetzt? Wird das Form jeweils neu erzeugt oder wird nur ein schon existierendes Form angezeigt? MDI oder nicht MDI, das ist auch eine Frage, die relevant sein könnte.
Peter Below
  Mit Zitat antworten Zitat
WiWo

Registriert seit: 16. Aug 2007
17 Beiträge
 
#4

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 3. Jul 2024, 18:17
hallo Peter,
es ist eine MDI-Applikation. Die Child-Forms werden im Click-Event des Menüs instanziert. Leider ist die Applikation extrem groß und komplex (1026 eigene Units aus 26 Jahren Entwicklung + Fremdsoftware) und meine Vermutung, dass das Problem allgemeiner Natur ist, hat sich leider zerstreut. Ein vereinfachter Nachbau der Grund-Elemente (MDI-Parent, Menü, MDI-Child, User-Style) hat nämlich das Problem nicht und ich muss mich jetzt durch Vereinfachung der Problem-App an den Fehler ranhangeln. Breakpoints sind dabei leider kaum nützlich, da sie sofort zu einem Fokus-Wechsel führen.
Seltsame Verhaltensweisen hab ich, seit ich Styles verwende, schon häufiger gehabt und die Fehlersuche war jedes Mal recht mühsam.
  Mit Zitat antworten Zitat
WiWo

Registriert seit: 16. Aug 2007
17 Beiträge
 
#5

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 4. Jul 2024, 09:13
inzwischen ist es mir doch gelungen, den Fall in einem einfachen Projekt nachzustellen, und ich denke, es handelt sich um einen Bug in der Delphi-Runtime. Eigentlich müsste ein einfacher Workaround möglich sein, aber bislang sind all meine Versuche gescheitert.
Es ist eine VCL-MDI-Anwendung mit einem Style; ich habe im Beispiel mal den "Iceberg Classico" verwendet.
Das Hauptfenster bekommt ein Menü, das per &-Shortcuts steuerbar ist (Alt-Taste und markierter Buchstabe).
Irgendein MDI-Child ist bereits geöffnet.
Ich instanziere und öffne eine neue MDI-Child-Form per &-Shortcut.
Dann ist weiterhin der Fokus auf der Menüleiste; jeglicher weiterer Tastendruck landet im Menü und nicht in meiner neuen Form.
Das passiert nicht, wenn als Style "Windows" genommen wird.
Das passiert nicht, wenn zuvor keine andere Form aktiv war.
Das passiert nicht, wenn das Menü per Maus bedient wird.
Das passiert auch nicht, wenn man zuerst nur die Alt-Taste drückt und wieder loslässt. Dann ist das Menü ja auch aktiviert und man kann ohne Alt-Taste fortfahren im Menü.

Ich lege mal das Beispielprojekt gezippt hier rein.

Mit Alt-T F öffnet sich Form1. Der Fokus sollte dann auf dessen Exit-Button liegen und ein simple E sollte die Form schließen. Tut es aber nicht.
Angehängte Dateien
Dateityp: zip Test2.zip (4,17 MB, 3x aufgerufen)

Geändert von WiWo ( 4. Jul 2024 um 09:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#6

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 4. Jul 2024, 09:46
Das passiert auch nicht, wenn man zuerst nur die Alt-Taste drückt und wieder loslässt. Dann ist das Menü ja auch aktiviert und man kann ohne Alt-Taste fortfahren im Menü.
Ich kenne das eigentlich nur so. Und ich hatte gerade nur ein XE3 zur Verfügung, dort funktioniert es auch erst gar nicht, wenn ich die Alt-Taste gedrückt halte.

Ein Unit1.Form1.SetFocus; nach dem Show könnte Abhilfe schaffen...
  Mit Zitat antworten Zitat
WiWo

Registriert seit: 16. Aug 2007
17 Beiträge
 
#7

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 4. Jul 2024, 10:51
hallo Olli,

ein SetFocus war natürlich mein erster Versuch. Hab's an allen möglichen Stellen probiert, ohne Erfolg. Es gibt leider auch nichts (mir bekanntes), um dem Menü den Fokus zu entziehen.
Ich hab das Projekt auch mal probeweise mit D11 kompiliert; da ist der Fehler auch schon drin.
Zur Sache mit der Alt-Taste: Ich hab hier sogar noch eine D2007-Version des Programms, die noch gewartet wird. Da funktioniert alles richtig. Das Problem ist, soweit ich das erkennen kann, erst mit den Styles reingekommen.
Dummerweise ist der Fehler ein halbes Jahr im Testbetrieb niemandem aufgefallen und jetzt, da die Auslieferung an die Kunden gestartet ist, wird es richtig eng.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 4. Jul 2024, 11:22
Programme im Hintergrund haben nicht das Recht sich selbstständig in den Vordergrund zu drängeln.
Das aktive Programm darf aber fremde Programme vorholen und ihnen die Kontrolle übergeben.

https://learn.microsoft.com/en-us/tr...on-not-working
https://stackoverflow.com/questions/...w-to-the-front
...

Wenn dein Programm durch irgendwass kurz den Fokus verliert, dann ist es am Arsch.
z.B. ein Fenster schließen, wo es fehlschlägt einem anderen eigenem Fenster vorübergehend den Fokus zu überlassen und erst dann das Neue öffnen.
passiert z.B. selbst der Delphi-IDE gern, wenn gewisse Options-/Fehlerdialoge geschlossen werden.



Oder, was ich grade eben als Problemchen hatte.
* ein Vorauswahldialog geht im OnCreate auf
* der wird geschlossen (Klick auf OK-Knopf) und es tritt ein Fehler auf (hier in einem Query mit defektem SQL)
* der Fehlerdialog erwischt noch das grade noch aktive Vorauswahl-Fenster und merkt sich dessen Handle (HWND)
* * VCL-Dialoge merken sich im ShowModal den Vorherrigen und wollen anschließend den Fokus zurück dahin verschieben
* der Vorgänger ist inzwischen weg, es tritt sowas wie ein Windows.SetFocus(0) auf
* und das Programm wird ganz nach hinten geschoben, hinter alle Fenster anderer Programme
$2B or not $2B

Geändert von himitsu ( 4. Jul 2024 um 11:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#9

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 4. Jul 2024, 12:18
ein SetFocus war natürlich mein erster Versuch. Hab's an allen möglichen Stellen probiert, ohne Erfolg. Es gibt leider auch nichts (mir bekanntes), um dem Menü den Fokus zu entziehen.

Probiere Mal:

Delphi-Quellcode:
  PostMessage(Unit1.Form1.Handle, WM_SYSKEYDOWN , VK_MENU, 0);
  PostMessage(Unit1.Form1.Handle, WM_SYSKEYUP , VK_MENU, 1);
  Mit Zitat antworten Zitat
WiWo

Registriert seit: 16. Aug 2007
17 Beiträge
 
#10

AW: D12 VCL Eingabefokus nach Menü-Hotkeys

  Alt 4. Jul 2024, 13:37
Hi Olli,

mit Deiner Lösung geht's. Kann sogar in FormCreate-Events der Basis-Formulare eingebaut werden, womit das Problem einfach zu lösen ist. Muss ich nur noch intensiv testen, ob es in allen Situationen problemfrei funktioniert.
Danke.
  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 15:57 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