| Autor |
Beitrag |
Casket
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: Mo 11.04.05 17:34
Ich arbeite nu seit längerem an einem Programm, das aber noch lade und Speicher OPtionen braucht. Da mir die Hilfe zu hoch ist in der hinsicht bitte ich um eine langsame und vor allem reproduzierbare Hilfe
Ich hab diverse Spinedits, aus den der Inhalt in eine txt gespeichert (aus dieser geladen) werden soll. Das ganze soll dann ungefähr so aussehen:
Spin1
Spin2
Spin3
usw.
Man könnte an sich einen RIchEdit dafür nehmen, oder?
In dem wird dann so ein Code ein bzw ausgegeben
Und wo ich grad bei speichern und LAden bin: Kann mir das einer auch mit normalen Edits erklären?
Ich danke schon jetzt mal Hilfe und stehe bei Unklarheiten in dem was ich wisen möcht gerne Erklärent zu Stelle
PS: Ini-Programmierung, vllt schon zum hundersten mal, aber ihc kann mit copierten Quellcode nichts anfangen(reproduzierbarkeit).
Im endeffekt kommen ich da dann aber fast mit Edits aus, ich brüchte nur eine Erklärung für Combo Boxen, sprich wie gebe ich weitere Auswahlmöglichkeiten an, wie adressiere ich diese für die Procedure, und wie speicher ich die Auswahl in der Ini.
da ich totaler Laie bin in dem Bereich von Delphi bin ist das wirklich von der Basis hoch
|
|
fvolk
      
Beiträge: 203
Win XP (Home & Pro)
Delphi 2005 Pers
|
Verfasst: Mo 11.04.05 18:19
Vielleicht hilft folgendes Tutorial zum Thema Inis: www.mydelphi.de/wbb2/tut1.php. Macht auf mich jedenfalls einen vernünftigen Eindruck.
Sonst gibt's zum Thema "Speichern" nicht viel zu sagen.
1. Schau nach, was gespeichert werden soll und welchen Datentyp es hat. (z.B. EditXYZ.Text ist von Typ String)
2. Schau nach, wie du es speichern willst. (z.B. in Ini-Dateien)
3. Schau nach, wie das geht. (z.B. Speichern eines Strings in einer Ini-Datei)
4. Schau nach, wie du es wieder laden kannst (z.B. Laden eines Strings aus einer Ini-Datei)
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 11.04.05 19:20
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Casket 
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: Mo 11.04.05 23:13
Ich bedanke mich bei fvolk für die Hilfe mit den Inis, offenes Problem ist nur das die Ini im WOndows Verzeichnis landet. Ich will hab eine eigne Ini im selben Ordner benutzen.
Mein Dank an GTA für die Idee mit den Stringlists: Offenes Problem ist nur noch das ich so ein Speicher Menü wie bei Editor oder Word usw weiter brauche. Sprich wo man Namen selbst bestimmen kann. GIlt paralell natürlich für Laden.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 12.04.05 07:10
Du kannst beim Create nicht nur den Namen der INI-Datei angeben, sondern auch das Verzeichnis davor schreiben.
Und falls es das gleiche Verzeichnis sein soll, wie bei deiner Anwendung, schreibst du einfach:
ExtractFilePath(ParamStr(0))
vor den Dateinamen.
|
|
Casket 
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: Mi 13.04.05 18:56
thx jasocul. Auch wenn es bei mir nicht aussieht als ob die Werte schreibt, laden tut er sie trotzdem, und das zählt
Bleibt nur das Proble mit dem Laden/Speichern der Stringlists: Ein Fenster wo man Verzeichnis (Spezial-Verzeichnis im Hauptordner) und Name selbst bestimmt. Momentan landet es im Hauptverzeichnis unter einem festen Namen, ich will das aber als Austausch Format für eine Community benutzen und da sind unt. Dateinamen unerläßlich.
Dazu kommt in dem Zusamenhang die Frage wie ich beim Speichern den Namen aus einem Edit ziehen kann
Bsp: In Edit1 steht der String Casket->Speichern->eingestellter Name: Casket.txt
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 14.04.05 08:36
Da wirst du dich wohl mit Stringoperationen beschäftigen müssen. Auf meiner HP (unter Tutorials) findest du eine Übersicht mit Source-Demo. Wenn ich es richtig beurteile, brauchst du aber nur die Funktionen Pos und copy.
|
|
Casket 
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: Fr 15.04.05 18:06
Ich rätsel immer noch rum mit dem Speichern:
Deine Stringoperationen helfen mir nicht wirklich weiter. ZUmal mir nicht einleuchtet warum ich sie bei dem Prob brauche.
Ich habe das speichern mit auslesen bereits hingekriegt
Delphi-Quelltext 1:
| MyList.SaveToFile(Acc.text+'.txt'); |
Das erzeugt eine .txt mit Namen des Strings der im Edit 'Acc' eingetragen ist.
Ich habe dann versucht das 1 zu 1 auf das Öffnen zu übetragen
Delphi-Quelltext 1:
| MyList.LoadFromFile(Edit14.text); |
Kriege aber die Fehlermeldung 'Datei kann nicht geöffnet werden'
Ich hab in dem zusammenhang schon ne paar Sachen probiert
Delphi-Quelltext 1: 2:
| MyList.LoadFromFile ('ExtractFileName(ParamStr(0)) Edit14.text'); MyList.LoadFromFile ('ExtractFileName(ParamStr(Edit14.text))'); |
krieg aber immer wieder Fehlermeldungen oder er kompiliert garnicht erst.
Kann mir bite mal wer sagen wo der Fehler liegt
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 15.04.05 19:27
| Zitat: | | Bsp: In Edit1 steht der String Casket->Speichern->eingestellter Name: Casket.txt |
Deshalb dacht ich das.
Zu deinem Problem:
Delphi-Quelltext 1:
| MyList.LoadFromFile (ExtractFileName(ParamStr(0))+Edit14.text); |
Ich denke, so ist das besser (ungetestet).
|
|
Casket 
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: Sa 16.04.05 21:57
"Der Index der Liste überschreitet das Maximum (1)
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 TForm1.Button3Click(Sender: TObject); begin MyList := TStringList.Create; MyList.LoadFromFile(ExtractFileName(ParamStr(0))+Edit14.text);
Name.text:=MyList.strings[1]; strahlen:=strtofloat(Name.text); Name.text:=MyList.strings[2]; rak:=strtofloat(Name.text); Name.text:=MyList.strings[3]; plasma:=strtofloat(Name.text); Name.text:=MyList.strings[4]; he:=strtofloat(Name.text); Name.text:=MyList.strings[5]; bio:=strtofloat(Name.text); Name.text:=MyList.strings[6]; am:=strtofloat(Name.text); Name.text:=MyList.strings[7]; metall:=strtofloat(Name.text); Name.text:=MyList.strings[8]; schild:=strtofloat(Name.text); Name.text:=MyList.strings[9]; carbon:=strtofloat(Name.text); Name.text:=MyList.strings[10]; tele:=strtofloat(Name.text); Name.text:=MyList.strings[11]; sk:=strtofloat(Name.text); Name.text:=MyList.strings[12]; nuk:=strtofloat(Name.text); Name.text:=MyList.strings[13]; ion:=strtofloat(Name.text); Name.text:=MyList.strings[14]; hyp:=strtofloat(Name.text); Name.text:=MyList.strings[15]; frachtb:=strtofloat(Name.text);
Name.text:=MyList.strings[0]; MyList.Free;
end; |
Das ist der Quellcode für die fragliche Prozedur. Das ganze Gewühle mit Name.text hat die Bewandnis das ich die Strings anders nicht in Variablen kriege
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 17.04.05 06:32
Achtung, Falle!
Delphi-Quelltext 1: 2:
| Name.Text := MyList.Strings[0]; Strahlen := StrToFloat(Name.Text); |
EDIT: Ahso, das haste doch. Habs übersehen. Sry.
Wieso machst du das über ein Edit (?) und nicht gleich direkt?
Delphi-Quelltext 1: 2: 3: 4:
| Strahlen := StrToFloat(MyList.Strings[1]); Rak := StrToFloat(MyList.Strings[2]); Plasma := StrToFloat(MyList.Strings[3]); He := StrToFloat(MyList.Strings[4]); |
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Casket 
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: So 17.04.05 16:45
SO ich hab das grade auf deine verkürzte Variante umgestellt.
Krieg aber noch immer die gleiche Fehlermeldung
"Der Index der Liste überschreitet das Maximum (1)"
Wenn ich anstastt 0 höhere Zahlen einsetzte krieg ich die Fehlermeldung
"Die Datei kann nicht geöffnet werden"
Komilieren tut Delphi das ganze aber ohne zu murren
Ich hab Win98SE wenn das irgendwie wichtig ist.
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:
| procedure TForm1.Button3Click(Sender: TObject); begin MyList := TStringList.Create; MyList.LoadFromFile(ExtractFileName(ParamStr(0))+Edit14.text);
Name.text:=MyList.strings[0]; strahlen:=strtofloat(MyList.strings[1]); rak:=strtofloat(MyList.strings[2]); plasma:=strtofloat(MyList.strings[3]); he:=strtofloat(MyList.strings[4]); bio:=strtofloat(MyList.strings[5]); am:=strtofloat(MyList.strings[6]); metall:=strtofloat(MyList.strings[7]); schild:=strtofloat(MyList.strings[8]); carbon:=strtofloat(MyList.strings[9]); tele:=strtofloat(MyList.strings[10]); sk:=strtofloat(MyList.strings[11]); nuk:=strtofloat(MyList.strings[12]); ion:=strtofloat(MyList.strings[13]); hyp:=strtofloat(MyList.strings[14]); frachtb:=strtofloat(MyList.strings[15]);
MyList.Free; end; |
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: So 17.04.05 16:52
| Du hast geschrieben: | | ExtractFileName(ParamStr(0)) |
| Du hast aber gemeint: | | ExtractFilePath(ParamStr(0)) |
Aber am besten lässt du das einfach weg...
(PS: Was steht denn genau in deinem Edit14? Wo befindet sich deine Textdatei?)
|
|
Casket 
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: So 17.04.05 17:27
Als obei einfach weglassen krieg "Datei kann nicht geöffnet werden"
In Edit14 steht eine Einfach Stringangabe, die er als Dateinamen nehmen soll.
Die Dateien mit denen das passieren soll liegen im sleben Ordner wie das Programm
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: So 17.04.05 17:33
Dann existiert die Datei dort nicht, oder eine andere Applikation greift schon darauf zu.
|
|
Casket 
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: So 17.04.05 18:19
Sie liegen da, einmal als .txt und einmal ohne erweiterung
Und nebenbei arbeite ich auch nicht in den Dateien rum
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: So 17.04.05 18:29
Probier mal das:
Delphi-Quelltext 1: 2:
| if not FileExists('MeineDatei') then ShowMessage('Ist nicht da!'); |
PS: Wie lautet die ganze Fehlermeldung. "Konnte nicht geöffnet werden. ".. Die Fehlermeldung geht noch weiter 
|
|
Casket 
Hält's aus hier
Beiträge: 15
Win 98SE, OpenSuse 10.3
D5 Standard
|
Verfasst: So 17.04.05 19:25
Hier hast du die komplette Fehlermeldung.

|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: So 17.04.05 19:47
Hmm, merkwürdig. Mit Notepad kannst du die Datei öffnen?
Andere Dateien kannst du öffnen? Bekommst du z.B. mit LoadFromFile(paramstr(0)); dieselbe Fehlermeldung?
|
|
prote
      
Beiträge: 17
|
Verfasst: So 17.04.05 20:19
Sieht so aus, als würde schlicht der Pfad/Dateiname falsch sein. Kannst das Ding ja mal sicherheitshalber in ein PChar umwandeln ...
Ich hab mal eben gebuddelt und derartiges schon mal ähnlich in einem Programm drin gehabt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.auslesen(fh:string;Sender:TObject); with TStringlist.Create do begin LoadFromFile(fh); Clear; end; |
Das geht problemlos und zur Not bastel halt mit normalen Dateibefehlen herum, Copy&Paste aus Delphi-Hilfe:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var F: TextFile;
begin AssignFile(F, 'NEUDATEI.$$$'); Rewrite(F); Writeln(F, 'Es wurde eine Datei angelegt, die diesen Text enthält...'); CloseFile(F); end; |
|
|