Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi .ini wird nicht geladen (https://www.delphipraxis.net/47042-ini-wird-nicht-geladen.html)

tinibeenie 5. Jun 2005 16:45


.ini wird nicht geladen
 
Hallo zusammen!

Ich möchte bestimmte Angaben aus Edits speichern und beim nächsten Laden wieder anzeigen lassen. Leider habe ich mit Inis noch nicht so viel Erfahrung. Rausgefunden hab ich immerhin schonmal, dass die Daten richtig in der Ini gespeichert werden, nur werden sie beim Öffnen des Programms nicht geladen oder stehen zumindest nicht in den Edits drin. Also liegt der Fehler wahrscheinlich in der Create-Procedure.

Hier der Code:

Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
  var IniDat:TIniFile;
begin
  IniDat:=TIniFile.Create('.\Text.Ini');
  with IniDat do
  begin
    WriteString('Text', 'Edit1', Edit1.Text);
    WriteString('Text', 'Edit2', Edit2.Text);
    WriteString('Text', 'Edit3', Edit3.Text);
    WriteString('Text', 'Edit4', Edit4.Text);
    WriteString('Text', 'Edit5', Edit5.Text);
    WriteString('Text', 'Edit6', Edit6.Text);
    WriteString('Text', 'Edit7', Edit7.Text);
    WriteString('Text', 'Edit8', Edit8.Text);
    WriteString('Text', 'Edit9', Edit9.Text);
    WriteString('Text', 'Edit10', Edit10.Text);
    WriteString('Text', 'Edit11', Edit11.Text);
    WriteString('Text', 'Edit12', Edit12.Text);
    WriteString('Text', 'Edit13', Edit13.Text);
    WriteString('Text', 'Edit14', Edit14.Text);
    WriteString('Text', 'Edit15', Edit15.Text);
    WriteString('Text', 'Edit16', Edit16.Text);
    WriteString('Text', 'Edit17', Edit17.Text);
    WriteString('Text', 'Edit18', Edit18.Text);
    WriteString('Text', 'Edit19', Edit19.Text);
  end;
  IniDat.Free;
end;
und

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
  var IniDat:TIniFile;
begin
  IniDat:=TIniFile.Create('.\Text.Ini');
  with IniDat do
  begin
    Edit1.Text := ReadString('Text', 'Edit1', Edit1.Text);
    Edit2.Text := ReadString('Text', 'Edit2', Edit2.Text);
    Edit3.Text := ReadString('Text', 'Edit3', Edit3.Text);
    Edit4.Text := ReadString('Text', 'Edit4', Edit4.Text);
    Edit5.Text := ReadString('Text', 'Edit5', Edit5.Text);
    Edit6.Text := ReadString('Text', 'Edit6', Edit6.Text);
    Edit7.Text := ReadString('Text', 'Edit7', Edit7.Text);
    Edit8.Text := ReadString('Text', 'Edit8', Edit8.Text);
    Edit9.Text := ReadString('Text', 'Edit9', Edit9.Text);
    Edit10.Text := ReadString('Text', 'Edit10', Edit10.Text);
    Edit11.Text := ReadString('Text', 'Edit11', Edit11.Text);
    Edit12.Text := ReadString('Text', 'Edit12', Edit12.Text);
    Edit13.Text := ReadString('Text', 'Edit13', Edit13.Text);
    Edit14.Text := ReadString('Text', 'Edit14', Edit14.Text);
    Edit15.Text := ReadString('Text', 'Edit15', Edit15.Text);
    Edit16.Text := ReadString('Text', 'Edit16', Edit16.Text);
    Edit17.Text := ReadString('Text', 'Edit17', Edit17.Text);
    Edit18.Text := ReadString('Text', 'Edit18', Edit18.Text);
    Edit19.Text := ReadString('Text', 'Edit19', Edit19.Text);
  end;
  IniDat.Free;
end;
Kann mir jemand sagen, was ich da falsch gemacht habe? Irgendwie finde ich den Fehler nicht. :(

Vielen Dank schonmal!

100nF 5. Jun 2005 16:49

Re: .ini wird nicht geladen
 
hi,

Zitat:

IniDat:=TIniFile.Create('.\Text.Ini');
entweder müsste das so heissen:
Delphi-Quellcode:
IniDat:=TIniFile.Create('..\Text.Ini');
oder so:
Delphi-Quellcode:
IniDat:=TIniFile.Create('Text.Ini');
musst du bei beiden proceduren ändern

ich frage mich aber, wiso die ini datei trotzdem beschrieben wird :gruebel:

gruss
urbanbruhin

malo 5. Jun 2005 16:52

Re: .ini wird nicht geladen
 
Also, bei mir funktionieren beide Codes einwandfrei :gruebel:

Luckie 5. Jun 2005 16:53

Re: .ini wird nicht geladen
 
Zitat:

Zitat von malo
Also, bei mir funktionieren beide Codes einwandfrei :gruebel:

Aber nur, weil das Arbeitsverzeichnis nicht geändeert wird im Laufe des Programmesm, deswegen immer den kompletten absoluten Pafd angeben.

Speedmaster 5. Jun 2005 16:54

Re: .ini wird nicht geladen
 
Delphi-Quellcode:
IniDat:=TIniFile.Create('.\Text.Ini');
Sollte funktionieren!

Sharky 5. Jun 2005 16:55

Re: .ini wird nicht geladen
 
Wenn schon dann richtig ;-)
Ich denke mal die Text.Ini soll im selben Verzeichniss wie das Programm liegen. Da reicht es aber nicht einfach nur 'Text.Ini' zu schreiben. Das aktuelle Verzeichniss kann nämlich ein ganz anderes als das Programmverzeichniss sein.

Ergo:
Delphi-Quellcode:
  IniDat:=TIniFile.Create(ExtractFileDir(ParamStr(0)) + '\Text.Ini');

100nF 5. Jun 2005 17:02

Re: .ini wird nicht geladen
 
Zitat:

Das aktuelle Verzeichniss kann nämlich ein ganz anderes als das Programmverzeichniss sein.
aber ich denke nicht, dass es schon beim oncreate geändert wurde...

alcaeus 5. Jun 2005 17:05

Re: .ini wird nicht geladen
 
Zitat:

Zitat von urbanbruhin
aber ich denke nicht, dass es schon beim oncreate geändert wurde...

Denkste. Verknuepfung aufs Programm erstellen, dort beim Ausfuehrungsverzeichnis ein anderes Verzeichnis angeben, und fertig ;)

