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 (VST): bei Bildklick Text fokussieren (https://www.delphipraxis.net/135343-virtualstringtree-vst-bei-bildklick-text-fokussieren.html)

larsk81 9. Jun 2009 11:59


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:
Node:=VST.FocusedNode;
Column:=VST.FocusedColumn;
nutzen kann, um herauszufinden wo genau der User geklickt hat.

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:

wicht 9. Jun 2009 12:16

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.

chaosben 9. Jun 2009 12:16

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.

wicht 9. Jun 2009 12:23

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

larsk81 9. Jun 2009 12:46

Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
 
Zitat:

Zitat von wicht
dass larks81 (so wie ich) die StateImages benutzt und du die richtigen Images.

Ich nutze nicht die StateImages - nutze die "richtigen" Images.

chaosben 9. Jun 2009 20:03

Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
 
Ich setze die Images-Eigenschaft und bediene das OnGetImageIndex-Event.

wicht 9. Jun 2009 20:55

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;

larsk81 9. Jun 2009 21:24

Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
 
Zitat:

Zitat von wicht
Delphi-Quellcode:
TreeOptions.SelectionOptions := [toMultiSelect, toRightClickSelect];

also wenn ich das nachmache

Delphi-Quellcode:
vst.TreeOptions.SelectionOptions := [toMultiSelect, toRightClickSelect];
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).

Habt Ihr überhaupt mehr als eine Spalte? Oder geht es bei euch auch bei Klick auf ein Image z.B. in Column 1?

wicht 9. Jun 2009 22:30

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

larsk81 8. Jul 2009 14:19

Re: VirtualStringTree (VST): bei Bildklick Text fokussieren
 
Falls es jemanden interessiert...

habs so gelöst:

ursprünglich wollte ich ja per

Delphi-Quellcode:
Column:=VST.FocusedColumn;
an den Index der jeweiligen Spalte kommen, was nur geht wenn der Text des Nodes fokussiert ist.
Jetzt komme ich so an den Index:

Delphi-Quellcode:
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;
Danke für die Hilfe!


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