Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Items in ListView erstellen
Maisinator - Do 29.10.09 17:22
Titel: Items in ListView erstellen
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
Andreas L. - 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 - 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...
elundril - 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
Maisinator - 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?
Andreas L. - 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:
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 - 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...
Andreas L. - 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 - Do 29.10.09 18:59
Sorry, aber irgendwie steh ich grad voll auf'm Schlauch...
Hier mal mein ganzer Code:
Neue ListView erstellen:
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:
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?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!