Autor |
Beitrag |
Maisinator
      
Beiträge: 167
Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
|
Verfasst: 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.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: 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
Delphi-Quelltext 1:
| TListView(DeineObjectList.Items[Index]) |
gehen.
|
|
Maisinator 
      
Beiträge: 167
Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
      
Beiträge: 167
Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
|
Verfasst: Do 29.10.09 18:21
Jop, hast recht...
Aber iwie will das nicht ganz so, wie ich es will...
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.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: 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:
Delphi-Quelltext 1:
| DeineVar := TObjectList.Create; |
3. In FormDestroy wieder zerstören:
Delphi-Quelltext
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:
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; 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 
      
Beiträge: 167
Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
|
Verfasst: Do 29.10.09 18:35
Andreas L. hat folgendes geschrieben : |
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.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Do 29.10.09 18:39
Na dann:
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 
      
Beiträge: 167
Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
|
Verfasst: Do 29.10.09 18:59
Sorry, aber irgendwie steh ich grad voll auf'm Schlauch...
Hier mal mein ganzer Code:
Neue ListView erstellen:
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:
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 - 3, 3); 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...
|
|