フォーム状態をディスクに簡単に保存することを簡単にしたいと思います。私はTIniFileから派生した独自のINIファイルクラスを使用して、フォームの「すべての」コントロールの状態を読み込みます。このような何か:TAction.OnExecuteは実行されません
procedure TMyIniFile.Read(Comp: TComponent);
begin
if ValueExists(Section, Comp.Name) then
begin
if Comp.InheritsFrom(TAction)
then TAction(Comp).Checked:= ReadBool(Section, Comp.Name, FALSE)
else
if Comp.InheritsFrom(TCheckBox) etc
end;
end;
私はこのような私のクラスを使用します。
TYPE
TformTester = class(TForm)
MyAction: TAction;
procedure actMyActionExecute(Sender: TObject);
...
procedure TformTester.FormDestroy(Sender: TObject);
VAR
MyIniFile: TMyIniFile;
begin
MyAction.Checked:= true;
MyIniFile:= TMyIniFile.Create('Main Form');
MyIniFile.write(MyAction); // <------ This saves the 'Checked' property of MyAction.
...
end;
私はシャット時に、施設の状態に応じて(真/偽)INIファイルを検証し、状態が正しく保存されますダウン。
procedure TformTester.FormStartUp;
VAR MyIniFile: TMyIniFile;
begin
MyIniFile:= TMyIniFile.Create('Main Form');
MyIniFile.read(MyAction); // <------ This reads the 'Checked' property of MyAction. It should execute the actMyActionExecute but it doesn't.
assert(MyAction.Checked); // <---- Yes, it is checked
...
end;
procedure TformTester.MyActionExecute(Sender: TObject);
begin
if MyAction.Checked
then Caption:= 'Action checked'
else Caption:= 'Action is un-checked!';
end;
質問: MyIniFile.read(MyAction)が実行されたときに、なぜactMyActionExecuteが呼び出されませんか?
PS:MyIniFile.read(MyCheckbox)は、TActionの代わりに何か他のもの、例えばチェックボックスを渡すと機能します。 MyCheckbox.OnClickが実行されたことを意味します。
MyAction.AutoCheckはTrueです。 – Ampere