Einzelnen Beitrag anzeigen

Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

VST Repaint Prob mit externen Controls bei Columnsortierung

  Alt 25. Sep 2008, 15:09
Hallo allerseits!

Ich habe folgendes Problem mit dem VST. Im OnAfterdrawCell Event des VST weise ich ein TPRogressbar Control dem VST zu.
Das Problem ist, das wenn ich durch Klick auf den Column, nach dem Position property des Progressbars sortieren will, dann Sortiert der VST zwar korrekt, (sehe ich an den anderen Column Werten) Repaintet das ProgressbarControl jedoch nicht richtig.
Erst wenn ich etwas Runterscrolle und wieder zurück, wird das ProgressbarControl aktualisiert. Gibt es in dieser Hinsicht
bekannte Probleme mit dem VST. Ich habe auch nirgens eine Demosource gefunden, die das Integrieren von Customcontrols in
den VST vernünftig dokumentiert. Momentan verwende Ich diesen Code aus dem Forum, habe jedoch keine Ahnung ob das wirklich
der beste Weg ist.

Delphi-Quellcode:
type
  TNodeData = record
    Bar : TProgressBar;
    Caption : String;
    //das mit dem Record hab ich mir so angewöhnt :)
  end;
  PNodeData = ^TNodeData;

procedure Tform_Main.btn_AddItemClick(Sender: TObject);
var
  Node : PVirtualNode;
  NData : PNodeData;
begin
  Tv.BeginUpdate;

  Node:=Tv.AddChild(tv.RootNode);

  NData:=Tv.GetNodeData(Node);
  
  NData.Caption:=TimeToStr(Now);
  NData.Bar:=TProgressBar.Create(TV);
  NData.Bar.Parent:=Tv;
  Ndata.Bar.Position:=Random(Ndata.Bar.Max);

  Tv.EndUpdate;
end;

procedure Tform_Main.TVAfterCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellRect: TRect);
var
  NData : PNodeData;
begin
  if Column=1 then
  begin
    NData:=Tv.GetNodeData(Node);

    if Assigned(NData) then
    begin
      CellRect:=Tv.GetDisplayRect(Node,Column,false);
      NData.Bar.Left:=CellRect.Left;
      Ndata.Bar.Top:=CellRect.Top;
      NData.Bar.Width:=CellRect.Right-CellRect.Left;
      NData.Bar.Height:=CellRect.Bottom-CellRect.Top;
      //Ndata.Bar.PaintTo(TargetCanvas,CellRect.Left,CellRect.Top);
    end;
  end;
end;

procedure Tform_Main.TVGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
  NData : PNodeData;
begin
  NData:=Tv.GetNodeData(Node);
  CellText:=NData.Caption;
end;
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat