Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#11

AW: hat TStringgrig eine innere Größenbeschränkung?

  Alt 16. Sep 2010, 20:24
Also die Hinweise zusammengeworfen, (wenn schon die ganze Datenbank eingelesen und angezeigt werden muss) würde es am meisten Sinn machen, die Daten in einen schnellen "Container" einzulesen.

Also Daten erst in ein passendes dyn. Array einlesen und über eine simple Funktion die Werte für die jeweilige Zeile/Spalte bereitstellen (ist im Ausgangspost ja quasi schon vorhanden)
function GetDatabaseArrayValue(ACol, ARow): String; .

Nach dem Einlesen ist RowCount bekannt und kann im StringGrid gesetzt werden. Das StringGrid wird jetzt nicht gefüllt sonder wie mkinzler vorgeschlagen hat, nur der sichtbare Bereich via DrawCell angezeigt (Beispiel mit einer fixed Row):
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject;
  ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

var
  s : String;
begin
  with (Sender as TStringGrid) do begin

    if gdFixed in State then
      SetTextStyle(Canvas, clBtnFace, clBtnText, [])
    else
    if gdSelected in State then
      SetTextStyle(Canvas, clHighlight, clHighlightText, [])
    else
      SetTextStyle(Canvas, clWindow, clWindowText, []);

    if ARow = 0 then
      s := Cells[Acol,Arow]
    else
      s := GetDatabaseArrayValue(ACol, ARow);

    Canvas.TextRect(Rect,Rect.Left +2,Rect.Top+2, s);
  end;
end;

Geändert von Satty67 (16. Sep 2010 um 20:27 Uhr)
  Mit Zitat antworten Zitat