Entwickler-Ecke

Dateizugriff - Wo liegt die Datei? (Done; mehr oder minder ;-)


Terra23 - Fr 31.10.03 20:53
Titel: Wo liegt die Datei? (Done; mehr oder minder ;-)
Hi Leute.

Ich habe in meinem Programm mehrere Unterordner nach Dateien gesucht, diese vom Pfad getrennt und in einer ListBox ausgegeben. Das klappt auch alles hervorragend. Nun gebe ich in ein Edit-Feld ein paar Buchstaben ein und bekomme auch entsprechend alle Dateien, die mit dem Text aus dem Edit-Feld beginnen. Nun ja; da beginnt mein nächstes Problem. Wenn ich diese Dateien (z.B. Word-Dokumente) öffnen will, mache ich das ja per ShellExecute. Wie das funktioniert, weiß ich. Wie bekomme ich nun aber den Pfad, wo diese Datei liegt? Wißt ihr, wie ich's meine?

Ich habe als Pfad z.B. "C:\". Nun wird in C:\ und allen Unterordnern gesucht, ich kann aber nur die Dateien starten, die auch in C:\ liegen. Liegt die woanders, geht's nicht. Wer weiß Rat? Ich zumindest mal nicht.. ;-)


Keldorn - Fr 31.10.03 21:41

Speichere den Pfad extra in Zusatzinformationen (additem) oder du übernimmst das Zeichnen der Listbox selber (ondrawitem) und beim Anzeigen zeigst du dann nur den Dateinamen (extractfilename).

Mfg Frank


Terra23 - Fr 31.10.03 23:44

... so ähnlich habe ich mir jetzt auch geholfen. Ich habe eine zusätzliche ListBox in mein Programm gepackt, die jedoch unsichtbar ist. In der speichere ich die Pfade (wenn ich die Dateien auslese) und arbeite dann im Aufruf auch mit ihr. Ist zwar nicht sehr "sauber" programmiert, aber was soll's. Es funktioniert zumindest mal vorerst.. ;-)

Danke für die Hilfe..

:beer:


Keldorn - Sa 01.11.03 09:30

warum eine unsichtbare Listbox und nicht gleich eine normale Stringlist?


Delete - Sa 01.11.03 11:32

Und wenn er das eine sortiert oder was aus der Listbox löscht gibt es Probleme. Aber TStrings kennt ja die Methode AddObject. Etwas Beispeil Code:

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:
type
  TPerson = record
    Name: string[255];
    Vorname: string[255]
  end;
  PPerson = ^TPerson;

procedure TForm1.btnAddClick(Sender: TObject);
var
  Person: PPerson;
begin
  new(person);
  Person^.Name := edtName.Text;
  Person^.Vorname := edtVorname.Text;
  Listbox1.Items.AddObject(IntToStr(Listbox1.Items.Count + 1), TObject(Person));
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  Name, Vorname: string;
begin
  if Listbox1.ItemIndex > -1 then
  begin
    Name := PPerson(Listbox1.Items.Objects[Listbox1.ItemIndex])^.Name;
    Vorname := PPerson(Listbox1.Items.Objects[Listbox1.ItemIndex])^.Vorname;
    ShowMessage(name + ', ' + Vorname);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  Loop: Integer;
begin
  for Loop := 0 downto Listbox1.Items.Count - 1 do
    Dispose(PPerson(Listbox1.Items.Objects[Loop]));
end;

Oder einfach mal nach Suche in: Delphi-Forum, Delphi-Library ADDOBJECT suchen, da gibt es eine schöne, ausführliche Erklärung von Klabautermann.


Terra23 - Sa 01.11.03 12:57

@Luckie: Danke. Ich schaue mir das mal an; löschen kann man aus der ListBox nicht. Das habe ich verboten..

@Keldorn: Mit der StringList habe ich immer so meine Probleme. Ich habe kaum Zeit, mich neben der Schule so intensiv mit Delphi weiterzubilden. Ich kann viele grundlegende Sachen, aber teilweise muss ich immer nochmal schauen. Bis ich so Sachen fehlerfrei aus dem Kopf kann, dauert's halt ein wenig; wie gesagt, gibt viel zu tun in der Schule.. ;-)