Hallo zusammen,
Ich versuche gerade mit CustomDrawItem den ItemText zu zentrieren. Den Text zeichnen ist ja nicht das Problem. Wenn ich DefaultDraw auf False setzte, ist das "autozeichnen" des Rahmens eines selektierten Items weg. Nun hab ich versucht mit ThemesService,
Details := ThemeServices.GetElementDetails(ttItemSelected);
den Rahmen wieder zuzeichnen, aber da bekomm ich einen ganz anderen Rahmen. Mit
TreeView1.Canvas.FillRect(NodeRect);
fülle ich es ja nur mit der Farbe. Dass kann ja nicht stimmen, da es eine Art Farbverlauf bzw. Areo-Style ist (vermute ich zumindest mal
).
Der Aktuelle Code ist:
Delphi-Quellcode:
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
var DesignText : String;
PosBegin,PosEnd : Integer;
CSpacer : Boolean;
NodeRect : TRect;
TextS : String;
Details : TThemedElementDetails;
begin
if Stage = cdPrePaint then
begin
PosBegin := Pos('[',Node.Text);
if PosBegin > 0 then
begin
PosEnd := PosEx(']',Node.Text,PosBegin);
DesignText := LowerCase(Copy(Node.Text,PosBegin+1,PosEnd-PosBegin-1));
CSpacer := Pos('cspacer',DesignText) > 0;
if cspacer then
begin
DefaultDraw := False;
TextS := Copy(Node.Text,PosEnd+1,Length(Node.Text));
NodeRect := Node.DisplayRect(False);
TreeView1.Canvas.FillRect(NodeRect); //Dafür müsste ich was anderes nehmen, nur was?
DrawText(TreeView1.Canvas.Handle,
PChar(TextS),Length(TextS),NodeRect,DT_CENTER or DT_VCENTER);
end;
end
else DefaultDraw := True;
end
else
DefaultDraw := True;
end;
Wie zeichne ich diesen Rahmen? Im Anhang ein Bild mit normal Item und CostomDrawItem von mir, zum Verständnis was ich machen möchte.
Habe auch DrawEdge versucht auch kein Erfolg.
Gruß
NickelM