Einzelnen Beitrag anzeigen

Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#7

AW: VirtualTreeView und icons

  Alt 10. Aug 2014, 02:19
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.

Geändert von Wishmaster (10. Aug 2014 um 02:37 Uhr)
  Mit Zitat antworten Zitat