![]() |
TTreeView, Focus...merkwürdiges Verhalten
Hallo...8-)
ich hätte mal eine Knobelaufgabe: gegeben(vereinfacht): 1. Form 2. TTreeView 3. PageControl (AdvOfficePager) 4. auf jeder Seite des PageControl ein Listview (AdvListview) Im OnChange des TTreeView wird, je nach Index, die entsprechende Page aktiviert und der Focus auf das entsprechende Listview gesetzt. Problem: 1. wenn mit der Maus geklickt wird: - OnChange wird ausgeführt - Listview.SetFocus wird ausgeführt aber der Focus bleibt auf dem TreeView 2. wenn mit den Cursor Tasten geändert wird: (Hoch/Runter) - OnChange wird ausgeführt - Listview.SetFocus wird ausgeführt und der Focus geht auf das Listview über Hat jemand eine Idee, Lösung oder kann es zumindest reproduzieren ? Der Focus soll immer auf die Listviews gesetzt werden. Danke... :evil: Ich schreibe lieber 1000 Zeilen Code als immer diese Quälerei mit Kleinigkeiten der GUI ! |
AW: TTreeView, Focus...merkwürdiges Verhalten
Na ja, vielleicht wird im MouseUp der TreeView der Focus auf die TreeView gesetzt.
Fang das doch ab, zur not mit nem Timer (100ms). Das ist natürlich zweitklassig, funktioniert aber. Manchmal hat man nicht die Zeit, sich um solche Kinkerlitzchen zu kümmern. |
AW: TTreeView, Focus...merkwürdiges Verhalten
Danke für die schnelle Antwort 8-)
wie soll ich das im MouseUp "abbrechen" ? Das setzen des Focus passiert ja intern im TreeView ... Kannst du mir auf die Sprünge helfen ? |
AW: TTreeView, Focus...merkwürdiges Verhalten
Im MouseUp der Treeview den focus nochmal setzen oder so einen blöden Timer starten, der 100ms später den focus setzt. Klappt immer, ist aber, wie erwähnt, peinlich ;-)
|
AW: TTreeView, Focus...merkwürdiges Verhalten
ok...funktioniert. :roll: Habe mich aber entschlossen auf den ganzen Focuskram zu verzichten... Sind mir zu doof die Verrenkungen. :stupid:
|
AW: TTreeView, Focus...merkwürdiges Verhalten
Timer weglassen und sich eine Message zusenden.
Darin wird dann das SetFocus gemacht. Wenn mit PostMessage gesendet wird, dann wird diese ausgeführt, nachdem alles andere, was noch gemacht werden soll, vorher ausgeführt. Eventuell könnte man auch ein Application.ProcessMessage vor dem SetFocus einfügen. |
AW: TTreeView, Focus...merkwürdiges Verhalten
Das wäre natürlich viel besser. Ich wäre mir nur nicht sicher, ob das komische Verhalten der TreeView nach dem feuern des OnMouseUp-Events eintritt, oder davor.
Aber mit der Message kann man sich rantasten. |
AW: TTreeView, Focus...merkwürdiges Verhalten
Das Verhalten liegt daran, dass OnChange beim Herunterdrücken der Maus ausgelöst wird. Daher ist die Maus bei SetFocus noch gedrückt und der Fokus wird nicht geändert.
Nimm einfach eine bessere Komponente wie die VirtualTrees (TVirtualStringTree) und OnFocusChanged, dann hast du das Problem nicht. Außerdem ist die Komponente eh deutlich schneller und kann deutlich mehr. // EDIT: Die Standard TreeView oder ListView habe ich seit Jahren nicht mehr ernsthaft benutzt... |
AW: TTreeView, Focus...merkwürdiges Verhalten
Moin...
Zitat:
|
AW: TTreeView, Focus...merkwürdiges Verhalten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 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 by Thomas Breitkreuz