Autor |
Beitrag |
Redrunner
Hält's aus hier
Beiträge: 7
|
Verfasst: Fr 08.09.06 15:15
Hallo,
ich bin neu hier und komm bei einer Programmieraufgabe einfach nicht mehr weiter. Ich möchte ein Programm schreiben, bei dem mir Bilder in einer Listbox angezeigt werden. Soweit so gut, ich kenn den Befehl um ein einzelnes Bild in die Listbox zu laden, nur möchte ich es nun auf folgende Weise machen:
1. Das Programm soll einen Stammordner kennen (z.B. C:\Bilder\)
2. Nun sollen in diesem Standardordner einzelne Unterordner existieren die jeweils verschiedene Namen haben (z.B. C:\Bilder\Test\ und C:\Bilder\Arbeit\)
3. In diesen Ordnern liegt immer die Datei bild.jpg, die sich das Programm suchen soll und in der ListBox anzeigen soll
Was ich auch schon hinbekommen habe, ist z.B. alle .jpg Dateien in der ListBox anzeigen zulassen (also mit Pfad), aber ich hätte gerne das Bild und keinen Textpfad.
Ich hoffe ihr könnt mir helfen.
Gruß
Redrunner
|
|
Redrunner 
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 09.09.06 12:45
Hat niemand irgendeinen Vorschlag oder Ansatz ???
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 09.09.06 23:21
Moin und  im Forum!
Du sagst, du kommst nicht weiter, wie sieht denn dein bisheriger Ansatz aus? Hast du schon Code? Dann zeig doch mal was...  weil so läuft das ja darauf hinaus, dir das Programm zu schreiben.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Redrunner 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 11.09.06 09:36
Soweit bin ich bis jetzt gekommen. In einer ListBox werden die Verzeichnisse ausgegeben und in der anderen ListBox ein Bild geladen und als Item eingefügt. Nun würde ich aber gerne unterschiedliche Bilder einladen und nicht immer die gleichen, wobei die Bilder immer in unterschiedlichen Unterordnern liegen, aber immer die gleiche Bezeichnung haben.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg, ComCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; ListBox2: TListBox; Image1: TImage; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; var i : integer;
implementation
procedure GetFilesInDirectory(Directory: String; const Mask: String; List: TStrings; WithSubDirs, ClearList: Boolean);
procedure ScanDir(const Directory: String); var SR: TSearchRec; begin if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then try repeat List.Add(Directory + SR.Name) until FindNext(SR) <> 0; finally FindClose(SR); end;
if WithSubDirs then begin if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try repeat if ((SR.attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then ScanDir(Directory + SR.Name + '\'); until FindNext(SR) <> 0; finally FindClose(SR); end; end; end;
begin List.BeginUpdate; try if ClearList then List.Clear; if Directory = '' then Exit; if Directory[Length(Directory)] <> '\' then Directory := Directory + '\'; ScanDir(Directory); finally List.EndUpdate; end; end; {$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin GetFilesInDirectory('C:\Dell', '*.avi', Listbox1.Items,True, True); ListBox2.Items.AddObject('Test', Image1.Picture); end;
end. |
Moderiert von Gausi: Quote- durch Delphi-Tags ersetzt
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 11.09.06 10:59
Moin!
Hmm... das ist ja jetzt nicht wirklich viel Code von dir, 2 Zeilen...
Habe ich dich richtig verstanden, du möchtest statt Text Bilder in der Listbox haben?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Redrunner 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 11.09.06 11:31
Zitat: | Hmm... das ist ja jetzt nicht wirklich viel Code von dir, 2 Zeilen... |
Naja, das Programm funktioniert auf jedenfall soweit ....
Zitat: | Habe ich dich richtig verstanden, du möchtest statt Text Bilder in der Listbox haben? |
Ja genau da sollen jetzt kleine Bilder in der Listbox erscheinen (jeweils 1 Bild als Listbox ITEM). Diese Bilder heißen immer Cover.jpg und sind im Ordner C:\Dell\ ... und dann in verschiedenen Unterordnern (Bsp: C:\Dell\Unterordner1\cover.jpg oder C:\Dell\Unterordner2\cover.jpg
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Mo 11.09.06 11:35
Hallo,
die Frage die sich mir stellt, ist wie groß du diese haben möchtest. Also zum Beispiel in der Größe eine Icons, dann bietet sich die Komponente ListView an, wenn du sie größer darstellen möchtest, dann wird es schon etwas komplizierter.
Das Anzeigen musst du auf jedenfall durch selber Zeichnen lösen (OnDrawItem o.ä.). Die Hilfe zu TCANVAS sollte dir beim Zeichnen behilflich sein.
Alles in allem nicht die einfachste Aufgabe für einen Anfänger.
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Redrunner 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 11.09.06 13:58
Zitat: | die Frage die sich mir stellt, ist wie groß du diese haben möchtest. Also zum Beispiel in der Größe eine Icons, dann bietet sich die Komponente ListView an, wenn du sie größer darstellen möchtest, dann wird es schon etwas komplizierter. |
Ja das Bild sollte schon etwas größer sein, als ein Icon. Ich muss es auch nicht unbedingt in eine Listbox laden, falls das zu kompliziert wird, ich sollte eben nur eine Liste haben wo viele Bilder reingehen und ich dann scrollen kann.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 11.09.06 14:15
Moin!
Du kannst die Listbox mit Style := lbOwnerDrawVariable; so konfigurieren, dass du das Zeichnen des Inhalts selbst übernimmst. Gib mal lbOwnerDrawVariable in den Code ein und drück F1, dann kannst du näheres in der DOH nachlesen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Mo 11.09.06 14:20
Als Ergänzung zu Narses:
In dem Ereignis OnMeasure kannst du dann festlegen, wie groß der Eintrag sein soll. Das muss du dementsprechend an die Größe des Bildes anpassen.
Am sinnvollsten ist es, wenn du zunächst die einzelnen Dateiname in der (virtuellen) Liste einfügst und diese dann mit einem Thread schrittweise durchgehst und mit Daten (Bild, Größe, ...) hinterlegst.
So wird das auch bei den üblichen Bildbetrachtern gemacht, sonst friert das Programm bei größeren Dateimenge für eine längere Zeit ein.
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
|