Delphi-PRAXiS
Seite 2 von 2     12   

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 Virtual Tree View und Mauscursor (https://www.delphipraxis.net/148311-virtual-tree-view-und-mauscursor.html)

Codewalker 27. Feb 2010 18:42

Re: Virtual Tree View und Mauscursor
 
Das sieht sehr gut aus, ich komme aber erst morgen wieder zum testen. Wobei dann noch die Frage offen bleibt, in welchem Ereignis man auf den Klick reagiert. Ich will ja den Link nur dann öffnen, wenn auf den Text in der Linkspalte geklickt wurde.

Hawkeye219 27. Feb 2010 19:37

Re: Virtual Tree View und Mauscursor
 
Thomas, ich habe den Code aus meinem vorigen Beitrag ein wenig umgebaut und erweitert:

Delphi-Quellcode:
const
  LINKCOLUMN = 2;

procedure TDemoForm.TreeDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
  Node: PVirtualNode; Column: TColumnIndex; const Text: WideString; const CellRect: TRect;
  var DefaultDraw: Boolean);
begin
  if IsHotNode(Node) then
    if (Column = LINKCOLUMN) and IsCursorInLinkColumn() then
      TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsUnderline]
    else
      TargetCanvas.Font.Style := TargetCanvas.Font.Style - [fsUnderline];
end;

procedure TDemoForm.TreeMouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if IsHotNode(Tree.GetNodeAt(X, Y)) and IsCursorInLinkColumn() then
    Tree.Cursor := crHandPoint
  else
    Tree.Cursor := crDefault;
end;

procedure TDemoForm.TreeClick (Sender: TObject);
begin
  if IsHotNode(Tree.FocusedNode) and IsCursorInLinkColumn() then
    ShowMessage (Tree.Text[Tree.FocusedNode, LINKCOLUMN]);
end;

function TDemoForm.IsHotNode (aNode: PVirtualNode): Boolean;
begin
  Result := (toHotTrack in Tree.TreeOptions.PaintOptions)
        and Assigned(aNode) and (aNode = Tree.HotNode);
end;

function TDemoForm.IsCursorInLinkColumn: Boolean;
begin
  Result := (ColumnAtCursorPos() = LINKCOLUMN);
end;

function TDemoForm.ColumnAtCursorPos: TColumnIndex;
var
  P: TPoint;
begin
  P := Tree.ScreenToClient(Mouse.CursorPos);
  Result := Tree.Header.Columns.ColumnFromPosition(P);
end;
Gruß Hawkeye

Codewalker 28. Feb 2010 20:46

Re: Virtual Tree View und Mauscursor
 
Nabend zusammen.

Ich habe den Code von Hawkeye eben implementiert und er funktioniert exakt so wie er sollte. Vielen Dank für Zeit und Mühe :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr.
Seite 2 von 2     12   

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