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/)
-   -   Delphi NONVCL: Problem mit Keyboard Focus (https://www.delphipraxis.net/14299-nonvcl-problem-mit-keyboard-focus.html)

OLLI_T 6. Jan 2004 15:00


NONVCL: Problem mit Keyboard Focus
 
Hallo liebe Gemeinde!

Ich wünsche Euch allen einen erfolgreiches, gesundes und weitestgehend bugfreies Jahr 2004.

Folgendes Szenario: In einer NONVCL Anwendung werden modale Dialoge erzeugt, die hauptsächlich graphische Controls ähnlich des TGraphicControl der VCL enthalten. An diese Controls leite ich aus der Dialogprozedur heraus unter anderem WM_KEYDOWN/UP Nachrichten um. Damit das funktioniert, muss im WM_INITDIALOG der Focus mit SetFocus(AWnd) auf den Dialog selber gesetzt werden.

Nun enthält ein Dialog neben den graphische Controls aber zusätzlich noch zwei Listviews, die natürlich auch den Focus erhalten können. Und hier kommt es nun zum Dilemma Nr. 1 des Jahres. Es gelingt mir nicht, den Focus zurück auf das Dialogfenster zu setzen. Ich rufe brav SetFocus(AWnd) auf und es wird auch eine WM_SETFOCUS Nachricht an die Dialogprozedure abgesetzt. Aber das ist leider auch alles. Der Focus landet immer wieder auf dem ersten Listview. :wall:

Wie bekomme ich den Focus wieder auf mein Fenster zurück???

Viele Grüsse

Der OLLI

Luckie 7. Jan 2004 01:07

Re: NONVCL: Problem mit Keyboard Focus
 
Kuck dir mal folgendes Scenario an: Delphi starten (leeres Formular), ein Edit draufpacken, F9.

So Das Edit hat jetzt den Focus und der Text ist selektiert. Jetzt klick irgendwo neben das Edit oder klick irgendein anderes Fensters an. Dann aktivierts du wieder dein Fenster mit dem Edit. Und du wirst sehen das Edit hat immer noch den Fokus und die Einfügemarke blinkt fleißig weiter im Edit.

Fazit: Ein Fenster / Dialog kann nur "aktiv" sein (farbige Titelleiste im Gegensatz zur grauen), es kann aber nicht den Fokus erhalten, wie ein Kindfenster. Oder hast du schon mal ein Elternfenster mit gestrichelten Rahmen gesehen?

Zitat:

Zitat von OLLI_T
An diese Controls leite ich aus der Dialogprozedur heraus unter anderem WM_KEYDOWN/UP Nachrichten um.

Wie darf ich das verstehen?

Ich weiß nicht, aber ich würde es genau anders rum machen. Ich würde die Kontrolls subclassen damit sie nur auf die Tastatur-Nachrichten reagieren.


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