此代码在Delphi的Demo(ADOTEST)中有说明
function TADODBTest.GetConfigFile: TIniFile;
begin
if FConfig = nil then
FConfig := TIniFile.Create(ChangeFileExt(ParamStr(0), '.INI'));
Result := FConfig;
end;
procedure TADODBTest.StreamSettings(Write: Boolean);
procedure WriteStr(const OptName: string; Value: Variant);
begin
FConfig.WriteString('Settings', OptName, Value);
end;
procedure WriteBool(const OptName: string; Value: Boolean);
begin
FConfig.WriteBool('Settings', OptName, Value);
end;
procedure WriteStrings(const SectName: string; Values: TStrings);
var
I: Integer;
begin
FConfig.EraseSection(SectName);
for I := 0 to Values.Count - 1 do
FConfig.WriteString(SectName, IntToStr(I), Values[I]);
end;
function ReadStr(const OptName: string): Variant;
begin
Result := FConfig.ReadString('Settings', OptName, '');
end;
function ReadBool(const OptName: string): Boolean;
begin
Result := FConfig.ReadBool('Settings', OptName, False);
end;
procedure ReadStrings(const SectName: string; Values: TStrings);
var
I: Integer;
S: string;
begin
for I := 0 to 99 do
begin
S := FConfig.ReadString(SectName, IntToStr(I), '');
if S = '' then Break;
Values.Add(S);
end;
end;
function FindPage(const PageName: string): TTabSheet;
var
I: Integer;
begin
for I := AreaSelector.PageCount - 1 downto 0 do
begin
Result := AreaSelector.Pages[I];
if Result.Caption = PageName then Exit;
end;
Result := SourcePage;
end;
procedure ProcessComponents(Components: array of TComponent);
var
I,J: Integer;
begin
if Write then
begin
for I := Low(Components) to High(Components) do
if Components[I] is TCustomEdit then
with TEdit(Components[I]) do
WriteStr(Name, Text)
else if Components[I] is TComboBox then
with TDBComboBox(Components[I]) do
WriteStr(Name, Text)
else if Components[I] is TCheckBox then
with TCheckBox(Components[I]) do
WriteBool(Name, Checked)
else if Components[I] is TRadioButton then
with TRadioButton(Components[I]) do
WriteBool(Name, Checked)
else if Components[I] is TAction then
with TAction(Components[I]) do
WriteBool(Name, Checked)
else if Components[I] is TPageControl then
with TPageControl(Components[I]) do
WriteStr(Name, ActivePage.Caption)
else if Components[I] is TMenuItem then
with TMenuItem(Components[I]) do
for J := 0 to Count-1 do
if Items[J].Checked then
begin
WriteStr(Name, J);
System.Break;
end;
end
else
begin
for I := Low(Components) to High(Components) do
if Components[I] is TCustomEdit then
with TEdit(Components[I]) do
Text := ReadStr(Name)
else if Components[I] is TComboBox then
with TComboBox(Components[I]) do
Text := ReadStr(Name)
else if Components[I] is TCheckBox then
with TCheckBox(Components[I]) do
Checked := ReadBool(Name)
else if Components[I] is TRadioButton then
with TRadioButton(Components[I]) do
Checked := ReadBool(Name)
else if Components[I] is TAction then
with TAction(Components[I]) do
Checked := ReadBool(Name)
else if Components[I] is TPageControl then
with TPageControl(Components[I]) do
ActivePage := FindPage(ReadStr(Name))
else if Components[I] is TMenuItem then
with TMenuItem(Components[I]) do
Items[ReadStr(Name)].Checked := True;
end;
end;
begin
GetConfigFile;
ProcessComponents([CheckListBox1,Memo1,Memo2,Memo3,Memo5]);
end;
此为保存窗体的数据到INI文件中,使用此思路也可以做成保存到注册表,或者其它文件中,方便程序在再次打开的时候显示以前信息.
该信息由小东在2007-2-26号最后编辑