如何保存对话界面呢(70分)

  • 主题发起人 主题发起人 tt55
  • 开始时间 开始时间
T

tt55

Unregistered / Unconfirmed
GUEST, unregistred user!
我创建了一个选择条件的窗体,如何实现点确定按钮后保存界面的全部设置
就是个选择项的值,而在取消按钮时恢复上一次的设置,
这个窗体我没有动态创建,所以,每次完毕时他都会保存上一次的设置,无论
点了什么按钮,我该如何设置呢,想用最简洁的方法实现,请大家帮忙!
谢谢
 
//把设置保存在变量中,然后写入注册表或ini文件,下次取出
procedure TOptionForm.bCloseClick(Sender: TObject);
begin
inherited;
close;
end;

procedure TOptionForm.FormCreate(Sender: TObject);
//设置控件状态
begin
//在之前取出设置到变量
inherited;
pg.ActivePage := tsSystem;
cbBackColor.Selected := clBackColor;
chkFlatHint.Checked := bUseFlatHint;
chkFlatHint.Enabled := bUseHint;
chkSaveUserName.Checked := bSaveUserName;
chkUseHint.Checked := bUseHint;
chkXPMenu.Checked := bUseXPMenu;
cmbDrawStyle.ItemIndex := iDrawStyle;
tBackImage.Text := sBackImage;
tLocal.Text := sDataBaseName;
tDropDownCount.Value := iDropDownCount;
end;

procedure TOptionForm.bApplyClick(Sender: TObject);
//应用设置
var
i:integer;
begin
inherited;
if not FileExists(tLocal.Text) then
begin
msgbox(format(SENoFoundFile,[tLocal.Text]),caption,MB_ICONSTOP);
pg.ActivePage:=tssystem;
tLocal.SetFocus;
abort;
end;
if (length(tBackImage.Text)>0) and not FileExists(tBackImage.Text) then
begin
msgbox(format(SENoFoundFile,[tBackImage.Text]),caption,MB_ICONSTOP);
pg.ActivePage:=tsdisplay;
tBackImage.SetFocus;
abort;
end;
bSaveUserName := chkSaveUserName.Checked;
bUseFlatHint := chkFlatHint.Checked;
bUseHint := chkUseHint.Checked;
bUseXPMenu := chkXPMenu.Checked;
clBackColor := cbBackColor.Selected;
iDrawStyle := cmbDrawStyle.ItemIndex;
iDropDownCount := tDropDownCount.Value;
sBackImage := tBackImage.Text;
sDataBaseName := tLocal.Text;
if iDropDownCount<1 then
iDropDownCount:=1;
//应用
application.ShowHint:=bUseHint;
with MDIMainForm do
begin
for i:=0 to MDIChildCount-1 do
MDIChildren.Color:=clBackColor;
if FileExists(sBackImage) then
try
imgMain.Picture.LoadFromFile(sBackImage);
FDrawImage:=true;
except
FDrawImage:=false;
end
else
with imgMain.Picture.Bitmap.Canvas do
begin
Brush.Style:=bsSolid;
Brush.Color:=Color;
FillRect(ClientRect);
end;
InvalidateRect(ClientHandle, nil, True);
end;
if bUseHint and bUseFlatHint and not assigned(MDIMainForm.fh) then
begin
MDIMainForm.fh:=TFlatHint.Create(MDIMainForm);
MDIMainForm.fh.Font:=MDIMainForm.Font;
end;
SaveSetting;//调用保存设置过程
end;

procedure TOptionForm.bOkClick(Sender: TObject);
//应用后退出
begin
inherited;
bApplyClick(Sender);
close;
end;
 
利用ini文件应该很简单
 
不太明白你的问题,能不能讲清楚你要实现的?
 
存到ini文件里吧,windows下编写应用程序的常规做法。
这是事例,不是很完善:
Function ReadIni(sKind : string;
sTitle : string) : string;
//读
var
Temp : Pchar;
begin
GetMem(Temp,100);
GetPrivateProfileString(Pchar(sKind),Pchar(sTitle),'',Temp,100,Pchar(ExtractFilePath(ParamStr(0))+'/Etong.ini'));
Result := Temp;
FreeMem(Temp,100);
end;

Procedure WriteIni(sKind : string;
sTitle : string;
sDetail : string);
var
SaveTemp : Pchar;
begin
//保存到ini文件中
SaveTemp := pchar(sDetail);
WritePrivateProfileString(pchar(sKind),Pchar(sTitle),SaveTemp,Pchar(ExtractFilePath(ParamStr(0))+'/Etong.ini'));
end;
 
我是在系统关闭时把界面的设置写到ini文件里了,然后在启动时读INI文件,
现在想实现的是,系统没关闭,点了窗体上的确定键保存设置,取消键就保持上一次
的设置条件,就像Windows系统设置的那样,能不能取消后在打开界面后不去读INI文件
而可以恢复上一次的界面设置?谢谢
 
看来除了读取INI文件来恢复界面设置,可能没有其他的好办法了,
由于界面上的设置很多,在INI文件中设置的section,key也很多,所以读写都不
方便,大家真的没有其他更简洁的办法了吗,
 
还有一种比较常见的做法,是写到注册表里
多用于个人作者的小型软件
 
使用两个ini文件,一个保存上次的设置,另一个保存最新的设置。
ini的读写已经很方便了。
 
后退
顶部