AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi TAdvStringGrid: OnGetCellText vs. AutoSizeCol
Thema durchsuchen
Ansicht
Themen-Optionen

TAdvStringGrid: OnGetCellText vs. AutoSizeCol

Ein Thema von hoika · begonnen am 18. Aug 2016 · letzter Beitrag vom 18. Aug 2016
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

TAdvStringGrid: OnGetCellText vs. AutoSizeCol

  Alt 18. Aug 2016, 17:51
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
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TAdvStringGrid: OnGetCellText vs. AutoSizeCol

  Alt 18. Aug 2016, 19:09
Hallo,
hat sich erledigt,
auch mit OnGetDisplText klappt das mit dem AutoSizeCol in "atemberaubender" Geschwindigkeit.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#3

AW: TAdvStringGrid: OnGetCellText vs. AutoSizeCol

  Alt 18. Aug 2016, 19:20
Nur so eine Idee:
  • BeginUpdate
  • RowCount merken
  • OnGetCellText merken
  • RowCount auf 2
  • OnGetCellText auf nil
  • Setze Cells[col, 1] auf längsten möglichen Text
  • AutoSizeCol
  • Cells[col, 1] wieder leer machen
  • OnGetCellText und RowCount wieder herstellen
  • EndUpdate

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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TAdvStringGrid: OnGetCellText vs. AutoSizeCol

  Alt 18. Aug 2016, 19:44
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;
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 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