![]() |
zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an
Hallo,
ich erzeuge zur Laufzeit eine ComboBox und weis der 2 Bitmaps als Objects zu:
Delphi-Quellcode:
Im DrawItem der ComboBox hab ich das drin:
procedure TForm1.FormCreate(Sender: TObject);
var Bitmap1, Bitmap2: TBitmap; begin //Bitmaps erzeugen Bitmap1 := TBitmap.Create; Bitmap2 := TBitmap.Create; try //Bilder in Bitmaps laden Bitmap1.LoadFromFile('d:\Original.bmp'); Bitmap2.LoadFromFile('d:\modified.bmp'); //ComboBox auferzeugen und beschreiben ComboBox_SG := TComboBox.Create(StringGrid1); with ComboBox_SG do begin Parent := StringGrid1; Visible := false; Enabled := true; Style := csOwnerDrawVariable; ItemHeight := 14; //Bitmaps in ComboBox aufnehmen Items.AddObject('', Bitmap1); Items.AddObject('', Bitmap2); //Properties: OnChange := OnChangeComboBox_SG; OnDrawItem := OnDrawItemComboBox_SG; OnExit := OnExitComboBox_SG; end; StringGrid_aufbauen; finally FreeAndNil(Bitmap1); FreeAndNil(Bitmap2); end; end;
Delphi-Quellcode:
Ich kann es compilieren, nur werden die Bitmaps nicht angezeigt.
var
Bitmap: TBitmap; Offset: Integer; begin offset := 0; with ComboBox1.Canvas do begin FillRect(Rect); Bitmap := TBitmap(ComboBox1.Items.Objects[Index]); if Bitmap <> nil then begin //copy bitmap to combobox coordinate BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width, Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clred); Offset := Bitmap.Width + 8; end; //Set a caption to each item TextOut(Rect.Left + Offset, Rect.Top, Combobox1.Items[Index]); end; Wenn ich das ganze mit nicht-zur-Laufzeit-erzeugten ComboBox mache, funktioniert es. Irgendwas überseh ich - nur was? |
Re: zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an
Hallo,
wenn du die Bitmaps gkleich wieder zerstörst, wundert esm ich, dass es überhaupt funktioniert. Das "FreeAndNil" muss auf jeden fall raus. |
Re: zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an
hallo,
das FreeAndNil kann bleiben, denn es funktioniert auch ohne dem nicht! (war auch mein erster Gedanke) |
Re: zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an
Warum legst du die Bilder nicht in einer Imageliste ab und direkt in der Combobox?
Die Bitmaps dürfen aber definitiv nicht gleich wieder Freigegeben werden. |
Re: zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an
Die ComboBox wird in Zellen eines StringGrid dargestellt.
Und bei auswahl eines Eintrages der ComboBox wird das Object übertragen zur der Zelle des StringGrids. Ich hab jetzt aber den Fehler gefunden: der Parent der ComboBox darf nicht die StringGrid sein. Ich werde aber die Bitmaps nicht gleich wieder freigeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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 by Thomas Breitkreuz