Hallo,
ich benutze eine Stringgrid in der in jeder Zelle ein Bild hineingeladen wird. In der Funktion OnDrawCell wird das benötigte Bitmap ermittelt und in der aktuellen Zelle rausgezeichnet. Das Stringgrid kann ca. 150 Spalten und 80 Zeilen enthalten.
Ich habe das ganze zuerst mittels StretchDraw durchgeführt, das Problem ist, dass die verkleinerten Bitmaps nicht schön sind.
Durch stöbern im Forum bin ich dann auf die Graphics32 gestoßen. Hab versucht diese zu implementieren, jedoch muss ich sagen, dass die Bitmaps jetzt zwar wunderschön aussehen, jedoch die Performance total unakzeptabel ist. Es dauert ca. zehn Sekunden bis die komplette Tabelle befüllt ist.
Es wird geschrieben dass Graphics32 extrem schnell sei. Anscheinend nicht in meinem Fall.
Vielen Dank für Eure Hilfe!
Hier der Code:
Delphi-Quellcode:
procedure TForm.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
// Object aus Zelle auslesen (beinhaltet Informationen zum Ermitteln des Bitmaps)
Lagerfach := TLagerfach(StringGrid1.Objects[Col,Row]);
if (Lagerfach = nil) then
exit;
// Alte Version
// Bitmap ermitteln und verkleinert im Grid anzeigen
// EditorStringGrid.Canvas.StretchDraw(Rect, GetFachstatusBitmap(Lagerfach.seFachstatus, 0));
// Neue Version
// Bitmap ermitteln
source32 := GetFachstatusBitmap32(Lagerfach.seFachstatus, 0);
// verkleinert ausgeben
dest32.SetSize(StringGrid1.DefaultColWidth, StringGrid1.DefaultRowHeight);
source32.StretchFilter := sfLanczos;
source32.DrawTo(dest32,dest32.BoundsRect, source32.BoundsRect);
dest32.DrawTo(StringGrid1.Canvas.Handle,Rect.Left,Rect.Top);
end;