Delphi-PRAXiS

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 VirtualStringTree, MultiSelect und RightClickSelect (https://www.delphipraxis.net/191326-virtualstringtree-multiselect-und-rightclickselect.html)

Codehunter 3. Jan 2017 09:28

VirtualStringTree, MultiSelect und RightClickSelect
 
Hallo!

Hatte schon mal jemand beim VST folgendes Problem: Unter SelectionOptions toFullRowSelect, toRightClickSelect und toMultiSelect ausgewählt. Wenn man dann eine Menge x Knoten im Baum markiert und mit der rechten Maustaste klickt um ein Kontextmenü aufzurufen, dann "unselected" VST alle markierten Knoten bis auf den einen, auf dem der Mauszeiger beim Rechtsklick war. Allerdings passiert das nicht reproduzierbar nur alle paar Versuche mal, scheinbar nach dem Zufallsprinzip.

Grüße
Cody

Aviator 3. Jan 2017 09:44

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Habe jetzt leider kein Programm in dem diese Voraussetzungen erfüllt sind. Aber soweit ich mich erinnere hatte ich so etwas noch nicht. Wäre ja auch eigentlich nicht logisch bzw. ein ziemliches Fehlerverhalten des Trees. :roll:

Kann es sein das es nur passiert wenn du auf einen Bereich klickst der keiner Spalte mehr zugeordnet werden kann und der Wert der Spalte vielleicht COLUMN_INVALID (-2) bzw. COLUMN_NOCOLUMN (-1) ist? Also praktisch nur ganz rechts.

Codehunter 3. Jan 2017 09:53

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Zitat:

Zitat von Aviator (Beitrag 1357889)
Kann es sein das es nur passiert wenn du auf einen Bereich klickst der keiner Spalte mehr zugeordnet werden kann und der Wert der Spalte vielleicht COLUMN_INVALID (-2) bzw. COLUMN_NOCOLUMN (-1) ist? Also praktisch nur ganz rechts.

Nein sowas einfaches ist es leider nicht. Ich hab da jetzt viel mit rumgespielt und dabei sehr genau gezielt. Mal auf dem Icon, mal auf dem Text, mal auf zusätzlichen Spalten. Es tritt überall auf, nur nicht regelmäßig.

Aviator 3. Jan 2017 09:57

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Ist das Projekt größer oder handelt es sich hier um ein kleineres Projekt bei dem du den VST Teil mal hier hochladen bzw. posten könntest? Eventuell hast du ja mehrere Events abonniert die sich irgendwie in die Quere kommen.

Alternativ schau mal auf GitHub im Bugtracker. Vielleicht steht da ja schon etwas bekanntes drin.

Codehunter 3. Jan 2017 11:36

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Ich habe jetzt durch Zufall bemerkt, dass der beschriebene Fehler nicht auftritt, wenn man vor dem Rechtsklick die Shifttaste drückt und hält. Die wird aber von meinem Code an keiner Stelle speziell behandelt, so dass ich davon ausgehe, dass es sich um einen Fehler im VST selbst handelt. Ebensowenig tritt der Fehler auf, wenn man auf einen Textbereich klickt (egal in welcher Spalte), sondern nur wenn man in einen "leeren" Bereich eines Node klickt.

Die neueren VST-Versionen nützen mir leider nichts, da ich bei der letzten Lischke-Version bleiben muss.

Aviator 3. Jan 2017 12:32

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Zitat:

Zitat von Codehunter (Beitrag 1357901)
Die neueren VST-Versionen nützen mir leider nichts, da ich bei der letzten Lischke-Version bleiben muss.

Wollte ich gerade vorschlagen. Warum kannst du denn die neue Version nicht verwenden?

Alternativ müsstest du mal im BugTracker auf GitHub suchen ob so ein Fehler schonmal behoben wurde und dann evtl. in der neuen Version diese Änderung suchen.

Oder du debuggst den OnClick Handler des Trees selbst mal durch und schaust dir an wo der Fehler auftritt. Könnte zwar etwas aufwendiger werden, aber wenn du zwingend eine Lösung dafür benötigst, dann bleibt dir fast nichts anderes übrig.

Ich versuche mal in einer neueren Version so einen Tree nachzubauen um den Fehler nachvollziehen zu können. Hast du denn mittlerweile herausgefunden wann es immer passiert?

Welche VST Version ist das die du verwendest? Ist das die 5.3.0 oder wie die hieß?

Codehunter 9. Jan 2017 11:46

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Das Problem sind einige alte Projekte die noch für/mit D7 gemacht werden. Weil damals jemand so schlau war und Drittanbieter-Kompos ohne Source gekauft hat, kann ich diese Projekte nicht auf D10 migrieren. Und die JAM-Versionen vom VST laufen nun mal nicht mehr mit D7.

Ich konnte das Problem inzwischen soweit eingrenzen, dass es etwas mit FullRowSelect zu tun haben muss. Scheinbar ignoriert VST intern bei Clicks mit gedrückten Ctrl-, Shift- und/oder Alt-Tasten die Option toFullRowSelect und tut so als müsste man gezielt auf das TextRect klicken (dann funktionierts normal, insofern muss ich meine frühere Aussage korrigieren).

nahpets 9. Jan 2017 12:07

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Eigentlich ist das eher ein windowstypische Verhalten.

Mit einem einfachen Klick wählst Du einen Eintrag aus.

Mit Shift+Klick wählst Du alle Einträge aus, die sich zwischen dem bereitsmarkierten und dem gerade angeklickten Eintrag befinden.

Mit Strg+Klick kannst Du nacheinander mehrere Einträge markieren, die Markierung der bereits markierten Einträge bleibt erhalten.

Mit 'nem nun folgenden rechten Mausklick kann dann ein Kontextmenü aufgerufen werden, das für alle markierten Einträge gilt.

Problem dabei: Windows scheint ab und an schonmal der Meinung zu sein, dass der Rechtsklick zuerst ein einzelner Klick ist, der den aktuellen Eintrag markieren soll (und damit alle anderen Markierungen aufhebt) und anschließend das Kontextmenü aufruft.

Da ich den VST bisher noch nicht (wissentlich) genutzt habe, dass Verhalten aber schon seit Jahren kenne, gehe ich mal davon aus, dass das kein expliziter Fehler im VST ist.

Der Fehler scheint dann häufiger aufzutreten, wenn eine Maus (bzw. deren Tasten) nicht ganz prellfrei arbeitet. Dadurch kann das Ereignis des Klicks für Windows wie zwei Ereignisse aussehen und zu dem geschilderten Problem führen.

Aviator 9. Jan 2017 12:39

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Bin leider noch nicht dazu gekommen ein Beispiel mit einer neueren VST Version zu erstellen, habe es aber noch im Hinterkopf. :-D

Aber den Punkt den nahpets nennt hatte ich bisher noch nicht. Windows hat bei mir bisher was den Rechtsklick auf markierte Elemente angeht immer korrekt gearbeitet. :roll:

Codehunter 11. Jan 2017 15:24

AW: VirtualStringTree, MultiSelect und RightClickSelect
 
Ich denke nahpets Erklärung kann man in dem Fall ausschließen, da sich das Verhalten inzwischen reproduzierbar zeigt, wenn man weiß wo und wie man klicken muss um es zu provozieren. Das mechanische Prellen von Maustasten ist denke ich schon lange kein Thema mehr, das lässt sich ja mit einer simplen RS-Schaltung verhindern. Das müssten dann schon absolute Billigst-Mäuse sein die das nicht haben.

Ich vermute, dass es irgendwo innerhalb des VST eine fehlerhafte Abfrage gibt, wenn toFullRowSelect gesetzt ist und rechts geklickt wird. Es gibt ja die THitPositions in VirtualTrees.pas. Wenn toFullRowSelect gesetzt ist dürfte/müsste THitPositions.hiOnItemLabel beim Rechtsklick ignoriert werden.

Wenn das Ding doch nicht so verdammt groß wäre... :-/


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