![]() |
VST Repaint Prob mit externen Controls bei Columnsortierung
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; |
Re: VST Repaint Prob mit externen Controls bei Columnsortier
*push*
|
Re: VST Repaint Prob mit externen Controls bei Columnsortier
Hallo Richard
Hast du schon probiert, die Progressbar oder den VST nach dem Sortieren zu aktualisieren (.Repaint, .Refresh, etc) ? |
Re: VST Repaint Prob mit externen Controls bei Columnsortier
@toms
Ich hab schon alles probiert. Update, Repaint, Refresh und Invalidate. Geholfen hat nichts davon. Es fehlt nach meiner Ansicht dort auch ein entsprechender Event. OnAfterSortEnd oder so. Damit könnte man sich selber um das Zeichnen der Controls kümmern. Das komische ist ja wie gesagt, das der VST die Nodes richtig sortiert und nur die Progressbar Controls nicht aktualisiert werden. Erst wenn ich den VST scrolle wird die Darstellung aktualisiert, jedoch auch nur in dem Bereich der gescrollt wurde. Der Rest zeigt nach wie vor falsche Werte. |
Re: VST Repaint Prob mit externen Controls bei Columnsortier
Könntest du ein kleines Demo-Projekt anhängen?
|
Re: VST Repaint Prob mit externen Controls bei Columnsortier
Werde ich machen, weis jedoch nicht, ob ichs noch am Wochenende schaffe. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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