Delphi 7 - 保存到特定的 .INI 文件名
Delphi 7 - Save to a Specific .INI Files Name
我修改了 MasterMan82's TIniFile code 以从 & 读取和写入多个值到 TEdit/TComboBox 和 TMemo。
请原谅我模糊的问题,我的英语不好。
所以,我的意思是:
我有几个 .INI 文件,A.ini、B.ini、C.ini ....等等。我只是将 A.ini 存储为代码中的变量。不可能把所有的文件名都放在代码里。
当我打开 A.ini 时,进行一些更改,单击“保存”以保存所做的任何更改,并成功!。当然,因为代码中已经定义了A.ini
但是,当我打开文件时 B.ini 或 C.ini 或 D.ini...进行更改并保存,重新打开文件,但文件中的所有更改都是消失或未保存,当然,因为代码中只定义了 A.ini。
所以,我的目标是如何保留或记录所有文件修订?
下面是代码。
......
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, IniFiles, Dialogs;
......
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I, LinesCount: Integer;
Read : TIniFile;
begin
Read := TINIFile.Create(ExtractFilePath(Application.EXEName)+ 'A.ini');
// Read := TIniFile.Create(ChangeFileExt(Application.Exename,'A.ini'));
Try
Proxy.Text := Read.ReadString('SETTING','Proxy','');
Port.Text := Read.ReadString('SETTING','Port','');
Route.Checked:= Read.ReadBool('SETTING','Route',False);
// TO READ MEMO LINES
LinesCount := Read.ReadInteger('MEMO', 'Lines Count', 0);
for I := 0 to LinesCount-1 do
Memo1.Lines.Insert(I, Read.ReadString('MEMO', 'Item'+IntToStr(I), ''));
Finally
Read.Free;
end;
end;
procedure TForm1.SaveClick(Sender: TObject);
var
I, LinesCount: Integer;
ToSave : TIniFile;
begin
ToSave := TINIFile.Create(ExtractFilePath(Application.EXEName)+ 'A.ini');
Try
ToSave.WriteString('SETTING','Proxy',Proxy.Text);
ToSave.WriteString('SETTING','Port',Port.Text);
ToSave.WriteBool('SETTING','Route',Route.Checked);
// TO SAVE MEMO LINES
LinesCount := Memo1.Lines.Count;
ToSave.WriteInteger('MEMO', 'Lines Count', LinesCount);
for I := 0 to LinesCount-1 do
ToSave.WriteString('MEMO', 'Item'+IntToStr(I), Memo1.Lines[I]);
Finally
ToSave.Free;
end;
end;
procedure TForm1.OpenClick(Sender: TObject);
var
I, LinesCount: Integer;
OpenFile : TIniFile;
begin
OpenDialog.Filter:='Ini File (.ini)|*.ini';
if OpenDialog.Execute then begin
Memo1.Clear;
OpenFile := TINIFile.Create(OpenDialog.FileName);
Try
Proxy.Text := OpenFile.ReadString('SETTING','Proxy','');
Port.Text := OpenFile.ReadString('SETTING','Port','');
Route.Checked:= OpenFile.ReadBool('SETTING','Route',False);
// TO READ MEMO LINES
LinesCount := OpenFile.ReadInteger('MEMO', 'Lines Count', 0);
for I := 0 to LinesCount-1 do
Memo1.Lines.Insert(I, OpenFile.ReadString('MEMO', 'Item'+IntToStr(I), ''));
Finally
OpenFile.Free;
end;
end;
end;
你期待 none 存在的地方有魔法。如果你想保存到你打开的同一个文件,那么打开它时将选择的名称存储在一个变量中,然后在保存时也使用该变量。
同样,如果你想记住下一个 运行 的名字,那么你需要将这个名字存储在持久性存储中(比如注册表或 INI 文件),然后在你的节目下次开始。
得到你所要求的东西并不难,但你必须为它写一些代码。
当您打开一个 ini 文件时,将文件名存储在一个变量中,如许多评论中所述。
例如,(FCurrentIniFilename: String;
是 TForm1 中的私有变量):
在FormCreate
事件中:
FCurrentIniFilename := ExtractFilePath(Application.EXEName)+ 'A.ini';
Read := TINIFile.Create(FCurrentIniFilename);
...
在 OpenFile 事件中:
if OpenDialog.Execute then begin
FCurrentIniFilename := OpenDialog.Filename;
Open := TINIFile.Create(FCurrentIniFileName);
try
...
finally
Open.Free;
end;
end;
当您保存信息时:
ToSave := TINIFile.Create(FCurrentIniFilename);
我修改了 MasterMan82's TIniFile code 以从 & 读取和写入多个值到 TEdit/TComboBox 和 TMemo。
请原谅我模糊的问题,我的英语不好。
所以,我的意思是:
我有几个 .INI 文件,A.ini、B.ini、C.ini ....等等。我只是将 A.ini 存储为代码中的变量。不可能把所有的文件名都放在代码里。
当我打开 A.ini 时,进行一些更改,单击“保存”以保存所做的任何更改,并成功!。当然,因为代码中已经定义了A.ini
但是,当我打开文件时 B.ini 或 C.ini 或 D.ini...进行更改并保存,重新打开文件,但文件中的所有更改都是消失或未保存,当然,因为代码中只定义了 A.ini。
所以,我的目标是如何保留或记录所有文件修订?
下面是代码。
......
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, IniFiles, Dialogs;
......
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I, LinesCount: Integer;
Read : TIniFile;
begin
Read := TINIFile.Create(ExtractFilePath(Application.EXEName)+ 'A.ini');
// Read := TIniFile.Create(ChangeFileExt(Application.Exename,'A.ini'));
Try
Proxy.Text := Read.ReadString('SETTING','Proxy','');
Port.Text := Read.ReadString('SETTING','Port','');
Route.Checked:= Read.ReadBool('SETTING','Route',False);
// TO READ MEMO LINES
LinesCount := Read.ReadInteger('MEMO', 'Lines Count', 0);
for I := 0 to LinesCount-1 do
Memo1.Lines.Insert(I, Read.ReadString('MEMO', 'Item'+IntToStr(I), ''));
Finally
Read.Free;
end;
end;
procedure TForm1.SaveClick(Sender: TObject);
var
I, LinesCount: Integer;
ToSave : TIniFile;
begin
ToSave := TINIFile.Create(ExtractFilePath(Application.EXEName)+ 'A.ini');
Try
ToSave.WriteString('SETTING','Proxy',Proxy.Text);
ToSave.WriteString('SETTING','Port',Port.Text);
ToSave.WriteBool('SETTING','Route',Route.Checked);
// TO SAVE MEMO LINES
LinesCount := Memo1.Lines.Count;
ToSave.WriteInteger('MEMO', 'Lines Count', LinesCount);
for I := 0 to LinesCount-1 do
ToSave.WriteString('MEMO', 'Item'+IntToStr(I), Memo1.Lines[I]);
Finally
ToSave.Free;
end;
end;
procedure TForm1.OpenClick(Sender: TObject);
var
I, LinesCount: Integer;
OpenFile : TIniFile;
begin
OpenDialog.Filter:='Ini File (.ini)|*.ini';
if OpenDialog.Execute then begin
Memo1.Clear;
OpenFile := TINIFile.Create(OpenDialog.FileName);
Try
Proxy.Text := OpenFile.ReadString('SETTING','Proxy','');
Port.Text := OpenFile.ReadString('SETTING','Port','');
Route.Checked:= OpenFile.ReadBool('SETTING','Route',False);
// TO READ MEMO LINES
LinesCount := OpenFile.ReadInteger('MEMO', 'Lines Count', 0);
for I := 0 to LinesCount-1 do
Memo1.Lines.Insert(I, OpenFile.ReadString('MEMO', 'Item'+IntToStr(I), ''));
Finally
OpenFile.Free;
end;
end;
end;
你期待 none 存在的地方有魔法。如果你想保存到你打开的同一个文件,那么打开它时将选择的名称存储在一个变量中,然后在保存时也使用该变量。
同样,如果你想记住下一个 运行 的名字,那么你需要将这个名字存储在持久性存储中(比如注册表或 INI 文件),然后在你的节目下次开始。
得到你所要求的东西并不难,但你必须为它写一些代码。
当您打开一个 ini 文件时,将文件名存储在一个变量中,如许多评论中所述。
例如,(FCurrentIniFilename: String;
是 TForm1 中的私有变量):
在FormCreate
事件中:
FCurrentIniFilename := ExtractFilePath(Application.EXEName)+ 'A.ini';
Read := TINIFile.Create(FCurrentIniFilename);
...
在 OpenFile 事件中:
if OpenDialog.Execute then begin
FCurrentIniFilename := OpenDialog.Filename;
Open := TINIFile.Create(FCurrentIniFileName);
try
...
finally
Open.Free;
end;
end;
当您保存信息时:
ToSave := TINIFile.Create(FCurrentIniFilename);