Autor Beitrag
Maisinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: Do 29.10.09 17:22 
Hallo,

ich habe ein Programm geschrieben, welches in eine LstView den Inhalt von bestimmten ordnern schreiben soll. Nun soll man in den Programm auch mehrere Ordner in verschiedenen ListView "überwachen" können, weshalb man dynamisch neue TabSheet und darauf eine neue ListView erzeugen kann. Das Proglem daran ist die Prozedur zum "Finden" der Dateien. Wie bekomme ich das hin, dass diese Prozedur auch von den dynamischen ListViews genutzt werden kann? Wenn ich einen eintrag in einer ListView erstellen möchte, muss ich ja immer ein vorhandene ListView auswählen. Da die weiteren aber erst zur Laufzeit erstellt werden, weiß ich nicht, wie ich auch diese mit der Funktion "ansprechen" kann.

Kann mir da jemand Helfen?

DANKE

_________________
Das Unmögliche wagen, um das Mögliche möglich zu machen...
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Do 29.10.09 17:31 
Entweder du verwaltest die dynamischen ListViews in einer TObjectList oder du arbeitest mit FindComponent. Ersteres ist sauberer, der Zugriff auf eine ListView würde dann über

ausblenden Delphi-Quelltext
1:
TListView(DeineObjectList.Items[Index])					


gehen.
Maisinator Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: Do 29.10.09 17:54 
Ok, versuch ich. Wenn du mir noch verräten würdest, wie ich die dynamischen ListViews in diese Objectlist eintragen kann...

_________________
Das Unmögliche wagen, um das Mögliche möglich zu machen...
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 29.10.09 18:07 
ohne objectlist je verwendet zu haben, trau ich mich wetten das diese eine methode namens add zur verfügung stellt. ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Maisinator Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: Do 29.10.09 18:21 
Jop, hast recht...

Aber iwie will das nicht ganz so, wie ich es will...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
item: TListItem;
...
begin
item:= ??
with item do
begin
item.Caption:= name;
item.SubItems.Add(typ);
item.SubItems.Add((Format('%.2f',[size])) + ' MB');
end;


wie müsste es dann an der stelle von ?? aussehen? normal hab ich da immer UMain.Form1.ListView1.Items.Add stehen gehabt... kann mir jemand helfen?

_________________
Das Unmögliche wagen, um das Mögliche möglich zu machen...
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Do 29.10.09 18:32 
Also:

1. Beim Formular eine globale Variable vom Typ TObjectList erstellen (Unit ContNrs einbinden).
2. Im FormCreate die ObjectList erstellen:
ausblenden Delphi-Quelltext
1:
  DeineVar := TObjectList.Create;					

3. In FormDestroy wieder zerstören:
ausblenden Delphi-Quelltext
1:
  DeineVar.Free;					

4. In dem Code-Teil wo du die neuen ListViews erstellst musst du nur nachdem alle Eigenschaften gesetzt wurden die ListView der Liste hinzufügen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  NeueListView: TListView;
begin
  NeueListView := TListView.Create(Self);
  with NeueListView do
  begin
    Parent := Self;
    //etc.
  end;
  DeineVar.Add(NeueListView):
end;


Fertig.

Was genau du jetzt mit den ListItem von obigen Post machen willst, ist mir nicht ganz klar... Vllt. zeigst du einfach mal ein bisschen Code.
Maisinator Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: Do 29.10.09 18:35 
user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:

Was genau du jetzt mit den ListItem von obigen Post machen willst, ist mir nicht ganz klar... Vllt. zeigst du einfach mal ein bisschen Code.


Ich möchte damit einen neuen Eintrag in der entsprechenden ListView erstellen... hat man mir damals in diesem Forum so empfohlen...

_________________
Das Unmögliche wagen, um das Mögliche möglich zu machen...
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Do 29.10.09 18:39 
Na dann:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin
  with TListView(DeineVar.Items[Index]).Items.Add do
  begin
   Caption := '';
   ImageIndex := 5;
   //...
  end;
end;
Maisinator Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: Do 29.10.09 18:59 
Sorry, aber irgendwie steh ich grad voll auf'm Schlauch...

Hier mal mein ganzer Code:

Neue ListView erstellen:
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:
procedure TForm2.ToolButton2Click(Sender: TObject);
var tabsheet: TTabSheet;
    listview: TListView;
    colums: TListColumn;
begin
  tabsheet:= TTabSheet.Create(UMain.Form1.PageControl1);
    with tabsheet do
      PageControl:= UMain.Form1.PageControl1;
      listview:= TListView.CreateParented(TabSheet.Handle);
        with listview do
          begin
            listview.Align:= alClient;
            listview.Font.Size:= 10;
            listview.Font.Name:= 'Arial';
            listview.ViewStyle:= vsReport;
            listview.ColumnClick:= false;
            listview.RowSelect:= true;
          end;
        with listview.Columns.Add do
          begin
            listview.Column[0].Caption:= 'Dateiname';
            listview.Column[0].AutoSize:= true;
          end;
        with listview.Columns.Add do
          begin
            listview.Column[1].Caption:= 'Dateityp';
            listview.Column[1].Width:= 70;
          end;
        with listview.Columns.Add do
          begin
            listview.Column[2].Caption:= 'Größe';
            listview.Column[2].Width:= 70;
          end;
      UMain.Form1.objektliste.Add(listview);
      tabsheet.InsertControl(listview);
      UMain.Form1.PageControl1.Pages[UMain.Form1.PageControl1.PageCount - 1].Caption:= LabeledEdit1.Text;
      UMain.Form1.PageControl1.SelectNextPage(true, true);
  UScribt.SearchData(LabeledEdit2.Text);
  Close;
end;

--> funktioniert!

Der eigentliche Code zum suchen der Dateien:
ausblenden 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:
procedure SearchData(path: string);
var FileInfos: TSearchRec;
    filelength: integer;
    size: double;
    typ, name: string;
    i: Integer;
begin
for i := 1 to UMain.Form1.PageControl1.PageCount do
  begin
    if FindFirst(path, 0, FileInfos) = 0 then try
      begin
        repeat
          filelength:= length(FileInfos.Name);
          name:= Copy(FileInfos.Name, 0, filelength - 5);
          typ:= Copy(FileInfos.Name, filelength - 33);
          size:= FileInfos.Size / 1024 /  1024;
            with TListView(UMain.Form1.objektliste.Items[i]).Items.Add do
              begin
                Caption:= name;
                SubItems.Add(typ);
                SubItems.Add((Format('%.2f',[size])) + ' MB');
              end;
        until FindNext(FileInfos) <> 0;
      end;
      finally
        FindClose(FileInfos);
      end;
  end;
end;

--> funktioniert nicht!

Kann mir jemand Helfen?

_________________
Das Unmögliche wagen, um das Mögliche möglich zu machen...