Ich würde zum professionellen

Speichern von Einstellungen sowieso binäre Dateien verwenden, weil da dann ganze Records einfach gespeichert werden können.
Und was das Einlesen angeht: Meist ist es langsamer auf der Festplatte jedesmal die Einstellung zu suchen, als die gesamte Datei hintereinander beim Start in den Arbeitsspeicher zu lesen, und alle Einstellungen in Variablen zu tun.
(Oder dann im Arbeitsspeicher nach den Werten zu suchen)
Was aber Seek und Textfiles angeht, das wird nix, auch mal abgesehen von dem Kompilierfehler, und zwar aus dem einfachen Grund, dass du ja gar nicht
weißt, wo du hinspringen willst, denn Seek braucht den Offset.
Hier ein kleines Beispiel, wie ich das machen würde:
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: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67:
| type TWindowSettings = record PosX, PosY, SizeX, SizeY: Integer; end;
TMySettings = class private fFile: String; public FormSettings: TWindowSettings; ServerIP: String[19]; UseServer: Boolean; TryCount: Integer; constructor Create(uFile: String; LoadAtOnce: Boolean = True); destructor Destroy; override; function LoadFromFile(uFile: String = ''): Boolean; procedure SaveToFile(uFile: String = ''); end;
implementation
constructor TMySettings.Create(uFile: String; LoadAtOnce: Boolean = True); begin Self.fFile := uFile; if LoadAtOnce then Self.LoadFromFile; end;
destructor TMySettings.Destroy; override; begin inherited Destroy; end;
function TMySettings.LoadFromFile(uFile: String): Boolean; var tmpStream: TFileStream; begin Result := False; if FileExists(uFile) then tmpStream := TFileStream.Create(uFile, fmOpenRead) else if FileExists(Self.fFile) then tmpStream := TFileStream.Create(Self.fFile, fmOpenRead) else Exit; tmpStream.ReadBuffer(Self.FormSettings, SizeOf(Self.FormSettings)); tmpStream.ReadBuffer(Self.ServerIP, SizeOf(Self.ServerIP)); tmpStream.ReadBuffer(Self.UseServer, SizeOf(Self.UseServer)); tmpStream.ReadBuffer(Self.TryCount, SizeOf(Self.TryCount)); tmpStream.Free; Result := True; end;
procedure TMySettings.SaveToFile(uFile: String); var tmpStream: TFileStream; begin if uFile <> '' then tmpStream := TFileStream.Create(uFile, fmCreate) else tmpStream := TFileStream.Create(Self.fFile, fmCreate); tmpStream.WriteBuffer(Self.FormSettings, SizeOf(Self.FormSettings)); tmpStream.WriteBuffer(Self.ServerIP, SizeOf(Self.ServerIP)); tmpStream.WriteBuffer(Self.UseServer, SizeOf(Self.UseServer)); tmpStream.WriteBuffer(Self.TryCount, SizeOf(Self.TryCount)); tmpStream.Free; end; |
Hab ich jetzt nicht getestet, sollte aber so gehen...
Benutzung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| TForm1 = class(TForm) private fSettings: TMySettings; end;
Self.fSettings := TMySettings.Create(IncludeTrailingPathDelimiter( ExtractFilePath(ParamStr(0))) + 'Settings.ProgSettings');
Self.fSettings.Free; |