程序运行过程中会改变一些变量的值,我想下次程序运行时初始值就是程序上次退出时的值,对于这些变量要怎么做?
类似的,我想程序记住radiobutton是选的哪一个,listbox中已经添加的哪些内容~~
请用代码示范一下。

解决方案 »

  1.   

    退出时保存到 ini 里面,下次启动时从 ini 里面读取出来。
      

  2.   

    保存到注册表中应该更好些吧。
    示例,将Edit中的值保存到注册表中,从注册表中读出字符型的值么...用ReadString:
    var
      Reg:TRegistry;
    begin
      Reg:=Tregistry.Create;                //创建Tregistry对象的实例
      Reg.Rootkey := HKEY_CURRENT_USER ;    //设置根键名称
      Reg.OpenKey('\Software\Microsoft\my_SqlServer_Customer',True);
      Reg.WriteString('UserID',txtUser.Text);
      Reg.WriteString('SqlServerIP',txtIP.Text);
      Reg.WriteString('SqlServerPwd',Decrypt(txtPassword.Text,1));
      Reg.CloseKey;
      Reg.Free;                          //释放对象
      Close;
    end;
      

  3.   

    其实不管是保存到注册表中,或是INI中,还是数据库中
    只要有个地方保存就好了
    我个人喜欢保存在INI文件中,写注册表容易,但清理它难,会被人说成“污染注册表”
    数据库呢,因为并不是每个软件都有数据库的
      

  4.   

    保存到INI或注冊表中都行,但建議保存在INI文件中。讀INI文件穩定,可靠。
      

  5.   

    //保存(样例)
    var 
      Filename :string;
      data_login :TIniFile;  //ini文件名称
    begin
     Filename := ExtractFilePath(Application.ExeName)+'data_bak.ini';   
      //记录设置状态
      Data_login := TIniFile.Create(FileName);
      with data_login do
      begin
        if RB_no.Checked = true    then
        begin
          WriteString('data_bak','rb_empty','true');
        end else WriteString('data_bak','rb_empty','false');
        Data_login.free;
    end;//读入
    begin 
      Filename := ExtractFilePath(Application.ExeName)+'data_bak.ini';
      //恢复上一次设置状态
      Data_login := TIniFile.Create(FileName);
      with data_login do
      begin
        if  ReadString('data_bak','rb_empty','') = 'true' then
        begin
         rb_no.Checked :=True;
         end  else rb_no.Checked :=false;
        Data_login.free;
    end;
      

  6.   

    我写了一个动态设置数据库的连接字符串的实例,就是通过对配置文件读取参数的
    给你部分代码供你参考:
    如果要实例:[email protected]  email验证。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      db_drive, db_path, db_info: PChar;
      //分别代表数据库的驱动类型,数据库的当前全路径,数据库是否需要验证信息
      //在本实例中,验证信息为假,也就是不需要验证,其他类型数据库无效。
      //如果用户有兴趣可以根据以下给出的connectionstring扩展此程序
       {****************************************************************************
        针对access型数据库,在没有口令的条件下,
        数据库连接字符串只需要以上3个变量就可以了,
        如果是sql server 2000型数据库,给出一个连接好的数据库连接字符串:
        Provider=SQLOLEDB.1;           //数据库驱动类型
        Password=user;                 //密码=user
        Persist Security Info=True;    //数据库安全验证
        User ID=sa;                    //用户名=sa
        Initial Catalog=database_name; //选择数据库名,如选用sql server 2000中自
                                       //带master数据库,只要把database_name改成
                                       //master即可
        Data Source=test               //这里是数据源的名称
        ***************************************************************************
        如果要连接这样的数据库类型在做配置文件中就要做6个key值,其他数据库也是一样的}
    begin
      {判断录入数据是否为空}
      if combobox1.Text = '' then
        ShowMessage('请选择数据库类型')
      else if memo1.Text = '' then
        ShowMessage('请选择你要加入的数据库文件')
      else
      begin
        {判断数据库驱动类型}
        if combobox1.Text = 'access (*.mdb)' then
          db_drive := PChar('Provider=Microsoft.Jet.OLEDB.4.0;')
        else if combobox1.Text = 'sql server 2000' then
          db_drive := PChar('Provider=SQLOLEDB.1;')
        else
          db_drive := PChar('Provider=MSDAORA.1;');
        //写入数据库类型
        writeprivateprofilestring('connectionstring', 'db_drive', db_drive,
          PChar(dir + '\db_config.ini'));
        db_path := PChar('Data Source=' + memo1.Text + ';');
        //写入数据库的全路径
        writeprivateprofilestring('connectionstring', 'db_path', db_path,
          PChar(dir + '\db_config.ini'));
        db_info := PChar('Persist Security Info=False');
        //由于本实例针对access数据库,所以安全验证信息直接给出
        //写入安全信息
        writeprivateprofilestring('connectionstring', 'db_info', db_info,
          PChar(dir + '\db_config.ini'));
        ShowMessage('配置数据库完毕!!');    button1.Enabled := False; //配置一次就锁定
        memo1.Clear;
        combobox1.Enabled := not combobox1.Enabled;//配置后,不可用
        button2.Enabled   := True;  //激活连接数据库
      end;
    end;//寻找你要连接的数据库
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      opendialog1.Filter := 'access files (*.mdb)|*.mdb'; //过滤文件只可选*.mdb类型
      opendialog1.Execute;
      memo1.Clear;
      memo1.Text := opendialog1.FileName;      //得到数据库全路径
      button1.Enabled := not button1.Enabled;
      button3.Enabled := not button3.Enabled;
    end;//创建
    procedure TForm1.Button4Click(Sender: TObject);
    var
      dir_name: String;
      filehandle: Integer;
    begin
      dir := 'c:\db_ini';                  //设定ini文件位置
      dir_name := dir + '\db_config.ini';  //ini文件全路径
      ForceDirectories(Dir);               //创建c:\db_ini文件夹
      filehandle := filecreate(dir_name);  //得到创建文件的句柄
      filewrite(filehandle, null, 0);      //创建文件
      if fileexists(dir_name) then         //判断是否创建文件
        ShowMessage('配置文件创建成功!!!存储目录为:' + dir + '')
      else
        ShowMessage('初始化文件失败!!!');
      fileclose(filehandle);            //释放创建文件句柄{说明:这里如果只创建文件,即filecreate(dir_name)也可以,
           但是如果不关闭应用程序的话,创建文件的句柄就不会
           释放,导致后面在修改配置文件的过程不可写入内容。
           为了培养一种好的习惯,建议怎么做,就想c一样。
    }  button4.Enabled := not button4.Enabled;
      button3.Enabled := True;
      combobox1.Enabled := True;
      memo1.Enabled := True;
    end;
      

  7.   

    个人认为写ini文件最好。有时就一两个设置值,值得建一个数据库吗?而且换台机器不是一样和ini文件一样拷过去?注册表就更不行了,换了机器就要重新设,而且还会在注册表中留下垃圾。
    例子fsu已经给出,我就不重复了。
      

  8.   

    管它什么文件.自己想保存到哪就保存到哪(自定义文件、注册表、数据库、INI文件、其它).
    看自己的喜欢和能力.如果有技术的.
    把它保存硬盘的扇区(0面0磁道1扇区或2、3扇区),那才叫保险。
    一般的人不能修改和破坏........