Greetz
alcaeus

Luckie 5. Jun 2005 17:05

Re: .ini wird nicht geladen
 
Bei einer Verknüpfun, wo ich das Arbeitsverzeicnis geändert habe schon.

100nF 5. Jun 2005 17:08

Re: .ini wird nicht geladen
 
Zitat:

Bei einer Verknüpfun, wo ich das Arbeitsverzeicnis geändert habe schon.
stimmt... da habe ich mal wieder einen schönen blödsinn geschrieben...


aber es ist schon komisch dass der code bei tinibeenie nicht läuft... :gruebel:

marabu 5. Jun 2005 17:21

Re: .ini wird nicht geladen
 
Richtig gut wird die Sache, wenn die Ini-Datei dahin geschrieben wird, wohin sie unter WIN32 gehört. Und die Zuweisungsorgie lässt sich abkürzen.

Delphi-Quellcode:
uses
  IniFiles;

resourcestring
  Env_AppData = 'APPDATA';

function GetEnv (varName: string): string;
var
  buffer: array [byte] of char;
begin
  StrPCopy (@buffer, varName);
  SetString (Result, buffer, GetEnvironmentVariable (@buffer, buffer, SizeOf (buffer)));
end;

function GetAppData: string;
begin
  Result := GetEnv(ENV_APPDATA);
end;

function TDemoForm.IniName: string;
begin
  Result := IncludeTrailingPathDelimiter(GetAppData)
    + ChangeFileExt(ExtractFileName(Application.ExeName), '.ini');
end;

procedure TDemoForm.FormCreate(Sender: TObject);
var
  ini: TIniFile;
  i: integer;
begin
  ini := TInifile.Create(IniName);
  for i := 0 to ComponentCount - 1 do begin
    if Components[i] is TEdit then
      with Components[i] as TEdit do
        Text := ini.ReadString(self.Name, Name, Text);
  end;
  ini.Free;
end;

procedure TDemoForm.FormDestroy(Sender: TObject);
var
  ini: TIniFile;
  i: integer;
begin
  ini := TInifile.Create(IniName);
  for i := 0 to ComponentCount - 1 do begin
    if Components[i] is TEdit then
      with Components[i] as TEdit do
        ini.WriteString(self.Name, Name, Text);
  end;
  ini.Free;
