Thema: Delphi Treeview CustumDrawItem

Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Treeview CustumDrawItem

  Alt 10. Okt 2007, 21:00
Ich poste mal das Beispiel aus der Delphi 7 Hilfe:
Zitat:
Das folgende Beispiel zeigt, wie die Ereignisbehandlungsroutine OnCustomDrawItem Einträge und Linien des Baumdiagramms zeichnet, nachdem die Ereignisbehandlungsroutine OnCustomDraw den Hintergrund ausgefüllt hat.
Delphi-Quellcode:
procedure TCustomDrawForm.TVCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  NodeRect: TRect;
begin
  with TV.Canvas do
  begin
    // Wenn DefaultDraw True ist, können die Schrifteigenschaften des Knotens
    // geändert werden. Bei DefaultDraw = True zeichnet Windows die
    // Schaltflächen und ignoriert unsere Schrifthintergrundfarben.
    // Stattdessen wird die Eigenschaft Color von TreeView verwendet.

    if cdsSelected in State then
    begin
      Font.Assign(SelectedFontDialog.Font);
      Brush.Color := SelBkgColorDialog.Color;
    end;
    DefaultDraw := FDefaultDrawItem;
    // Bei DefaultDraw = False müssen Sie alle Einträge selbst zeichen,
    // einschließlich Schaltflächen, Linien, Grafiken und Text.

    if not DefaultDraw then

    begin
      // Auswahlrechteck zeichnen
      if cdsSelected in State then
      begin
        NodeRect := Node.DisplayRect(True);
        FillRect(NodeRect);
      end;

      NodeRect := Node.DisplayRect(False);

      if None1.Checked then

      // Kein Bitmap, daher in der Hintergrundfarbe zeichnen
      begin
        Brush.Color := BkgColorDialog.Color;
        Brush.Style := FBrushStyle;
        FillRect(NodeRect)
      end
      else
        // Nicht über das Hintergrund-Bitmap zeichnen

        Brush.Style := bsClear;

      NodeRect.Left := NodeRect.Left + (Node.Level * TV.Indent);

      // NodeRect.Left entspricht jetzt dem linken Teil der erweiterten Schaltfläche

      DrawButton(NodeRect, Node);

      NodeRect.Left := NodeRect.Left + TV.Indent + FButtonSize;

      // NodeRect.Left ist jetzt der linke Teil der Grafik

      DrawImage(NodeRect, Node.ImageIndex);

      NodeRect.Left := NodeRect.Left + ImageList.Width;

      // Nun kann der Text endlich ausgegeben werden

      TextOut(NodeRect.Left, NodeRect.Top, Node.Text);

    end;
  end;
end;
Man beachte das Node.DisplayRect
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat