Delphi-PRAXiS
Seite 1 von 2  1 2      

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 12:44


Virtual Tree View und Mauscursor
 
Hallo zusammen.

Ich nutze in meiner Anwendung den Virtual String Tree - das klappt soweit auch sehr gut. In einer Spalte zeige ich einen Hyperlink an, den ich über OnGetText schön blau und unterstrichend darstelle. Wie kriege ich es denn jetzt hin, dass der Text einen eigenen Cursor (die bekannte Hand) bekommt und bei Klick auf den Text die Webseite öffnet (ich suche nur das Ereignis, das Öffnen kriege ich schon hin).

Grüße

DeddyH 27. Feb 2010 12:49

Re: Virtual Tree View und Mauscursor
 
Wäre das nicht mit einem HotTrack einfacher zu machen?

Codewalker 27. Feb 2010 12:51

Re: Virtual Tree View und Mauscursor
 
HotTrack kenne ich nur vom Namen. Wie genau meinst du das?

DeddyH 27. Feb 2010 12:55

Re: Virtual Tree View und Mauscursor
 
In VST.TreeOptions.PaintOptions kannst Du toHotTrack hinzufügen, mit VST.Colors.HotColor die Farbe des HotTracks festlegen und mit HotCursor den Cursor. Das geht natürlich auch per Code.
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  VST.TreeOptions.PaintOptions := VST.TreeOptions.PaintOptions + [toHotTrack];
  VST.Colors.HotColor := clNavy;
  VST.HotCursor := crHandPoint;
end;
Entspricht das in etwa dem, was Du erreichen wolltest?

Codewalker 27. Feb 2010 12:58

Re: Virtual Tree View und Mauscursor
 
Das ist fast die Lösung. Das Problem ist: Ich möchte HotTrack nur für eine Spalte (eben die mit dem Hyperlink). Alle anderen Spalten sollen normal bleiben.

DeddyH 27. Feb 2010 13:08

Re: Virtual Tree View und Mauscursor
 
Versuch einmal, im OnHotChange-Event das Level des aktuellen Nodes zu ermitteln und dementsprechend HotTrack zu setzen oder eben nicht. Ich bin kein VST-Experte, aber das sollte IMO funktionieren.

Codewalker 27. Feb 2010 13:13

Re: Virtual Tree View und Mauscursor
 
Danke DeddyH, aber das brachte leider auch nichts. OnHotChange wird bei einem Zeilenwechel ausgelöst, aber jede Zeile ist ja eine Node -> Alle haben Level 0. Ich habe schon überlegt es ins OnMouseMove zu bauen, aber wirklich performant kommt mir das nicht vor, bei jeder Mausbewegung zu ermitteln wo ich denn genau bin.

DeddyH 27. Feb 2010 13:30

Re: Virtual Tree View und Mauscursor
 
Da weiß ich im Moment auch nicht weiter, man müsste die zur Node gehörige Column ermitteln. Leider habe ich mich gerade auch in den Weiten meiner Doku-PDF verlaufen und finde aktuell nichts Passendes.

[edit] Da ich nun meine eigene Unknenntnis bzgl. des VST offenbaren musste, will ich wenigstens noch auf den Video vom 2. virtuellen Stammtisch verweisen, falls Du das noch nicht kennst: Video [/edit]

Rakshasa 27. Feb 2010 14:03

Re: Virtual Tree View und Mauscursor
 
Die aktuelle Spalte kann man ja folgendermaßen auslesen:

vst_treeview.Header.Columns.ColumnFromPosition();

Hawkeye219 27. Feb 2010 15:34

Re: Virtual Tree View und Mauscursor
 
Hallo,

ich habe hier mal unverschämterweise den Tipp von Rakshasa in meinen Code eingebaut:

Delphi-Quellcode:
procedure TDemoForm.TreeDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
  Node: PVirtualNode; Column: TColumnIndex; const Text: WideString; const CellRect: TRect;
  var DefaultDraw: Boolean);
const
  LINKCOLUMN = 2;
var
  P: TPoint;
  HotColumn: TColumnIndex;
begin
  if ((Node = Tree.HotNode) and (toHotTrack in Tree.TreeOptions.PaintOptions)) then
    begin
      P := Tree.ScreenToClient(Mouse.CursorPos);
      HotColumn := Tree.Header.Columns.ColumnFromPosition(P);
      if ((Column = LINKCOLUMN) and (HotColumn = LINKCOLUMN)) then
        TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsUnderline]
      else
        TargetCanvas.Font.Style := TargetCanvas.Font.Style - [fsUnderline];
    end;
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 Uhr.
Seite 1 von 2  1 2      

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