Autor Beitrag
webmaker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205



BeitragVerfasst: Mo 26.08.02 21:25 
HAllo Leute,
Ich hab da mal ne Frage und zwar wie kann ich alle Datein bzw. auch nur einige in eine TStringlist schreiben, sodass ich sie später z.b. in eine Listbox oder so packen kann???

_________________
.::Wissen ist Macht, nichts wissen macht nichts::.
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Mo 26.08.02 21:40 
Schon mal was davon gehört :twisted: :

Zitat:
Hinweis Schauen Sie vor dem Posten in die FAQ!



Guckst du hier: www.auq.de/viewtopic.php?t=1107

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
Millo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 147



BeitragVerfasst: Mo 26.08.02 21:41 
Moin

Für solche fälle kann man eigentlich ganz gut die FileListBox und die DirectoryListbox Komponenten der Registrierkarte Win 3.1 verwenden.
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Mo 26.08.02 21:43 
@Millo

kommt immer darauf an, ob der user darauf einfluß haben soll oder nicht. :)

Gruß Renegade

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
Millo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 147



BeitragVerfasst: Di 27.08.02 12:38 
@Renegade

:oops: Hast wohl recht.


@webmaker

Sonst gibt es auch noch Komponenten wie ShellListView und ShellTreeView.

Der Code für einen solchen zugriff ist ungefähr immer gleich.
mit diesem hier kann kriegst du alle Markierten Dateien( Er zeigt alle Selectierten Einträge der ShellListView in der ListBox an):

ausblenden Quelltext
1:
2:
3:
4:
5:
for x:=0 to ShellListView1.Items.Count-1 do
begin
if ShellListView1.Items.Item[x].Selected then
ListBox1.Items.Add(ShellListView1.Folders[x].DisplayName);
end;


Für den Namen:
ausblenden Quelltext
1:
ShellListView1.Folders[x].DisplayName;					
webmaker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205



BeitragVerfasst: Di 27.08.02 15:15 
Danke, das mit der Faq habe ich leider nicht gesehen.
Dennoch habe ich zwei Fragen und zwar sagt er bei FindClose, dass es incompatible Typen: Cardinal und TSearchRec seien. Vorher habe ich diesen Code in einem leeren Formular gehabt, stoppte er nicht.
Wenn ich findclose rausnehme funktioniert es trotzdem noch.
2. Wenn ich in einen Ordner gehe, in dem noch weitere Ordner sind, so zeigt er die auch in der Listbox an
QuellCode:
ausblenden volle Höhe 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:
Procedure FindFiles (aPath, aFindMask: String; aWithSub: Boolean; aResult: tStrings);
Var
  FindRec5: tSearchRec;
Begin
  // Wenn die Stringliste nil ist oder aPath oder aFind nicht angegeben ist
  // dann raus
  If (aPath = '') or (aFindMask = '') or Not Assigned (aResult) Then
    Exit;

  // Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen
  If aPath[Length (aPath)] <> '\' Then
    aPath := aPath + '\';

  // Im aktuellen Verzeichnis nach der Datei suchen
  If FindFirst (aPath + aFindMask, faAnyFile, FindRec5) = 0 Then
    Repeat
      If (FindRec5.Name <> '.') and (FindRec5.Name <> '..') Then
        // ...Ergebnis in die Stringlist einfügen
//        aResult.Clear;
        aResult.Add (FindRec5.Name);
    Until FindNext (FindRec5) <> 0;
// FindClose(FindRec5);

  // Wenn nicht in Unterverzeichnissen gesucht werden soll dann raus
  If Not aWithSub Then
    Exit;

  // In Unterverzeichnissen weiter suchen
  If FindFirst (aPath + '*.*', faAnyFile, FindRec5) = 0 Then
    Repeat
      If (FindRec5.Name <> '.') and (FindRec5.Name <> '..') Then
        // Feststellen, ob es sich um ein Verzeichnis handelt
        If Boolean (FindRec5.Attr and faDirectory) Then
          // Funktion erneut aufrufen, um Verzeichnis zu durchsuchen (Rekursion)
          FindFiles (aPath + FindRec5.Name, aFindMask, aWithSub, aResult);
    Until FindNext (FindRec5) <> 0;

//   FindClose (FindRec5);
End;

procedure TFrameForm.ShellTreeView1DblClick(Sender: TObject);
begin
     browserlistbox.Clear;
     FindFiles (ShellTreeView1.Path, '*.*', False, browserlistbox.Items);
end;

_________________
.::Wissen ist Macht, nichts wissen macht nichts::.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.08.02 15:57 
webmaker hat folgendes geschrieben:
Danke, das mit der Faq habe ich leider nicht gesehen.

Man sollte solche Quellen immer vorher zu Rate ziehen. :wink:

Zitat:
... und zwar sagt er bei FindClose, dass es incompatible Typen: Cardinal und TSearchRec seien.

Bei dir kommen sich die Units "Windows" und "SysUtils" in die Quere. In beiden stecken Routinen zum Suchen der Dateien. Beim Suchen selbst passiert nichts, da die Namen unterschiedlich sind. Nur "FindClose" ist in beiden Fällen identisch. Du solltest deshalb
ausblenden Quelltext
1:
SysUtils.					

vor die "FindClose"-Zeilen setzen. (Den Punkt nicht vergessen!)

Zitat:
Wenn ich findclose rausnehme funktioniert es trotzdem noch.

Das ist aber ein Fehler, und das solltest du ganz schnell wieder rückgängig machen.
webmaker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205



BeitragVerfasst: Di 27.08.02 16:14 
Ist klar das FindClos drin sein muss. Jetzt klappt es auch. Danke
Nur das er die Verzeichnisse mit in der Lsitbox auflistet ist doof, wie kriege ich die weg????

_________________
.::Wissen ist Macht, nichts wissen macht nichts::.