Autor Beitrag
Redrunner
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 09.09.06 12:45 
Hat niemand irgendeinen Vorschlag oder Ansatz ???
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 09.09.06 23:21 
Moin und :welcome: 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. :D

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Redrunner Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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.



ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; var i : integer;

implementation

////////////////////////////////////Sucht Dateien/////////////////////////////////////
procedure GetFilesInDirectory(Directory: Stringconst 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 user profile iconGausi: Quote- durch Delphi-Tags ersetzt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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 Suche in: Delphi-Forum 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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.