![]() |
Listbox: Bilder dem Text voranstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
gleich zu Beginn: Ich weiß, dass diese frage im Forum schon häufig gestellt wurden ist, jedoch konnten mir diese Beiträge nicht weiterhelfen (vermutlich stelle ich mich zu blöd an). Also ich habe ne ListBox (lbBilder), in die der folgende Code die ausgewählten Bilder von OpenPictureDialog1 mit deren Pfad als Items in die ListBox geladen werden sollen.
Delphi-Quellcode:
Das Laden des jeweiligen Pfades klappt. Ich möchte jedoch auch vor dem jeweiligen Pfad das Bild eingefügt haben. Dies funktioniert aber nicht.
Bilder: array[1..99] of TBitmap;
... procedure TfImport.bHinzufuegenClick(Sender: TObject); begin if not OpenPictureDialog1.Execute then exit; with OpenPictureDialog1 do for i := 0 to Files.Count - 1 do begin Bilder[i]:= TBitmap.Create; Bilder[i].PixelFormat:= pf24Bit; Bilder[i].Width:= 50; Bilder[i].Height:= 35; Bilder[i].Canvas.CopyRect(Bilder[i].Canvas.ClipRect, lbBilder.Canvas, Rect(5, 0, 5 + 50, 0 + 35)); Bilder[i].Canvas.Draw(0,0,Bilder[i]); Bilder[i].Free; //lbBilder.Items.add(Files.Strings[i]); lbBilder.Items.AddObject(Files.Strings[i], TBitmap(Bilder[i])); end; end; Ich habe die ListBox auf OwnerDrawVariable eingestellt. so soll es einmal aussehen: Danke im Vorraus |
Re: Listbox: Bilder dem Text voranstellen
Hallo
wenn du Objekte zu Luistbox als Object hinzufügst, darfst du sie nicht wieder freigeben. Die Bilder kannst du erst z.B. im ondestroy der Form freigeben. Ansosnten ist auch ein Beispiel in der OH (da du die 2005 hast, kopier ichs mal lieber)
Delphi-Quellcode:
Ansonsten zeig mal deine Drawroutine
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:TRect;State: TOwnerDrawState);
var Bitmap: TBitmap; { Temporäre Variable für Bitmap } Offset: Integer; { Text-Offset } begin with (Control as TListBox).Canvas do { Zeichnen in der Liste, nicht im Formular } begin FillRect(Rect); { Rechteck löschen } Offset := 2; { Standard-Offset definieren } Bitmap := TBitmap((Control as TListBox).Items.Objects[Index]); { Bitmap abrufen } if Bitmap <> nilthen begin BrushCopy(Bounds(Rect.Left + Offset, Rect.Top, Bitmap.Width, Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clRed); { Bitmap darstellen } Offset := Bitmap.width + 6; { Vier Pixel zwischen Bitmap und Text hinzufügen } end; TextOut(Rect.Left + Offset, Rect.Top, (Control as TListBox).Items[Index]) { Text anzeigen } end; end; Mfg Frank |
Re: Listbox: Bilder dem Text voranstellen
... die Routine habe ich nicht, dachte, dass dies durch diese beiden Routinen ausgeführt wird:
Delphi-Quellcode:
MfG
Bilder[i].Canvas.CopyRect(Bilder[i].Canvas.ClipRect, lbBilder.Canvas, Rect(5, 0, 5 + 50, 0 + 35));
Bilder[i].Canvas.Draw(0,0,Bilder[i]); hansklok |
Re: Listbox: Bilder dem Text voranstellen
Wenn ich deinen Code in die OnDrawItem Procedure reinschreibe, dann stürtzt das Programm beim Öffnen eines Bildes ab, übrigens wird auch nichts gezeichnet!
|
Re: Listbox: Bilder dem Text voranstellen
du verwechselst da was. Du fügst einelnen Bilder als Object zu einem Listbox item hinzu und beim erforderlichen Neuzeichnen rufst du die Bilder ab und zeichnest sie in die listbox.
Das bilder.free hast du aber rausgenommen? Ansonsten zeig deinen code. |
Re: Listbox: Bilder dem Text voranstellen
Zitat:
|
Re: Listbox: Bilder dem Text voranstellen
Liste der Anhänge anzeigen (Anzahl: 1)
@ Khabarakh: ... du hast Recht, diese Zeile ist der totale Stuss!
... hier der Code, vielleicht hilft dir das weiter: |
Re: Listbox: Bilder dem Text voranstellen
Servus,
wie schon Keldorn geschrieben hat, gibts du das Bitmap gleich wieder frei. Zudem lädst dunie ein Bitmap in dein Bilder-Array rein. Es sollte ungefähr so aussehen
Delphi-Quellcode:
Edit: Fehler korrigiert, s.u.
procedure TfImport.bHinzufuegenClick(Sender: TObject);
begin if not OpenPictureDialog1.Execute then exit; with OpenPictureDialog1 do for i := 0 to Files.Count - 1 do begin if Bilder[i] = nil then Bilder[i]:= TBitmap.Create; Bilder[i].PixelFormat:= pf24Bit; Bilder[i].Width:= 50; Bilder[i].Height:= 35; Bilder[i].LoadFromFile(Files.Strings[i]); lbBilder.Items.AddObject(Files.Strings[i], TObject(Bilder[i])); end; end; |
Re: Listbox: Bilder dem Text voranstellen
@ Manne: Bei deiner Version kommt es leider zu einer Zugriffsverletzung!
|
Re: Listbox: Bilder dem Text voranstellen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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