Je veux simplifier un peu la sauvegarde d'un état de formulaire sur le disque. J'utilise ma propre classe de fichier INI dérivée de TIniFile pour lire l'état de "tous" les contrôles présents dans le formulaire. Quelque chose comme ceci:TAction.OnExecute n'est pas exécuté
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;
-je utiliser ma classe comme ceci:
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;
J'ai vérifié le fichier INI et l'état est correctement enregistré (true/false) en fonction de l'état de la propriété lors de l'arrêt vers le bas.
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;
Question: Pourquoi actMyActionExecute n'est pas appelée lorsque MyIniFile.read (MonAction) est exécuté? PS: MyIniFile.read (MyCheckbox) fonctionne si au lieu de TAction je passe tout autre chose, par exemple une case à cocher. Je veux dire MyCheckbox.OnClick est exécuté!
MyAction.AutoCheck est True; – Ampere