AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Listbox: Bilder dem Text voranstellen

Ein Thema von hansklok · begonnen am 17. Jul 2005 · letzter Beitrag vom 18. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2   
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 12:51
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:
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;
Das Laden des jeweiligen Pfades klappt. Ich möchte jedoch auch vor dem jeweiligen Pfad das Bild eingefügt haben. Dies funktioniert aber nicht.
Ich habe die ListBox auf OwnerDrawVariable eingestellt.

so soll es einmal aussehen:

Danke im Vorraus
Miniaturansicht angehängter Grafiken
listbox_129.jpg  
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
862 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:05
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:
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;
Ansonsten zeig mal deine Drawroutine

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#3

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:08
... die Routine habe ich nicht, dachte, dass dies durch diese beiden Routinen ausgeführt wird:

Delphi-Quellcode:
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]);
MfG

hansklok
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#4

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:14
Wenn ich deinen Code in die OnDrawItem Procedure reinschreibe, dann stürtzt das Programm beim Öffnen eines Bildes ab, übrigens wird auch nichts gezeichnet!
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
862 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:21
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.

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:29
Zitat von hansklok:
Bilder[i].Canvas.Draw(0,0,Bilder[i]);
Was willst du denn damit bezwecken ?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#7

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:32
@ Khabarakh: ... du hast Recht, diese Zeile ist der totale Stuss!
... hier der Code, vielleicht hilft dir das weiter:
Angehängte Dateien
Dateityp: zip listbox_866.zip (227,2 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Manne
Manne

Registriert seit: 8. Okt 2003
Ort: Hirrlingen
82 Beiträge
 
Delphi 7 Personal
 
#8

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:35
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:
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;
Edit: Fehler korrigiert, s.u.
So 6 wie wir 5 gibt es keine 4 andere, denn wir 3 sind die 2 1sten
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#9

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:41
@ Manne: Bei deiner Version kommt es leider zu einer Zugriffsverletzung!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Listbox: Bilder dem Text voranstellen

  Alt 17. Jul 2005, 13:44
Zitat von hansklok:
@ Manne: Bei deiner Version kommt es leider zu einer Zugriffsverletzung!
Und wo genau? Ich sehe nämlich keinen Fehler in Mannes Code.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf