Einzelnen Beitrag anzeigen

Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

TreeView.CustomDrawItem verschiedene höhen

  Alt 9. Jan 2011, 16:56
Hallo

Bisher bin ich hier und auch durch Google nicht fündig geworden was dies angeht.
Ich nutze eine TreeView als Kontaktliste. Diese beinhaltet 2 Level. Einmal zur Darstellung
der Gruppen und dann in den Gruppen die Kontakte.

das ich die Zeilenhöhe anpassen kann mit
TTreeView.Perform(TVM_SETITEMHEIGHT, 32, 0); weiß ich wohl und nutze es auch bisher aber wie bekomme ich es hin das ich den Nodes
beim Zeichnen verschiedene Höhen geben kann?

Meine Zeichenmethode schaut bisher so aus
Delphi-Quellcode:
procedure TContactListTree.CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
  var
    NodeRect: TRect;
    PictureRect: TRect;
    Group: TGroup;
    Contact: TContact;
begin
  DefaultDraw := False;

  NodeRect := Node.DisplayRect(False);
  PictureRect := Node.DisplayRect(False);
  if cdsSelected in State then begin
    FList.Canvas.Pen.Color := ITEM_SELECTED_COLOR;
    FList.Canvas.Brush.Color := ITEM_SELECTED_COLOR;
    FList.Canvas.Brush.Style := bsSolid;
    //FList.Canvas.RoundRect(NodeRect.Left, NodeRect.Top, NodeRect.Right, NodeRect.Bottom, 8, 8);
  end
  else if (cdsHot in state) and (not (cdsFocused in state)) then begin
    FList.Canvas.Pen.Color := ITEM_HOVER_COLOR;
    FList.Canvas.Brush.Color := ITEM_HOVER_COLOR;
    FList.Canvas.Brush.Style := bsSolid;
    //FList.Canvas.RoundRect(NodeRect.Left, NodeRect.Top, NodeRect.Right, NodeRect.Bottom, 8, 8);
  end
  else
    FList.Canvas.FillRect(NodeRect);

  FList.Canvas.FillRect(NodeRect);

  // Node Level 0 = Gruppen Node
  // Node Level 1 = Kontakt Node
  if Node.Level = 0 then begin
    Group := Node.Data;

    FList.Canvas.Font.Color := clBlack;
    FList.Canvas.Font.Name := 'Arial';
    FList.Canvas.Font.Size := 12;
    FList.Canvas.Font.Style := [fsBold];
    NodeRect.Left := NodeRect.Left + 2;
    NodeRect.Top := NodeRect.Top + 6;
    FList.Canvas.TextOut(NodeRect.Left, NodeRect.Top, Format('%s %d/%d', [Group.Name, Group.Count, Group.Count]));
  end
  else if Node.Level = 1 then begin
    Contact := Node.Data;

    FList.Canvas.Font.Color := clBlack;
    FList.Canvas.Font.Name := 'Arial';
    FList.Canvas.Font.Size := 12;
    FList.Canvas.Font.Style := [fsBold];
    NodeRect.Left := NodeRect.Left + 20;
    NodeRect.Top := NodeRect.Top + 2;
    FList.Canvas.TextOut(NodeRect.Left, NodeRect.Top, Contact.Name);

    FList.Canvas.Refresh;
    FList.Canvas.Font.Color := $002492FF;
    FList.Canvas.Font.Name := 'Arial';
    FList.Canvas.Font.Size := 8;
    FList.Canvas.Font.Style := [];
    NodeRect.Top := NodeRect.Top + 16;
    //FList.Canvas.TextOut(NodeRect.Left, NodeRect.Top, Contact.OnlineStateMsg);
    DrawText(FList.Canvas.Handle, PChar(Contact.OnlineStateMsg), length(Contact.OnlineStateMsg), NodeRect, 0);
  end;
end;
Bisher schaut es nicht gerade toll aus wenn die Gruppe nur einen Namen enthällt aber 5 mal so groß
ist wie sie eigentlich sein müsste.

Schonmal danke für die Antworten, wenn jemand eine weiß.

Gruß

Cyberaxx
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!

Geändert von Cyberaxx ( 9. Jan 2011 um 16:58 Uhr) Grund: Zeichenmethode eingefügt
  Mit Zitat antworten Zitat