Autor Beitrag
Robii
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Sa 30.05.09 20:12 
Hey,

in meinem Programm kann man Wegpunkte als "WP"+"EingegebenerName"+".wap" speichern.

Bei Programm-Start, möchte ich, das alle Wegpunkte im Ordner der Programm-Exe gelesen und in Strings gespeichert werden, damit ich sie später anzeigen lassen kann.

Jetzt die Frage, wie kann ich Dateinamen in Strings speichern, ohne zu wissen, wie die Datei heißt, aber ihren AufenthaltsOrt.

Grüße.

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.05.09 20:14 
Siehe FAQ, da gibts auch was zum Suchen von Dateien...
www.delphi-library.de/viewtopic.php?p=5021
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Sa 30.05.09 20:21 
Vielen Dank, das hat mir sehr geholfen!

Bleibt nur noch eine Frage, ich möchte jede Datei die gefunden wird ( also den Dateinamen ) einem String zu ordnen, damit ich sie später anzeigen lassen kann. Wie mache ich das ?

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.05.09 20:25 
Nimm doch einen Nachfahren von TStrings. Ansonsten müsstest Du ja wissen, wieviele Dateien gefunden werden und entsprechend viele Variablen bereitstellen.
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Sa 30.05.09 20:35 
Was genau meinst du mit Nachfahren von TStrings? Sorry, kenne mich da nicht gut aus.

Ich weiß nicht wie viele Dateien gefunden werden, da man diese im Programm beliebig häufig erstellen kann.

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.05.09 20:38 
Erstelle eine TStringList und übergib die. Das ist ein Nachfahre von TStrings. Danach hast du darin die Liste von Dateien und kannst diese per Schleife durchgehen.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Sa 30.05.09 20:39 
Wie wäre es mit einer TStringList?

Und: Obwohl das Eingabefeld bei dir sehr klein zu sein scheint, brauchst du nicht, wenn du am Ende bist, einen Zeilenumbruch zu machen. Ich habe ein sehr hohe Auflösung und bei mir ist z. B. bei deinem ersten Post 70% des Bildschirmes leer :wink: .

Edit: Ach mist, zu langsam.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 30.05.09 20:40 
Also ich hätte das ganze jetzt eher mit einer FileListBox gemacht, wo man nur das anzuzeigende Verzeichnis angibt und dann alle darin liegenden Dateien sieht.
Die müsste man dann doch nur noch mit einer For-Schleife durchgehen und sich damit alle merken.
Zum merken könntest Du sie ja zum Beispiel auch in ein Memo schreiben, wenn Dir die FileListBox nicht schon reicht.


Zuletzt bearbeitet von ffgorcky am Sa 30.05.09 20:44, insgesamt 1-mal bearbeitet
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Sa 30.05.09 20:43 
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Also ich hätte das ganze jetzt eher mit einer FileListBox gemacht, wo man nur das anzuzeigende Verzeichnis angibt und dann alle darin liegenden Dateien sieht.
Die müsste man dann doch nur noch mit einer For-Schleife durchgehen und sich damit alle merken.

Völlig unnötig, hier eine Komponente einzusetzten :motz: . Die macht nur das mehr, was du so und so nicht brauchst.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.05.09 20:51 
Mal abgesehen davon, dass diese Komponente nicht umsonst unter Win 3.1 steht... Von Windows 3.1 stammt die nämlich, und das ist mittlerweile fast 20 Jahre alt...
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Sa 30.05.09 20:53 
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:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
Procedure FindFiles (aPath, aFindMask: String; aWithSub: Boolean; aResult: tStrings);
Var
  FindRec: tSearchRec;
