![]() |
TAdvStringGrid: OnGetCellText vs. AutoSizeCol
Hallo,
mal wieder das ewige Leid mit umfangreichen Grids (RowCount=1000 -> Kundenwunsch). Das TAdvStringGrid hat ja diesen schicken virtuellen Modus, also ColCount und RowCount setzen, Cells lassen wir links liegen und reagieren auf OnGetCellText und geben dort unsere Strings zurück. Bei etwas größeren (RowCount) Grids ist der Performance-Gewinn sagenhaft. Dummerweise mache ich aber eine AutoSizeCol und schon muss er alle Zeilen per OnGetCellText abfragen ;( Ich bin jetzt schon am überlegen, ob ich dem Nutzer erlaube, die Spaltenbreite selbst zu setzen, dann wäres das mit dem AutoSizeCol. PS: "BeginUpdate", "RowCount auf 2 lassen" ist alles schon eingebaut |
AW: TAdvStringGrid: OnGetCellText vs. AutoSizeCol
Hallo,
hat sich erledigt, auch mit OnGetDisplText klappt das mit dem AutoSizeCol in "atemberaubender" Geschwindigkeit. |
AW: TAdvStringGrid: OnGetCellText vs. AutoSizeCol
Nur so eine Idee:
Man kann auch die längsten N Texte ermitteln und setzt RowCount und Cells entsprechend. Das Finden des längsten Texts kann entweder durch einfache Textlänge oder durch jeweiligen Aufruf von AdvStringGrid1.Canvas.TextWidth erfolgen. Das kann natürlich auch schon mal komplizierter werden, wenn die Texte noch aufwendig formatiert werden müssen. Wie gesagt - nur 'ne Idee. |
AW: TAdvStringGrid: OnGetCellText vs. AutoSizeCol
Hallo,
das klappt alles ohne die "Umwege". Hätte ich nicht gedacht.
Delphi-Quellcode:
procedure TForm69.SGGetDisplText(Sender: TObject; ACol, ARow: Integer; var Value: string); begin if CBOnGetCellText.Checked then begin Value := IntToStr(ACol)+'/'+IntToStr(ARow) end; end; procedure TForm69.CBOnGetCellTextClick(Sender: TObject); var iTick1: Integer; iTick2: Integer; begin iTick1 := GetTickCount; SG.RowCount := 2; SG.RowCount := 30000; SG.Invalidate; iTick2 := GetTickCount; AutoSize; MessageBox(0, PChar(IntToStr(iTick2-iTick1)), 'Dauer (msec)', 0); end; procedure TForm69.AutoSize; var iCol: Integer; begin for iCol:= 0 to SG.ColCount-1 do begin begin SG.AutoSizeCol(iCol); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 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