Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
Delphi 2009 Professional
|
AW: TreeView CustomDrawItem - Windows 7 Themes
15. Apr 2012, 10:36
Habe es hinbekommen. Mit ein bischen Tricksen aber es geht. Wenn es interessiert hier eine kleine Doku.
Natürlich kann man dies nach belieben erweitern:
Delphi-Quellcode:
//Beim Items hinzufügen, die ihr selber Zeichnen wollt:
//Anstelle von 'Test' könnt ihr auch Variablen einfügen
var Text : PChar;
GetMem(Text,(Length('Test')+1)*SizeOf(Length));
StrPCopy(Text,'Test');
TreeView1.Items.Add(nil,'').Data := Text;
//Beim OnAdvancedCustomDrawItem
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
var NodeRect,TextRect : TRect;
TextP : PChar;
NewText : String;
UndPos : Integer;
begin
if (Stage = cdPrePaint) then
begin
If Node.Data <> nil then //Falls ihr noch normale Einträge habt, müsst ihr die If-Anweisung schreiben
TextP := Node.Data;
PaintImages := False; //Falls ihr eine ImageList eingefügt habt, und keine Bilder zeichen lassen wollt
end;
if (Stage = cdPostPaint) then
begin
If Node.Data <> nil then //Falls ihr noch normale Einträge habt, müsst ihr die If-Anweisung schreiben
TextP := Node.Data;
TextRect := Node.DisplayRect(True); //Um den linken Seitenabstand vom "normalen" Textanfang zubekommen
NodeRect := Node.DisplayRect(False); //Gesammten Zeilen-Rect abfragen
NodeRect.Left := TextRect.Left - 16; //NodeRect Left aktualisieren
//NodeRect.Left := TextRect.Left; //Falls ihr die Bilder zeichnen lasst, müsst ihr diese Zeile steht die oben drüber nehmen
SetBkMode(TreeView1.Canvas.Handle,TRANSPARENT);
//Kleine Hilfsfunktion, da sonst das & Zeichen nicht angezeigt wird
UndPos := Pos('&',TextP);
if UndPos > 0 then
NewText := StringReplace(TextP,'&','&&',[rfReplaceAll])
else
NewText := TextP;
DrawText(TreeView1.Canvas.Handle,PChar(NewText),Length(NewText),
NodeRect,TextFlags); //Für TextFlags halt die entsprechenden Flags einsetzten
//Weitere Zeichenoperationen
end;
end;
end;
Ich muss zugeben, es nicht wirklich schön, aber es funktioniert.
Nickel "Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
|
|
Zitat
|