Begin

  If (aPath = ''or (aFindMask = ''or Not Assigned (aResult) Then
    Exit;


  If aPath[Length (aPath)] <> '\' Then
    aPath := aPath + '\';


  If FindFirst (aPath + aFindMask, faAnyFile, FindRec) = 0 Then
    Repeat
      If (FindRec.Name <> '.'and (FindRec.Name <> '..'Then

        aResult.Add (aPath + FindRec.Name);

    Until FindNext (FindRec) <> 0;

  FindClose (FindRec);


  If Not aWithSub Then
    Exit;


  If FindFirst (aPath + '*.*', faAnyFile, FindRec) = 0 Then
    Repeat
      If (FindRec.Name <> '.'and (FindRec.Name <> '..'Then
        If Boolean (FindRec.Attr and faDirectory) Then
          FindFiles (aPath + FindRec.Name, aFindMask, aWithSub, aResult);
    Until FindNext (FindRec) <> 0;

   FindClose (FindRec);
End;

procedure TForm1.FormActivate(Sender: TObject);
begin
AssignFile(Waypoint,WPpath+'WP'+Dateiname[1]+'.wap');
Reset(Waypoint);
try
ReadLn(Waypoint, WP_XS);
WP_XS := copy(WP_XS, pos('=', WP_XS), length(WP_XS));
ReadLn(Waypoint, WP_XS);
WP_YS := copy(WP_YS, pos('=', WP_YS), length(WP_YS));
finally
CloseFile(Waypoint);
DNA[2] := DNA[2]+1;
WP_Mar.Left := strtoint(WP_Xs);
WP_Mar.Height := strtoint(WP_Ys);
end;
end;


Entschuldigt mich, aber irgendwie bin ich grade verwirrt.

Ich erkläre noch mal, was ich genau erreichen möchte.

Also, im Programm kann man Wegpunkte erzeugen. Diese werden in einer .wap Datei abgespeichert unter Folgendem Format:

Name=Name des Wegpunktes
X=X-Koordinate des WPs
Y=Y-Koordinate des WPs
Tooltip=Info zum WP

Beim Start des Programms, soll dieses überprüfen, ob Wegpunkte vorhanden sind. Wenn welche vorhanden sind, soll es alle Infos die es zum WP gibt in Variablen speichern, und diesen erstellen ( X & Y - Koordinate werden benötigt, um die Position des Pfeils festzulegen ).

Der Code oben ist das was ich bis jetzt habe aber nicht funktioniert, weil:

Mal angenommen er findet eine Datei und versucht die X- & Y-Koordinaten zu lesen und in einem Integer zu speichern, er immer versucht X=123 zuspeichern anstatt nur 123. Wieso das?

Ich blicke ebenfalls noch nicht ganz, wie ich das mit den Dateinamen machen soll, bin noch nicht soo lange bei Delphi.

Hoffe auf Hilfe,
Vielen Dank schonmal
und schöne Grüße.

Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.05.09 20:56 
Was macht das in FormActivate? :shock:
Willst du die Liste wirklich jedesmal aktualisieren, wenn du das Fenster anklickst, nachdem ein anderes Fenster aktiv war?
Sonst nimm lieber OnShow. Das wird wie der Name schon sagt beim Anzeigen ausgelöst.

So ist der Aufruf von FindFiles?

Und für das Auslesen deiner Dateien kannst du ebenfalls wieder eine TStringList nehmen. Da gibts so schöne Sachen wie Values. ;-)
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Sa 30.05.09 20:57 
Und benutze bitte beim nächsten Mal [delphi] statt [quote] Tags, danke.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.05.09 20:58 
Bei dem Format böte sich TIniFile an, damit geht das einfacher.
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Sa 30.05.09 21:08 
Hey,
ich dachte FormActivate ist das, wenn man das Programm startet also quasi aktiviert ? oder nicht?

Leider verstehe ich nicht was ihr meint mit TIniFile ?

Ich kenne mich da wirklich nicht gut aus, wäre euch sehr dankbar, wenn ihr mir einen Beispiel-Code schreibt.

Grüße.

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.05.09 21:11 
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.05.09 21:11 
Du machst ja schon wieder Zeilenumbrüche... Langsam nervt das...
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
ich dachte FormActivate ist das,
wenn man das Programm startet also
quasi aktiviert ? oder nicht?
Hast du bei deinem Delphi keine Hilfe?
Zitat:
Mit OnActivate können Sie bestimmte Operationen durchführen, sobald das Formular den Fokus erhält (wenn es beispielsweise angeklickt wird).


user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Leider verstehe ich nicht was ihr meint
mit TIniFile ?
Ich würde eine einfache TStringList nehmen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  FileContents: TStringList;
begin
  FileContents := TStringList.Create;
  try
    FileContents.LoadFromFile...
    ShowMessage(FileContents.Values['X']);
    ShowMessage(FileContents.Values['Y']);
    ...
  finally
    FileContents.Free;
  end;
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.05.09 21:16 
Wenn Dir das ganze Casten Spaß macht, bitteschön.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.05.09 21:19 
Eines der Probleme bei TIniFile ist, dass es (zumindest in Delphi 2006) auf Routinen in Windows aufsetzt, die nur noch zur 16-Bit-Kompatibilität mitgeschleppt werden in der Windows API (steht explizit in der Doku). Und mit einer neuen Windowsversion kann es irgendwann sein, dass die schlicht nicht mehr funktionieren. Insbesondere durch die neue Virtualisierungslösung ab Windows 7...
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Sa 30.05.09 21:24 
Also,
erstmal sorry, das ich mich total doof anstelle. Aber habe soetwas noch nie gemacht.

Versuche grade mein Schul-Delphi zuerweitern.

Zuerst muss ich ja die Dateinamen der WPs herrausfinden und abspeichern. Am Besten wäre, wenn ich jeden Dateiname in einen String mit Hilfe von Arrays abspeicher, damit ich selbst nicht die Übersicht verliere.

Wenn das fertig ist, muss ich jede Datei einzelnd öffnen und ihre Werte übertragen.

Kann mir jemand das bitte Schritt für Schritt erklären? Ich versteh kaum etwas von dem was ihr sagt, trotz googeln und suchen von Tutorials.

Grüße & Danke für eure Geduld

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.