即使在程序关闭并重新打开后也保存一个值
Saving a value even after program is closed and reopened
我想知道如何在程序关闭并重新打开后保存 "variable" 的内容。
例如:
i计数:=0;
inc(iCount)=1;
当我关闭程序并重新打开时,我希望 iCount 包含 1。
谢谢。
有很多方法可以做到这一点。您需要将值保存在某处:在文件中,在 Windows 注册表中,在云中,...
文件
也许最简单的方法是使用 INI 文件。试试这个:
创建一个新的 VCL 应用程序。
在主窗体中添加一个字段FMyNumber: Integer
。
到主窗体,添加以下方法(并确保在实现部分的 uses
列表中包含 IniFiles
和 IOUtils
):
function TForm1.GetSettingsFileName: TFileName;
begin
Result := TPath.GetHomePath + '\Fuzail\TestApp';
ForceDirectories(Result);
Result := Result + '\settings.ini';
end;
procedure TForm1.LoadSettings;
var
Ini: TMemIniFile;
begin
Ini := TMemIniFile.Create(GetSettingsFileName);
try
FMyNumber := Ini.ReadInteger('Settings', 'MyNumber', 0);
finally
Ini.Free;
end;
end;
procedure TForm1.SaveSettings;
var
Ini: TMemIniFile;
begin
Ini := TMemIniFile.Create(GetSettingsFileName);
try
Ini.WriteInteger('Settings', 'MyNumber', FMyNumber);
Ini.UpdateFile;
finally
Ini.Free;
end;
end;
现在确保在您的应用程序启动和关闭时调用这些:
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadSettings;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SaveSettings;
end;
现在 FMyNumber
的值在会话之间保存!
注册表
另一种常见的方法可能是使用注册表。试试这个:
创建一个新的 VCL 应用程序。
在主窗体中添加一个字段FMyNumber: Integer
。
在主窗体中添加以下方法(并确保在实现部分的 uses
列表中包含 Registry
):
procedure TForm1.LoadSettings;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\Fuzail\TestApp', False) then
try
if Reg.ValueExists('MyNumber') then
FMyNumber := Reg.ReadInteger('MyNumber')
finally
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
procedure TForm1.SaveSettings;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\Fuzail\TestApp', True) then
try
Reg.WriteInteger('MyNumber', FMyNumber);
finally
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
现在确保在您的应用程序启动和关闭时调用这些:
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadSettings;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SaveSettings;
end;
再次 FMyNumber
的值在会话之间保存!
我想知道如何在程序关闭并重新打开后保存 "variable" 的内容。
例如: i计数:=0; inc(iCount)=1;
当我关闭程序并重新打开时,我希望 iCount 包含 1。 谢谢。
有很多方法可以做到这一点。您需要将值保存在某处:在文件中,在 Windows 注册表中,在云中,...
文件
也许最简单的方法是使用 INI 文件。试试这个:
创建一个新的 VCL 应用程序。
在主窗体中添加一个字段
FMyNumber: Integer
。到主窗体,添加以下方法(并确保在实现部分的
uses
列表中包含IniFiles
和IOUtils
):function TForm1.GetSettingsFileName: TFileName; begin Result := TPath.GetHomePath + '\Fuzail\TestApp'; ForceDirectories(Result); Result := Result + '\settings.ini'; end; procedure TForm1.LoadSettings; var Ini: TMemIniFile; begin Ini := TMemIniFile.Create(GetSettingsFileName); try FMyNumber := Ini.ReadInteger('Settings', 'MyNumber', 0); finally Ini.Free; end; end; procedure TForm1.SaveSettings; var Ini: TMemIniFile; begin Ini := TMemIniFile.Create(GetSettingsFileName); try Ini.WriteInteger('Settings', 'MyNumber', FMyNumber); Ini.UpdateFile; finally Ini.Free; end; end;
现在确保在您的应用程序启动和关闭时调用这些:
procedure TForm1.FormCreate(Sender: TObject); begin LoadSettings; end; procedure TForm1.FormDestroy(Sender: TObject); begin SaveSettings; end;
现在
FMyNumber
的值在会话之间保存!
注册表
另一种常见的方法可能是使用注册表。试试这个:
创建一个新的 VCL 应用程序。
在主窗体中添加一个字段
FMyNumber: Integer
。在主窗体中添加以下方法(并确保在实现部分的
uses
列表中包含Registry
):procedure TForm1.LoadSettings; var Reg: TRegistry; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey('\Software\Fuzail\TestApp', False) then try if Reg.ValueExists('MyNumber') then FMyNumber := Reg.ReadInteger('MyNumber') finally Reg.CloseKey; end; finally Reg.Free; end; end; procedure TForm1.SaveSettings; var Reg: TRegistry; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey('\Software\Fuzail\TestApp', True) then try Reg.WriteInteger('MyNumber', FMyNumber); finally Reg.CloseKey; end; finally Reg.Free; end; end;
现在确保在您的应用程序启动和关闭时调用这些:
procedure TForm1.FormCreate(Sender: TObject); begin LoadSettings; end; procedure TForm1.FormDestroy(Sender: TObject); begin SaveSettings; end;
再次
FMyNumber
的值在会话之间保存!