end;
Grüße vom marabu

tinibeenie 5. Jun 2005 17:22

Re: .ini wird nicht geladen
 
Also, ich hab's jetzt mit diesen verschiedenen Codes probiert:

Delphi-Quellcode:
IniDat:=TIniFile.Create('..\Text.Ini');
und
Delphi-Quellcode:
IniDat:=TIniFile.Create('\Text.Ini');
dadurch wird aber noch nicht mal die ini geändert.

Dann hab ich's noch hiermit probiert:
Delphi-Quellcode:
IniDat:=TIniFile.Create(ExtractFileDir(ParamStr(0)) + '\Text.Ini');
und
Delphi-Quellcode:
IniDat:=TIniFile.Create('C:\Programme\Borland\Delphi5\Projects\Zinsdifferenzen\Text.Ini');
ist wie mit
Delphi-Quellcode:
IniDat:=TIniFile.Create('.\Text.Ini');
die ini wird geschrieben, aber nicht beim Programmstart eingefügt.

Das komische ist ja auch, dass es noch funktioniert hat, als ich nur ein Edit hatte. Als ich dann die anderen 18 zugefügt hatte, hat's nicht mehr gefunzt. Hab sie dann wieder gelöscht, hat dann aber trotzdem nicht wieder gefunzt. :gruebel:

Luckie 5. Jun 2005 17:29

Re: .ini wird nicht geladen
 
Zeig mal den Code vom Programmstart.

