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 MouseMove die Column ermitteln (https://www.delphipraxis.net/195831-virtualstringtree-mousemove-die-column-ermitteln.html)

Hobbycoder 29. Mär 2018 14:59

VirtualStringTree MouseMove die Column ermitteln
 
Hi,

ich möchte gerne im OnMouseMove im VST die Column ermitteln, um dann einen anderen Cursor anzuzeigen.
Hat jemand eine Idee, wie ich an die gewünschte Information in dem Event komme?

Aviator 29. Mär 2018 15:16

AW: VirtualStringTree MouseMove die Column ermitteln
 
Hallo Hobbycoder,

ich würde dafür das OnGetCursor Event verwenden. Das ist genau für so etwas gemacht. Anbei mal ein Beispiel wie ich das gemacht habe. Das solltest du ja auf dich umbauen können.

Delphi-Quellcode:
procedure TfrmMain.vstGetCursor(Sender: TBaseVirtualTree; var Cursor: TCursor);
var
  vst: TVirtualStringTree;
  NodeData: PAppointment;
  MousePos: TPoint;
begin
  vst := Sender as TVirtualStringTree;
  if (Assigned(vst.HotNode)) then begin
    NodeData := vst.GetNodeData(vst.HotNode);
    MousePos := Mouse.CursorPos;
    if (vst.Header.Columns.ColumnFromPosition(vst.ScreenToClient(MousePos)) = 4) and
      (NodeData^.LinkAvailable)
    then begin
      Cursor := crHandPoint
    end else
      Cursor := crDefault;
  end;
end;

Gollum 29. Mär 2018 15:16

AW: VirtualStringTree MouseMove die Column ermitteln
 
Hallo,

wie wäre es mit GetHitTestInfoAt?

Aviator 29. Mär 2018 15:18

AW: VirtualStringTree MouseMove die Column ermitteln
 
Zitat:

Zitat von Gollum (Beitrag 1397591)
Hallo,

wie wäre es mit GetHitTestInfoAt?

Das kann man als Hilfe natürlich auch benutzen. :)

Hobbycoder 29. Mär 2018 17:38

AW: VirtualStringTree MouseMove die Column ermitteln
 
Danke.

OnGetCursor hatte ich schon im Visier, allerdings wunderte ich mich über die dort fehlenden Parameter HitInfo, wie bei OnGetPopupMenu.

Und GetHitTestInfoAT war mir bis dato unbekannt.

Danke für die Hilfe.

So hab ich es jetzt gemacht:
Delphi-Quellcode:
procedure TForm1.vrtlstrngtrWunschlisteGetCursor(Sender: TBaseVirtualTree;
  var Cursor: TCursor);
var
  HitInfo: THitInfo;
begin
  if VST.Cursor<>crHourGlass then
  begin
    VST.GetHitTestInfoAt(
      VST.ScreenToClient(Mouse.CursorPos).X,
      VST.ScreenToClient(Mouse.CursorPos).Y,
      True,
      HitInfo
    );
    if HitInfo.HitColumn=1 then
      VST.Cursor:=crHandPoint else
      VST.Cursor:=crDefault;
  end;
end;


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