Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TTreeView, Focus...merkwürdiges Verhalten (https://www.delphipraxis.net/166565-ttreeview-focus-merkwuerdiges-verhalten.html)

haentschman 18. Feb 2012 21:48


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 !

Furtbichler 18. Feb 2012 21:53

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.

haentschman 18. Feb 2012 21:56

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 ?

Furtbichler 18. Feb 2012 22:28

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 ;-)

haentschman 18. Feb 2012 23:05

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:

himitsu 18. Feb 2012 23:23

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.

Furtbichler 19. Feb 2012 08:41

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.

jaenicke 19. Feb 2012 09:44

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...

haentschman 19. Feb 2012 10:56

AW: TTreeView, Focus...merkwürdiges Verhalten
 
Moin...
Zitat:

Nimm einfach eine bessere Komponente wie die VirtualTrees
...warum sollte ich mir für eine Hand voll statische Nodes (die man im VST nicht zur Designzeit definieren kann) so ein Monster antun ? :gruebel:

jaenicke 19. Feb 2012 13:24

AW: TTreeView, Focus...merkwürdiges Verhalten
 
Zitat:

Zitat von haentschman (Beitrag 1151828)
...warum sollte ich mir für eine Hand voll statische Nodes (die man im VST nicht zur Designzeit definieren kann) so ein Monster antun ? :gruebel:

Na gut, wenn bei dir solche Daten zur Designzeit auf dem Formular liegen... bei mir sind die Komponenten so oder so leer. Wenn ich einen solchen Fall von statischen Nodes habe, liegen die Überschriften schlicht in einem Array und damit ist das in wenigen Zeilen erledigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.
Seite 1 von 2  1 2      

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