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;