![]() |
VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Hallo
Ich habe in meinem Projekt eine VST mit ca. 50 Spalten. Mit der Maus kann man per Drag&Drop die Spaltenreihenfolge verändern was soweit super klappt. Da es aber so viele Spalten sind und nicht alle auf dem Screen sichtbar sind, möchte ich, dass wenn ich eine Spalte verschiebe, automatisch nach rechts oder links gescrollt wird, bis ich die Spalte platziere. Ich habe schon mit den Properties AutoScroll, TreeOptions-toAutoScroll etc. probiert. Ich bringe die VST aber irgendwie nicht dazu zu scrollen, wenn ich über den Borderrand schiebe. AutoScrollDelay etc. habe ich auch geprüft. Hat schon jemand Erfahrungen diesbezüglich gemacht? Danke Bruno |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Guten Morgen Zusammen
Ich habe mir nochmals die diversen Demos der VST angeschaut. Auch dort bin ich leider auf keinen Hinweis gestossen, wie ich die VST zum horizontal scrollen bringe, wenn ich Spalten verschiebe. Hat das noch niemand gebraucht? |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Du mußt in OnMouseMove die Cursorposition überprüfen. Wenn sich die einem Rand nähert, dann das Scrollen um eine bestimmten Betrag in die entsprechende Richtung manuell durchführen
|
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Hallo Sailor
Ich dachte, die VST macht das mit Ihren Optionen hoAutoScroll etc. von selbst. Wozu sind dann diese Properties und Methoden? |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Sorry, aber irgendwie hat mich der Tip von Sailor nicht weitergebracht.
Auf OnMouseMove zu scrollen wenn ich an den Rand kommt bringt mir nicht viel. Die VST soll nur dann scrollen, wenn ich eine Spalte verschiebe und diese z.B. an das Ende verschieben will. So wie das halt in jeder vernüftigen Software mit einer Spaltenansicht der Fall ist. Hat das denn noch niemand gebraucht? Keiner einen Lösungsansatz? |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Passen AutoScrollDelay und AutoScrollInterval?
Vllt hilft: function ScrollIntoView(Column: TColumnIndex; Center: Boolean): Boolean; overload; |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
AutoScrollDealy etc. ist alles gesetzt. Das Problem ist eigentlich, dass ich kein Event finde, dass während des Draggen des Spaltenheaders feuert.
Ich hab mal einen Screenshot angehängt, damit man sich ein Bild machen kann, wie ich die Spalte verschiebe. Vielleicht hilft das für einen Lösungsvorschlag weiter. Es ist ja eingentlich kein richtiges Drag&Drop sondern eine "interen" Funktion von VST, um Spalten umzusortieren. Ich glaube die ganzen AutoScroll-Funktionen sind nur für Drag&Drop von Nodes zu gebrauchen. |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Wie sieht's
![]() |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Danke für den Link. Ich habe den Code kurz in einem Demo-Projekt angeschaut. Hilft leider nicht sonderlich weiter.
|
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Kannst Du ein rudimentäres Demoprojekt online stellen, damit ich mir nicht alles selbst zusammenbasteln muss?
|
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Aber klar doch. Gerne!
Im Anhang mein kleines Test VST Projekt. Es hat eine VST mit ca. 60 Spalten mit dem ich so verschiedene Sachen an der VST ausprobiere. Spalten können darin verschoben werden, allerdings scrollt eben nichts. |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Wie es momentan für mich aussieht, wird im TVTHeader.HandleMessage (bei WM_NCMOUSEMOVE) alles gecancelt, also müsste man vom TVTHeader ableiten und im Falle, daß noch gedraggt wird, Maßnahmen setzen. Der VST bekommt dann einen Header vom neuen Typ verpaßt (GetHeaderClass) - VST am besten auch gleich ableiten.
Habe heute zuwenig Zeit dafür, bin aber an der Lösung interessiert! Ich mach dann morgen weiter. |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Schon mal Danke für Deine aktive Unterstützung. Ich komme glaube ich selber wirklich nicht weiter und Deine Erläuterung hört sich für mich etwas kompliziert an.
Bin leider nicht so tief in der Materie drin, was Komponentenprogrammierung anbelangt. Vielleicht können die Programmierer der VST das ja später in die VST übernehmen. Die VST ist ja ansonsten wirklich absolut unschlagbar was den Funktionsumfang anbelangt und die Performance ist phantastisch! Bis später dann also und keine Eile. Bin froh, wenn jemand Unterstützung geben kann! :-D |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Wichtiger Nachtrag zu diesem Thread:
Mike Lischke, Besitzer der Website ![]() >Autoscrolling bekommt man eigentlich nur mit einem Timer hin. So ist es ja auch beim Knotendragging implementiert. Also wenn das Spaltenverschieben >beginnt muss auch ein Timer gestartet werden, der dann einige Male in der Sekunde tickt und dabei die aktuelle Mausposition checked. Wenn der >Pointer am Rand ist geht dann ein horizontales Scrolling los, am besten innen sehr langsam und dann immer schneller, je weiter man mit der Maus >rausgeht. > >Ich würde vielleicht mal den Header timer genauer ansehen. Der ist zwar für die NC leave detection gedacht, könnte aber gut auch dafür >funktionieren. Allerdings habe ich mit den derzeitigen Entwicklern darüber gesprochen, diesen Timer zu entfernen und mit Aufrufen über die >TrackMouseEvent API zu ersetzen. Weiß aber nicht, ob es jemand tatsächlich umsetzt (und wenn, dann ohnehin nur im 5.0er branch). Ich glaube, mit einem Timer lässt sich das ganz gut lösen. |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Ist das nicht genau die Stelle, über die ich oben spreche?
|
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Ich habe es jetzt ehrlich gesagt nicht so verstanden und war mir nicht wirklich bewusst, dass Du vom selben Ansatz sprichst. Sorry!
|
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Ne, ist schon ok, wollte nur sichergehen. Das ist die Bestätigung, dass ich am richtigen Ende suche ;-)
|
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Also ich habe jetzt eine funktionierende Lösung mit dem bereits diskutierten Timer implementiert.
Dazu auf dem Event OnHeaderDragging den Timer aktiviert und auf OnHeaderMouseUp wieder deaktiviert. Der Timer hat diesen einfachen Code hinterlegt:
Delphi-Quellcode:
Klappt wunderbar! Das kann jetzt natürlich noch (wie Mike bereits geschrieben hat) ausgebaut werden, damit schneller und langsamer gescrollt wird, je weiter die Maus an oder über den Rand der VST gezogen wird.
procedure Tfrm_Form.tm_VSTScrollTimer(Sender: TObject);
var VSTPos: TPoint; begin inherited; VSTPos := PanelEx1.ClientToScreen(Point(VST.left, VST.top)); if Mouse.CursorPos.X > (VSTPos.X + VST.Width - 25) then begin VST.OffsetX := VST.OffsetX - 50; end; if Mouse.CursorPos.X < (VSTPos.X + 25) then begin VST.OffsetX := VST.OffsetX + 50; end; end; Aber als Lösungsansatz auf jeden schnell und einfach mit wenig Code implementiert. Danke ConnorMcLeod und Mike Lischke für die Hilfe und nötigen Gedankenanstösse! Manchmal ist die Lösungs schon so einfach, dass man einfach nicht drauf kommt! :-D |
AW: VirtualTreeView (VST) AutoScroll beim verschieben von Spalten klappt nicht
Passt gut!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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