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 ShellTreeView und Overlay-Bild (https://www.delphipraxis.net/155078-shelltreeview-und-overlay-bild.html)

e-gon 7. Okt 2010 13:21

ShellTreeView und Overlay-Bild
 
Hallo,

um in meine umfangreiche Mediensammlung endlich etwas Ordnung zu bringen, habe ich ein Programm geschrieben, welches Ordnerinhalte mit manuell hinzugefügten Kommentaren in eine Datenbank schreibt. Da es aber nicht unbedingt sinnvoll ist beim Erstellen der Datensätze chronologisch vorzugehen, habe ich inzwischen etwas den Überblick verloren, welche Ordner in wie weit bereits abgearbeitet wurden. Da kam mir die Idee die Ordner in meinem Programm entsprechend zu markieren.
Den Verzeichnisbaum lasse ich mir durch ein ShellTreeView anzeigen. Die bereits verarbeiteten Ordner sollen nun je nach Verarbeitungsstatus einen roten, gelben oder grünen Punkt erhalten. Sinnvoll wäre dafür ja ein Overlay. Leider kann ich aber keine eigene ImageList hinzufügen, da sonst die Systemicons in ShellTreeView nicht mehr angezeigt werden.
Gibt es eine Möglichkeit auf das Image eines TreeNode direkt zuzugreifen? Vielleicht ein
Delphi-Quellcode:
ShellTreeView.Items[x].Image.Canvas.Ellipse(...)
oder so?

Gruß
e-gon

e-gon 8. Okt 2010 12:08

AW: ShellTreeView und Overlay-Bild
 
Hat keiner eine Idee?

Oder gibt es eine andere Möglichkeit in ShellTreeView Knoten zu kennzeichnen?

e-gon 12. Okt 2010 10:32

AW: ShellTreeView und Overlay-Bild
 
*Push*

Bummi 12. Okt 2010 11:15

AW: ShellTreeView und Overlay-Bild
 
mit ShellTreeviwe kann ich Dir nicht helfen, falls Du cxShellTreeView hast:

reiner prof of concept

Delphi-Quellcode:
procedure TForm1.TreeViewCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;
    State: TCustomDrawState; var DefaultDraw: Boolean);
    var r:TRect;
    var
      x:Integer;
begin
  r :=Node.DisplayRect(false);

  x := (Node.Level + 1) * 20;
  r.left := x;
  r.Right := r.Left + 16;
  r.Bottom := r.top + 16;
  sender.Canvas.StretchDraw(r, image1.Picture.Graphic);
  sender.Canvas.TextOut(r.Right,r.Top,node.Text);
  DefaultDraw := false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 cxShellTreeView1.InnerTreeView.OnCustomDrawItem := TreeViewCustomDrawItem
end;

e-gon 22. Okt 2010 08:54

AW: ShellTreeView und Overlay-Bild
 
Danke für die Antwort! Aber nein, ich benutze nicht cxShellTreeView und TShellTreeView hat leider kein DrawItem-Ereignis.

Nach langem Suchen und vielen Versuchen habe ich mich nun zähneknirschend mit den System-Overlays zur Markierung abgefunden.
Delphi-Quellcode:
OverlayIndex:= 0; // Hand zur Markierung von Freigaben
OverlayIndex:= 1; // Verknüpfungssymbol
OverlayIndex:= 3; // Zeitsymbol
Falls aber noch jemandem etwas besseres einfällt, ich bin für jeden Hinweis dankbar!

Gruß
e-gon


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