![]() |
VirtualStringTree (VST): bei Bildklick Text fokussieren
Ich nutze einen VST als Listview zur Anzeige diverser Daten.
Ich erkenne per OnClick wenn jemand auf den Text eines Nodes in irgeneiner Spalte klickt. Der jeweilige Text wird ja durch den Klick fokussiert, sodass ich
Delphi-Quellcode:
nutzen kann, um herauszufinden wo genau der User geklickt hat.
Node:=VST.FocusedNode;
Column:=VST.FocusedColumn; Mein Problem: Die Nodes enthalten Icons, die links neben dem jeweiligen Text stehen. Wenn jemand statt auf den Text auf das Icon klickt wird zwar der OnClick abgefeuert, jedoch wird in diesem Fall der Eintrag nicht fokussiert, sodass meine Methode nicht geht. Weiß jemand eine Möglichkeit bei Klick auf ein Icon den Text daneben zu fokussieren, oder eine andere Lösung? Danke :roll: |
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
Überschreibe OnMouseDown, mach dann einen HitTest. Wenn der HitTest zurückgibt, dass aufs Icon geklickt wurde, dann wird das Node dazu markiert. So habe ich das seinerzeit gemacht.
Quelltext gibt's nicht, weil ich noch nicht zuhause bin, aber sollte recht einfach sein. |
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
hmmm ... also mein VST selected auch wenn ich auf das Bild klicke.
Entweder du hast ein alte Version oder eine Option gesetzt, die das verhindert. |
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
chaosben, wann setzt du das Bild? Ich vermute fast, dass larks81 (so wie ich) die StateImages benutzt und du die richtigen Images. Eine Option habe ich nicht gefunden, das Problem stellte sich mir nämlich gestern auch... die "normalen" Images werden bei mir nicht angezeigt, aber habe auch nicht wirklich groß rumprobiert..
|
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
Zitat:
|
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
Ich setze die Images-Eigenschaft und bediene das OnGetImageIndex-Event.
|
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
Passt. Images-Eigenschaft setzen, dann das Event nutzen.
Delphi-Quellcode:
constructor TMFileView.Create(AOwner: TComponent);
begin inherited; Images := AppGlobals.IconManager.Images; Header.Options := [hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible]; TreeOptions.SelectionOptions := [toMultiSelect, toRightClickSelect]; TreeOptions.AutoOptions := [toAutoScrollOnExpand]; TreeOptions.PaintOptions := [toThemeAware, toUseExplorerTheme]; end; function TMFileView.DoGetImageIndex(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var Index: Integer): TCustomImageList; var NodeData: PFileNodeData; begin inherited; Result := inherited; if (Kind = ikNormal) and (Column = 0) then begin NodeData := GetNodeData(Node); Index := AppGlobals.IconManager.Icon[ExtractFileExt(NodeData.FileObject.Filename)]; Result := AppGlobals.IconManager.Images; end; end; |
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
Zitat:
Delphi-Quellcode:
kann ich nicht mal mehr einen Eintrag außerhalb column 0 selektieren (er selektiert dann, egal ob man auf Icon oder Text klickt, den Text aus Column 0).
vst.TreeOptions.SelectionOptions := [toMultiSelect, toRightClickSelect];
Habt Ihr überhaupt mehr als eine Spalte? Oder geht es bei euch auch bei Klick auf ein Image z.B. in Column 1? |
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
Ich habe immer mindestens eine Spalte. Jedenfalls da, wo das Beispiel her kommt.
Wenn ich von TVirtualStringTree ableite, eine Spalte habe (sorry) und den Rest so mache wie im Beispiel funzt es hier (mit der neusten Version). |
Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
Falls es jemanden interessiert...
habs so gelöst: ursprünglich wollte ich ja per
Delphi-Quellcode:
an den Index der jeweiligen Spalte kommen, was nur geht wenn der Text des Nodes fokussiert ist.
Column:=VST.FocusedColumn;
Jetzt komme ich so an den Index:
Delphi-Quellcode:
Danke für die Hilfe!
procedure TForm1.VSTClick(Sender: TObject);
var HitInfo :THitInfo; Pt: TPoint; begin Pt := VST.ScreenToClient(Mouse.CursorPos); VST.GetHitTestInfoAt(Pt.X, Pt.Y, true, HitInfo); Column := HitInfo.HitColumn; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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-2025 by Thomas Breitkreuz