Autor |
Beitrag |
Robii
      
Beiträge: 236
|
Verfasst: 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 Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 236
|
Verfasst: 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 Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 236
|
Verfasst: 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 Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: 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  .
Edit: Ach mist, zu langsam.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: 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
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Sa 30.05.09 20:43
ffgorcky hat folgendes geschrieben : | 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  . Die macht nur das mehr, was du so und so nicht brauchst.
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 236
|
Verfasst: Sa 30.05.09 20:53
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 Gausi: Quote- durch Delphi-Tags ersetzt
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 30.05.09 20:56
Was macht das in FormActivate?
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
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Sa 30.05.09 20:57
Und benutze bitte beim nächsten Mal [delphi] statt [quote] Tags, danke.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 30.05.09 20:58
Bei dem Format böte sich TIniFile an, damit geht das einfacher.
|
|
Robii 
      
Beiträge: 236
|
Verfasst: 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 Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 30.05.09 21:11
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 30.05.09 21:11
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 30.05.09 21:16
Wenn Dir das ganze Casten Spaß macht, bitteschön.
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 236
|
Verfasst: 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 Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|