@marabu: Man sollte aber besser die API Funktion ( http://www.luckie-online.de/Delphi/S...ialFolder.html ) nehmen und nicht mit den Umgebungsvariablen arbeiten, da es unter Windows9x zu Problemen kommen kann.

tinibeenie 5. Jun 2005 17:40

Re: .ini wird nicht geladen
 
Das ist die vollständige Unit:

Delphi-Quellcode:
unit Zinsdifferenzen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ToolWin, ComCtrls, Buttons, Grids, IniFiles;

type
  TForm1 = class(TForm)
    Image1: TImage;
    ToolBar1: TToolBar;
    GroupBox3: TGroupBox;
    Label42: TLabel;
    Label43: TLabel;
    Label46: TLabel;
    Label47: TLabel;
    GroupBox1: TGroupBox;
    Label36: TLabel;
    Label37: TLabel;
    Label38: TLabel;
    Label39: TLabel;
    Label40: TLabel;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit13: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Label41: TLabel;
    Label44: TLabel;
    Label45: TLabel;
    Label48: TLabel;
    Label49: TLabel;
    GroupBox2: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Button1: TButton;
    Label50: TLabel;
    Edit17: TEdit;
    Edit18: TEdit;
    Edit19: TEdit;
    GroupBox5: TGroupBox;
    Label4: TLabel;
    Label5: TLabel;
    Label51: TLabel;
    Label52: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label53: TLabel;
    Label54: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label1: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    GroupBox4: TGroupBox;
    Edit14: TEdit;
    Edit12: TEdit;
    Label20: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    GroupBox6: TGroupBox;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Edit20: TEdit;
    Edit21: TEdit;
    Edit22: TEdit;
    Label19: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    GroupBox7: TGroupBox;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Edit23: TEdit;
    Edit24: TEdit;
    Edit25: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Zinsdifferenzen2, Zinsdifferenzen3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (edit17.text='dd') or (edit18.text='mm') or (edit19.text='yyyy') then showmessage('Das Datum ist nicht eingetragen!')
    else
  begin
    form1.Visible:=false;
    if radiobutton1.checked then form2.visible:=true
      else form3.visible:=true;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
  var IniDat:TIniFile;
begin
  IniDat:=TIniFile.Create('.\Text.Ini');
  with IniDat do
  begin
    WriteString('Text', 'Edit1', Edit1.Text);
    WriteString('Text', 'Edit2', Edit2.Text);
    WriteString('Text', 'Edit3', Edit3.Text);
    WriteString('Text', 'Edit4', Edit4.Text);
    WriteString('Text', 'Edit5', Edit5.Text);
    WriteString('Text', 'Edit6', Edit6.Text);
    WriteString('Text', 'Edit7', Edit7.Text);
    WriteString('Text', 'Edit8', Edit8.Text);
    WriteString('Text', 'Edit9', Edit9.Text);
    WriteString('Text', 'Edit10', Edit10.Text);
    WriteString('Text', 'Edit11', Edit11.Text);
    WriteString('Text', 'Edit12', Edit12.Text);
    WriteString('Text', 'Edit13', Edit13.Text);
    WriteString('Text', 'Edit14', Edit14.Text);
    WriteString('Text', 'Edit15', Edit15.Text);
    WriteString('Text', 'Edit16', Edit16.Text);
    WriteString('Text', 'Edit17', Edit17.Text);
    WriteString('Text', 'Edit18', Edit18.Text);
    WriteString('Text', 'Edit19', Edit19.Text);
  end;
  IniDat.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
  var IniDat:TIniFile;
begin
  IniDat:=TIniFile.Create('.\Text.Ini');
  with IniDat do
  begin
    Edit1.Text := ReadString('Text', 'Edit1', Edit1.Text);
    Edit2.Text := ReadString('Text', 'Edit2', Edit2.Text);
    Edit3.Text := ReadString('Text', 'Edit3', Edit3.Text);
    Edit4.Text := ReadString('Text', 'Edit4', Edit4.Text);
    Edit5.Text := ReadString('Text', 'Edit5', Edit5.Text);
    Edit6.Text := ReadString('Text', 'Edit6', Edit6.Text);
    Edit7.Text := ReadString('Text', 'Edit7', Edit7.Text);
    Edit8.Text := ReadString('Text', 'Edit8', Edit8.Text);
    Edit9.Text := ReadString('Text', 'Edit9', Edit9.Text);
    Edit10.Text := ReadString('Text', 'Edit10', Edit10.Text);
    Edit11.Text := ReadString('Text', 'Edit11', Edit11.Text);
    Edit12.Text := ReadString('Text', 'Edit12', Edit12.Text);
    Edit13.Text := ReadString('Text', 'Edit13', Edit13.Text);
    Edit14.Text := ReadString('Text', 'Edit14', Edit14.Text);
    Edit15.Text := ReadString('Text', 'Edit15', Edit15.Text);
    Edit16.Text := ReadString('Text', 'Edit16', Edit16.Text);
    Edit17.Text := ReadString('Text', 'Edit17', Edit17.Text);
    Edit18.Text := ReadString('Text', 'Edit18', Edit18.Text);
    Edit19.Text := ReadString('Text', 'Edit19', Edit19.Text);
  end;
  IniDat.Free;
end;

end.
und so sieht dann die ini aus (mit irgendwelchen Werten):
Delphi-Quellcode:
[Text]
Edit1=1
Edit2=2
Edit3=3
Edit4=4
Edit5=5
Edit6=6
Edit7=7
Edit8=8
Edit9=9
Edit10=18
Edit11=19
Edit12=17
Edit13=20
Edit14=16
Edit15=21
Edit16=22
Edit17=dd
Edit18=mm
Edit19=yyyy
@Luckie: Meintest du das mit "Programmstart"?

Luckie 5. Jun 2005 17:47

Re: .ini wird nicht geladen
 
Da hast du ja immer noch
Delphi-Quellcode:
IniDat:=TIniFile.Create('.\Text.Ini');
drinne stehen. Wir haben dir doch schon ein paar mal gesagt, das sollst du nicht machen.

tinibeenie 5. Jun 2005 17:51

Re: .ini wird nicht geladen
 
Sorry, aber ich hab die ganzen Vorschläge ja schon ausprobiert und die waren genauso bzw. haben gar nicht funktioniert. Welches von den ganzen Vorschlägen soll ich denn jetzt benutzen?

Luckie 5. Jun 2005 17:53

Re: .ini wird nicht geladen
 
Den wo der absolute Pfad angegeben wird. Und ich kann dir sagen, dass es so funktioniert, da bin ich mir hundertprozentig sicher und wenn es das bei dir nicht tut, dann hast du irgendwo noch einen Fehler. Geh doch einfach mal mit F7 Schrittweise durch deinen Code.

tinibeenie 5. Jun 2005 18:24

Re: .ini wird nicht geladen
 
Es geht! :bouncing4:
Es lag daran, dass die OnCreate-Prozedure beim Aufrufen des Programms nicht durchlaufen wurde. Hab sie jetzt nochmal neu gemacht und jetzt funktioniert alles einwandfrei (mit './Text.ini' und mit absolutem Pfad)!

Also noch mal danke an alle (besonders an Luckie)!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz