AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an
Thema durchsuchen
Ansicht
Themen-Optionen

zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an

Ein Thema von Helmi · begonnen am 29. Apr 2007 · letzter Beitrag vom 29. Apr 2007
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an

  Alt 29. Apr 2007, 12:22
Hallo,

ich erzeuge zur Laufzeit eine ComboBox und weis der 2 Bitmaps als Objects zu:
Delphi-Quellcode:
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;
Im DrawItem der ComboBox hab ich das drin:
Delphi-Quellcode:
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;
Ich kann es compilieren, nur werden die Bitmaps nicht angezeigt.
Wenn ich das ganze mit nicht-zur-Laufzeit-erzeugten ComboBox mache, funktioniert es.

Irgendwas überseh ich - nur was?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an

  Alt 29. Apr 2007, 12:27
Hallo,

wenn du die Bitmaps gkleich wieder zerstörst, wundert esm ich, dass es überhaupt funktioniert. Das "FreeAndNil" muss auf jeden fall raus.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

Re: zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an

  Alt 29. Apr 2007, 12:35
hallo,

das FreeAndNil kann bleiben, denn es funktioniert auch ohne dem nicht!
(war auch mein erster Gedanke)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an

  Alt 29. Apr 2007, 12:44
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#5

Re: zur Laufzeit erzeugte ComboBox zeigt keine Bitmaps an

  Alt 29. Apr 2007, 12:47
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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  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 01:21 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