Autor Beitrag
Dwing
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 13.05.09 17:11 
Hallo,

ich arbeite gerade an einem kleinen Tool, um Bilder (jpgs) zu sortieren, und nach einem bestimmten Muster umzubennen. Dazu soll es eine Vorschaufunktion geben.

Alle Bilder (bzw. eben der Speicherort/alte Dateiname) werden in meine Listbox1 geladen. Wie kann ich jetzt alle Bilder anzeigen lassen, sprich wie erzeuge ich eine unbekannte Anzahl an TImages nebeneinander, während der Laufzeit?
OG Karotte
Hält's aus hier
Beiträge: 6

Win XP Pro, Win Vista HP
Delphi 2009 Professional
BeitragVerfasst: Mi 13.05.09 20:23 
ausblenden Delphi-Quelltext
1:
Listbox1.Items.AddObject(MyImageFileName,TImage.Create(nil));					

:gruebel:

_________________
Gruß
Stefan
Dwing Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 14.05.09 12:24 
Sorry, evtl. hab ich mich ungenau ausgedrückt.
Für jeden Eintrag in der Listbox soll auf der Form ein Bild erstellt werden.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Do 14.05.09 12:49 
Ich würde an deiner Stelle die Images in einem dynamischen Array verwalten:
ausblenden Delphi-Quelltext
1:
2:
var
  ImgArr: array of TImage;

Dann solltest du pro Einrag je ein Arrayelement erstellen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  i:Integer;
{...}
SetLength(ImgArr, ListBox1.Items.Count); //Legt die Anzahl gleich fest
For i:=0 to ListBox1.Items.Count-1 do
  begin
    ImgArr[i] := TImage.Create(self); //Das ganze erstellen
    ImgArr[i].Parent := self; //Die Oberfläche zuweisen
    {...}
    //Hier müsste dann weiterer Code folgen, z. B. Höhe, Breite, Bild laden etc.
  end;

Und vergiss dann nachher nicht, die Objekte vor dem Neubeschreiben wieder zu leeren:
ausblenden Delphi-Quelltext
1:
2:
For i:=0 to High(ImgArr) do
  ImgArr[i].Free();

Das sollte erstmal funktionieren.
OG Karotte
Hält's aus hier
Beiträge: 6

Win XP Pro, Win Vista HP
Delphi 2009 Professional
BeitragVerfasst: Do 14.05.09 12:57 
Na ja, im Prinzip wäre mein Beispiel schon ein Weg in diese Richtung. Du benötigst für jedes anzuzeigende Bild ein entspr. Objekt (z.B. TImage). Diese kannst Du über meine o.g. Möglichkeit direkt zu ordnen und anschließend auch wieder abrufen und entspr. anzeigen

z.B.:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
//Pseudocode, da im Augenblick kein Delphi zur Verfügung :(
for i := 0 to Listbox1.Items.count -1 do
begin

  With TImage(Listbox1.Items.Object[i]) do
  begin
    Parent := Form2 // Das Image soll z.B. auf Form2 angezeigt werden
    Top := 10;
    Left := 10;
    if i > 0 then // erstes Objekt/Image nicht verschieben
      Left := TImage(Listbox1.Items.Object[i]).left + TImage(Listbox1.Items.Object[i]).width;
    Picture.LoadfromFile(Listbox1.Items.Strings[i].Text); // ??? Parameter nicht im Kopf :oops: 
    Visible := True;
  end;
end;


Nur darfst/solltest Du nicht vergessen, die TImage-Objekte wieder freizugeben (das macht Delphi nicht von selbst).

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt

_________________
Gruß
Stefan