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 TreeView im Vista Style (https://www.delphipraxis.net/137103-treeview-im-vista-style.html)

TonyMontana 14. Jul 2009 14:47


TreeView im Vista Style
 
Hallo,

ich verwende eine TTreeView-Komponente und habe mich gefragt, ob es eine einfache Möglichkeit gibt, wie ich diese im Vista design / style anzeigen lassen kann? Also statt Plus und Minus Symbolen eben die kleinen Pfeile und so weiter.

Delphi-Quellcode:
uses UxTheme.pas ... SetWindowTheme(TreeView1.Handle, 'explorer', nil);
Funktioniert leider nicht wie gewünscht, keine Änderung sichtbar ?!?

Den Tipp habe ich hier gefunden:
http://www.installationexcellence.co...phi/Index.html

Cylence 22. Jul 2009 09:11

Re: TreeView im Vista Style
 
Hi,

das geht nur wenn du auch ein XPManifest im Projekt hast.
Ansonsten bau dir selber ein Vistastyle Treeview. Mit ein paar Dreiecksbildern, wie in vista und dann on AdvancedCustomDrawItem über die alten Plus NodeButtons zeichnen.

So hab ichs gemacht:

Delphi-Quellcode:
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
   Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
   var PaintImages, DefaultDraw: Boolean);
var
  NodeRect : TRect;
begin
 DefaultDraw := True;
 if Stage = cdPostPaint then begin
  if Node.IsVisible then begin
   NodeRect := Node.DisplayRect(True);
   if Node.HasChildren then begin
     if Node.Expanded then begin
        if (cdsHot in state) and (not (cdsFocused in state)) then (Sender as TTreeview).Canvas.Draw(NodeRect.Left+Treeview1.Indent - 53, node.DisplayRect(False).TopLeft.Y+1, Image2.Picture.Bitmap)
         else if (cdsFocused in state) then (Sender as TTreeview).Canvas.Draw(NodeRect.Left+Treeview1.Indent - 54, node.DisplayRect(False).Top+2, Image5.Picture.Bitmap)
          else (Sender as TTreeview).Canvas.Draw(NodeRect.Left+Treeview1.Indent - 54, node.DisplayRect(False).Top+2, Image3.Picture.Bitmap);
     end
     else begin
       if (cdsHot in state) and (not (cdsFocused in state)) then (Sender as TTreeview).Canvas.Draw(NodeRect.Left +Treeview1.Indent - 54, node.DisplayRect(False).Top+1, Image4.Picture.Bitmap)
       else if (cdsFocused in state) then (Sender as TTreeview).Canvas.Draw(NodeRect.Left +Treeview1.Indent - 53, node.DisplayRect(False).Top+1, Image6.Picture.Bitmap)
         else (Sender as TTreeview).Canvas.Draw(NodeRect.Left +Treeview1.Indent - 53, node.DisplayRect(False).Top+1, Image1.Picture.Bitmap);

     end;
   end
  end;
 end;
end;


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