今天老板给我一个任务让我些个配置类似ini文件的小工具 我写了一下午了  出现一个BUG 
 读取按钮(Button1)没问题了 保存按钮(Button2) 如果Button1 没写的关键字 如果按button2 那就不保存了
我要实现的是比如 读取部分类容后 按BUTTON2 后 只修改 读取后的内容 请大家帮帮忙
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Menus, ActnList, StdCtrls, IniFiles, ExtCtrls;type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Button2: TButton;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    LabeledEdit4: TLabeledEdit;
    LabeledEdit5: TLabeledEdit;
    LabeledEdit6: TLabeledEdit;
    LabeledEdit7: TLabeledEdit;
    LabeledEdit8: TLabeledEdit;
    LabeledEdit9: TLabeledEdit;
    LabeledEdit10: TLabeledEdit;
    ..........................
    procedure N2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
var
  myinifile: Tinifile;
{$R *.dfm}procedure TForm1.N2Click(Sender: TObject);
begin
  form1.close
end;
//读取数据
procedure TForm1.Button1Click(Sender: TObject);
var
  t: tstringlist;
  begin
  try
    t := tstringlist.Create;
    t.LoadFromFile('setup.cf');
    LabeledEdit1.Text   := t.Values['blserv'];
    LabeledEdit2.Text   := t.Values['blservport'];
    LabeledEdit3.Text   := t.Values['battledebugmsg'];
    LabeledEdit4.Text   := t.Values['battlenum'];
    LabeledEdit5.Text   := t.Values['CAinterval'];
    LabeledEdit6.Text   := t.Values['petmailmistakefile'];
    LabeledEdit7.Text   := t.Values['titleconfigfile'];
    LabeledEdit8.Text   := t.Values['skillfile'];
    LabeledEdit9.Text   := t.Values['extraipaddress'];
    LabeledEdit10.Text  := t.Values['itemboxfile'];
    .............................    
  finally
    t.Free;
  end;
end;
//保存数据
procedure TForm1.Button2Click(Sender: TObject);
var
    t: tstringlist;
begin
    t := TStringList.Create;
try
    t.Values['blserv']                  := LabeledEdit1.Text ;
    t.Values['blservport']              := LabeledEdit2.Text ;
    t.Values['battledebugmsg']          := LabeledEdit3.Text ;
    t.Values['battlenum']               := LabeledEdit4.Text ;
    t.Values['CAinterval']              := LabeledEdit5.Text ;
    t.Values['petmailmistakefile']      := LabeledEdit6.Text ;
    t.Values['titleconfigfile']         := LabeledEdit7.Text ;
    t.Values['skillfile']               := LabeledEdit8.Text ;
    t.Values['extraipaddress']          := LabeledEdit9.Text ;
    t.Values['itemboxfile']             := LabeledEdit10.Text ;
    ...........................................    
  t.SaveToFile('setup.cf');
finally
    t.Free;
  end;
 end;
end.

解决方案 »

  1.   

    建议楼主用 TIniFile 吧!如果你的 LabeledEdit1.Text 为空的话,TStrings 会做删除的procedure TStrings.SetValue(const Name, Value: string);
    var
      I: Integer;
    begin
      I := IndexOfName(Name);
      if Value <> '' then
      begin
        if I < 0 then I := Add('');
        Put(I, Name + NameValueSeparator + Value);
      end else
      begin
        if I >= 0 then Delete(I); 
      end;
    end;