即使在程序关闭和重新打开后也能保存一个值

问题描述 投票:0回答:1

我想知道如何在程序关闭和重新打开后保存一个 "变量 "的内容。

例如:iCount:=0;inc(iCount)=1。

当我关闭程序并重新打开时,我希望iCount包含1.谢谢。

delphi delphi-xe2 delphi-2010
1个回答
4
投票

有很多方法可以做到这一点。你需要把值保存在某个地方:在文件中,在Windows注册表中,在云中,......

文件中

也许最简单的方法是使用INI文件。试试这个。

  1. 创建一个新的VCL应用程序

  2. 添加一个字段 FMyNumber: Integer 到主窗体中。

  3. 在主表单中,添加以下方法(并确保包含了 IniFilesIOUtils 在执行部分的 uses list)。)

    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;
    
  4. 现在请确保在你的应用程序启动和关闭时调用这些。

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      LoadSettings;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      SaveSettings;
    end;
    

    现在 FMyNumber 是保存在会话之间!

注册处

另一种常见的方法,可能是使用注册表。试试这个。

  1. 创建一个新的VCL应用程序

  2. 添加一个字段 FMyNumber: Integer 到主窗体中。

  3. 在主表单中,添加以下方法(并确保包含了 Registry 在执行部分的 uses list)。)

    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;
    
  4. 现在确保在你的应用程序启动和关闭时调用这些。

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      LoadSettings;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      SaveSettings;
    end;
    

    同样的,当你的应用程序启动和关闭时 FMyNumber 是保存在两次会议之间!

© www.soinside.com 2019 - 2024. All rights reserved.