![]() |
Bitmaps in Stringgrid einbinden
Hallo Gemeinde,
folgendes Problem: Ich habe ein Stringgrid mit n Zeilen und 5 Spalten als z. B. Artikelansicht. Dieses Stringgrid wird aus einer Datenbank gefüllt. Ein Feld der Datenbank enthält (wenn vorhanden) einen Verweis auf eine Grafik. Diese soll in Spalte 0 der jeweiligen Artikelzeile angezeigt werden. Ist keine Grafik vorhanden dann soll die Zelle im Grid leer bleiben. Soweit so gut. Grafik in der Zelle anzeigen ist nicht das Problem, aber er zeigt immer die gleiche Grafik bei allen Artikeln. So hab ich das bisher gemacht: Deklaration:
Delphi-Quellcode:
Füllen des Arrays:
var
ArtikelForm: TArtikelForm; img : TImage; liste : array of TImage;
Delphi-Quellcode:
00-000.bmp ist eine weiße Bitmap als Platzhalter.
img := TImage.Create(self);
index := 0; while not QueryArtikel.Eof do begin StringGrid1.RowCount := i + 1; SetLength(Liste,index + 1); if QueryArtikel.FieldByName('ABBILDUNG').AsString <> '' then begin img.Picture.Bitmap.LoadFromFile(pfad+QueryArtikel.FieldByName('ABBILDUNG').AsString); Liste[index] := img; end else begin img.Picture.Bitmap.LoadFromFile(pfad+'00-000.bmp'); Liste[index] := img; end; StringGrid1.Cells[0,j] := '';//QueryArtikel.FieldByName('LIEFERANTENNR').AsString; StringGrid1.Cells[1,j] := QueryArtikel.FieldByName('ARTIKELNR').AsString; StringGrid1.Cells[2,j] := QueryArtikel.FieldByName('ARTIKELBEZ').AsString; StringGrid1.Cells[3,j] := QueryArtikel.FieldByName('PREIS').AsString; StringGrid1.Cells[4,j] := QueryArtikel.FieldByName('LIEFERANTENNR').AsString; inc(j); inc(index); QueryArtikel.Next; Zeichnen der Zelle:
Delphi-Quellcode:
Es gibt in der Auswahlliste einen korrekten Verweis auf eine vorhandene Grafik. In diesem Fall ist es der erste Datensatz. Normalerweise müsste doch in der ersten Zeile des Stringgrid die entsprechende Grafik stehen und beim Rest eine weisse (der Platzhalter), da sonst keine weiteren Verweise auf Grafiken vorhanden sind. Es kommen aber bei allen Artikeln nur der Platzhalter.
if (ARow > 0) and (ACol = 0) then
begin StringGrid1.Canvas.Draw(Rect.left,Rect.Top, Liste[ARow-1].Picture.Bitmap); end; Was zum Geier hab ich übersehen?? Gruß NoWu |
AW: Bitmaps in Stringgrid einbinden
Würde schätzen Dein letzter Artikel hat die Default leere Grafik. Du erzeugst nur eine Bitmap außerhalb der Schleife und hast somit nur eine Objektinstanz mit der Du arbeitest. Die wird wieder und wieder verwendet. Verlagere Dein img := TImage.Create mal hinter das While..EOF.
Würde das aus Speicherplatzgründen aber vielleicht anders realisieren und bei leerer Grafik einen Nil-Zeiger in dem Array speichern und diesen dann beim Zeichnen auswerten. Sobald er nicht belegt ist würde ich dort die 00-000.bmp laden und zeichnen. Dann schleppst Du nicht so viele unnütze Objekte mit rum. |
AW: Bitmaps in Stringgrid einbinden
Hallo DelphiBandit,
vielen Dank. Gott sei Dank ist heute Freitag!! Funktioniert so. Problem gelöst. :wall::wall::wall: Gruß und schönes WE. NoWu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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