Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

TreeView CustomDrawItem - Windows 7 Themes

  Alt 6. Apr 2012, 09:30
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
Miniaturansicht angehängter Grafiken
ownerdraw.jpg  
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat