OK! ich habe es geschaft (Nach dem Red Bull
) so ich hatte recht mit der idee die icon direkt in den NodeRecord zu schreiben!
so jetzt ist der limit nur der arbeitsschpeicher.
so this is my solution! Have fun with it.
Delphi-Quellcode:
type
PRNodeData = ^TRNodeData;
TRNodeData = record
ID : Int64; // pointer
Title : Widestring;
Value : Widestring;
Hiden : Boolean;
Image : TBitmap; // icon
end;
procedure TMain_form.RecordTreeBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
Data : PNodeData;
R : TRect;
begin
if Assigned(Node)then
begin
Data:= FolderTree.GetNodeData(Node);
if Data^.Colored then
begin
case Column of
0 :
begin
TargetCanvas.Brush.Color := $00FFFAF4;
TargetCanvas.FillRect(CellRect);
// Draw Icon Test
R.Left:= ContentRect.Left-16;
R.Top:= ContentRect.Top -1;
R.Right:= ContentRect.Bottom + R.Left;
R.Bottom:= ContentRect.Bottom -1;
//TargetCanvas.Brush.Color:= clred;
TargetCanvas.FillRect(R);
TargetCanvas.Draw(R.Left, 0, Data^.Image); // Icon
end;
1 :
begin
(* Draw Gradient *)
GradientFillHorizontal(TargetCanvas, CellRect, $00FFFAF4, clWhite, 100)
end;
2 :
begin
// comment todo
end;
end;
end;
end;
end;
ganz vergessen zu sagen, ich benutze eine leere TImageList um den text nach rechts zu bewegen
in meinem test lade ich die icons direkt von der festplatte
später wird das direkt von der
DB/Stream geladen!
Delphi-Quellcode:
Data:= RecordTree.GetNodeData(Parent);
...
Data^.Image:= TBitmap.Create;
Data^.Image.LoadFromFile('c:\...\...\folder_open.bmp');
Data^.Image.Transparent := True;
Data^.Image.TransparentMode := tmAuto;
nochmal danke an alle.