Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VST Repaint Prob mit externen Controls bei Columnsortierung (https://www.delphipraxis.net/121314-vst-repaint-prob-mit-externen-controls-bei-columnsortierung.html)

richard_boderich 25. Sep 2008 15:09


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;

richard_boderich 26. Sep 2008 15:28

Re: VST Repaint Prob mit externen Controls bei Columnsortier
 
*push*

toms 26. Sep 2008 15:33

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) ?

richard_boderich 26. Sep 2008 18:25

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.

toms 26. Sep 2008 18:33

Re: VST Repaint Prob mit externen Controls bei Columnsortier
 
Könntest du ein kleines Demo-Projekt anhängen?

richard_boderich 27. Sep 2008 11:12

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 09:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz