Autor Beitrag
Casket
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 203

Win XP (Home & Pro)
Delphi 2005 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 11.04.05 19:20 
So kannst du das mit einer Stringlist machen:

Speichern
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  MyList: TStringList;
begin
  MyList := TStringList.Create;  // Stringlist erstellen

  MyList.Add(SpinEdit1.Text);  // Wert vom SpinEdit1 hinzufügen
  MyList.Add(SpinEdit2.Text);  // Wert vom SpinEdit2 hinzufügen
  MyList.Add(SpinEdit3.Text);  // Wert vom SpinEdit3 hinzufügen

  MyList.SaveToFile('Optionen.txt'); // StringList speichern
  MyList.Free; // StringList freigeben


Laden
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  MyList: TStringList;
begin
  MyList := TStringList.Create;  // Stringlist erstellen
  MyList.LoadFramFile('Optionen.txt'); // StringList laden

  SpinEdit1.Text := MyList.Strings[0];  // Wert0 SpinEdit1 hinzufügen
  SpinEdit2.Text := MyList.Strings[1];  // Wert1 SpinEdit2 hinzufügen
  SpinEdit3.Text := MyList.Strings[2];  // Wert2 SpinEdit3 hinzufügen

  MyList.Free; // StringList freigeben

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Casket Threadstarter
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 12.04.05 07:10 
Du kannst beim Create nicht nur den Namen der INI-Datei angeben, sondern auch das Verzeichnis davor schreiben. :wink:
Und falls es das gleiche Verzeichnis sein soll, wie bei deiner Anwendung, schreibst du einfach:
ExtractFilePath(ParamStr(0))
vor den Dateinamen.
Casket Threadstarter
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: 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 :D

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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: 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
ausblenden 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
ausblenden 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
MyList.LoadFromFile (ExtractFileName(ParamStr(0))+Edit14.text);					

Ich denke, so ist das besser (ungetestet).
Casket Threadstarter
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: Sa 16.04.05 21:57 
"Der Index der Liste überschreitet das Maximum (1)

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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 17.04.05 06:32 
Achtung, Falle!

ausblenden 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?

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 17.04.05 17:33 
Dann existiert die Datei dort nicht, oder eine andere Applikation greift schon darauf zu.
Casket Threadstarter
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 17.04.05 18:29 
Probier mal das:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 15

Win 98SE, OpenSuse 10.3
D5 Standard
BeitragVerfasst: So 17.04.05 19:25 
Hier hast du die komplette Fehlermeldung.

user defined image
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.auslesen(fh:string;Sender:TObject);
//...
  with TStringlist.Create do begin
   LoadFromFile(fh);
   //diverse Operationen wie if(Count>x)then oder arr[i].z1:=Strings[x];
   Clear;
  end;

Das geht problemlos und zur Not bastel halt mit normalen Dateibefehlen herum, Copy&Paste aus Delphi-Hilfe:
ausblenden 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;