AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi VirtualTreeView - Bearbeitung von TVirtualNode führt zum Abschneiden von NodeText
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualTreeView - Bearbeitung von TVirtualNode führt zum Abschneiden von NodeText

Ein Thema von Aviator · begonnen am 29. Mai 2014 · letzter Beitrag vom 1. Jun 2014
 
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: VirtualTreeView - Bearbeitung von TVirtualNode führt zum Abschneiden von NodeText

  Alt 29. Mai 2014, 18:59
Kann sein, dass ich nicht ganz hinter dein Problem steige, aber warum veränderst du denn überhaupt den Core-Typ TVirtualNode um zusätzliche Informationen zu speichern?

Der VirtualTreeView zeichnet sich doch gerade dadurch aus, dass du durch seine virtuelle Daten- und Knotenstruktur alles mögliche an Informationen zu einem Knoten speichern kannst.

In deinem Fall würde es genügen, einen Datentyp für die Knotendaten zu haben und dann das Bild selber zu zeichnen, wenn es über eine ImageList nicht so einfach geht. Zum Beispiel:
Delphi-Quellcode:
type
  TNodeData = record
    Image: TBitmap;
    Centered: Boolean;
  end;
  PNodeData = ^TNodeData;
  
// ...
VirtualStringTree1.NodeDataSize(SizeOf(TNodeData));

// ...
var
  Node: PVirtualNode;
  Data: PNodeData;
begin
  Node := VirtualStringTree1.AddChild(nil);
  Data := VirtualStringTree1.GetNodeData(Node);
  Data^.Image := TBitmap.Create; // In OnFreeNode wieder freigeben
  with Data^.Image do
    begin
      PixelFormat := pf24Bit;
      Width := 32;
      Height := 32;
      with Canvas do
        begin
          Brush.Color := clSkyBlue;
          Brush.Style := bsSolid;
          FillRect(ClipRect);
        end;
    end;
  Data^.Centered := TRUE; // FALSE ...
end;

procedure TForm1.VirtualStringTree1AfterCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  Column: TColumnIndex; CellRect: TRect);
var
  X, Y: Integer;
  Data: PNodeData;
begin
  // Bild zB nur in die 2. Spalte zeichnen
  if Column <> 1 then
    Exit;

  Data := Sender.GetNodeData(Node);

  if Data^.Centered then
    begin
      X := ((CellRect.Left + CellRect.Right) div 2) - (Data^.Image.Width div 2);
      Y := ((CellRect.Top + CellRect.Bottom) div 2) - (Data^.Image.Height div 2);
    end
  else
    begin
      X := CellRect.Left; // + Margin ...
      Y := CellRect.Top; // + Margin ...
    end;

  TargetCanvas.Draw(X, Y, Data^.Image);
end;

Geändert von nuclearping (29. Mai 2014 um 19:05 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz