TObserverController (class)
De Wiki1000
(Différences entre les versions)
(Page créée avec « __NOTOC__ ==Introduction== La classe TObserverController est une classe non persistante utilisable comme classe ancêtre d'un observeur. Un observeur est un objet lié ... ») |
|||
(3 révisions intermédiaires par un utilisateur sont masquées) | |||
Ligne 1 : | Ligne 1 : | ||
__NOTOC__ | __NOTOC__ | ||
==Introduction== | ==Introduction== | ||
− | La classe TObserverController est une classe non persistante utilisable comme classe ancêtre d'un | + | La classe TObserverController est une classe non persistante utilisable comme classe ancêtre d'un observateur. |
− | Un | + | Un observateur est un objet lié à un objet source et notifié des changements de cet objet. |
− | {{tip|Un | + | {{tip|Un observateur peut être utilisé comme contrôleur de saisie dans une interface utilisateur.}} |
===Attributs=== | ===Attributs=== | ||
Ligne 22 : | Ligne 22 : | ||
===Méthodes d'interface=== | ===Méthodes d'interface=== | ||
− | Les méthodes suivantes peuvent être | + | Les méthodes suivantes peuvent être implémentées par les descendants de TObserverController. |
{|class="wikitable" | {|class="wikitable" | ||
|- | |- | ||
|[[OnMainObjectChanged (TObserverController)|OnMainObjectChanged]] | |[[OnMainObjectChanged (TObserverController)|OnMainObjectChanged]] | ||
− | | | + | |Appelée lorsque l'objet observé change. |
|- | |- | ||
|[[OnMainObjectPropChanged (TObserverController)|OnMainObjectPropChanged]] | |[[OnMainObjectPropChanged (TObserverController)|OnMainObjectPropChanged]] | ||
− | | | + | |Appelée lorsque un attribut de l'objet observé change. |
|- | |- | ||
|[[OnMainObjectBeforeCommit (TObserverController)|OnMainObjectBeforeCommit]] | |[[OnMainObjectBeforeCommit (TObserverController)|OnMainObjectBeforeCommit]] | ||
− | | | + | |Appelée avant le commit de l'objet observé. |
|} | |} | ||
Voir aussi : | Voir aussi : | ||
+ | |||
+ | Exemple d'utilisation d'un observateur, dans cet exemple, la classe observée est WFClasseA : | ||
<source lang="delphi"> | <source lang="delphi"> | ||
+ | unit TestSYFREWF; | ||
+ | interface | ||
+ | |||
+ | Type | ||
+ | TWFClasseAObserver = Class(TObserverController) | ||
+ | public | ||
+ | Function getWFClasseA():WFClasseA; | ||
+ | Procedure OnMainObjectBeforeCommit; | ||
+ | Procedure OnMainObjectChanged; | ||
+ | Procedure OnMainObjectPropChanged(const iPropName:string); | ||
+ | end; | ||
+ | |||
+ | Implementation | ||
+ | |||
+ | {TWFClasseAObserver} | ||
+ | |||
+ | Function TWFClasseAObserver.getWFClasseA():WFClasseA; | ||
+ | //Function getWFClasseA():WFClasseA; | ||
+ | begin | ||
+ | // get the typed actual instance | ||
+ | Result := MainObject as WFClasseA; | ||
+ | end; | ||
+ | |||
+ | Procedure TWFClasseAObserver.OnMainObjectBeforeCommit; | ||
+ | //Procedure OnMainObjectBeforeCommit; | ||
+ | var inst:WFClasseA; | ||
+ | begin | ||
+ | // do some additional checks before commit | ||
+ | inst := GetWFClasseA; | ||
+ | if Assigned(inst) then | ||
+ | begin | ||
+ | if inst.uneChaine='' then raise ERule.Create('La chaine est obligatoire'); | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | Procedure TWFClasseAObserver.OnMainObjectChanged; | ||
+ | //Procedure OnMainObjectChanged; | ||
+ | var inst:WFClasseA; | ||
+ | begin | ||
+ | // do something when main instance changed | ||
+ | inst := GetWFClasseA; | ||
+ | if Assigned(inst) then | ||
+ | begin | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | Procedure TWFClasseAObserver.OnMainObjectPropChanged(const iPropName:string); | ||
+ | //Procedure OnMainObjectPropChanged(const iPropName:string); | ||
+ | var inst:WFClasseA; | ||
+ | begin | ||
+ | // do something when property of main instance changed | ||
+ | if (iPropName='unCode') then | ||
+ | begin | ||
+ | inst := GetWFClasseA; | ||
+ | if Assigned(inst) and (inst.uneChaine='') then inst.uneChaine := inst.unCode; | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | end. | ||
</source> | </source> | ||
[[category:Classes frameworks]] | [[category:Classes frameworks]] | ||
+ | [[category:TObserverController]] | ||
[[category:Version900]] | [[category:Version900]] |
Version actuelle en date du 28 février 2020 à 17:51
Introduction
La classe TObserverController est une classe non persistante utilisable comme classe ancêtre d'un observateur.
Un observateur est un objet lié à un objet source et notifié des changements de cet objet.
Attributs
MainObject | Référence sur l'objet observé. |
Méthodes
SetMainObjectOID | Positionne l'OID de l'objet observé |
Méthodes d'interface
Les méthodes suivantes peuvent être implémentées par les descendants de TObserverController.
OnMainObjectChanged | Appelée lorsque l'objet observé change. |
OnMainObjectPropChanged | Appelée lorsque un attribut de l'objet observé change. |
OnMainObjectBeforeCommit | Appelée avant le commit de l'objet observé. |
Voir aussi :
Exemple d'utilisation d'un observateur, dans cet exemple, la classe observée est WFClasseA :
unit TestSYFREWF; interface Type TWFClasseAObserver = Class(TObserverController) public Function getWFClasseA():WFClasseA; Procedure OnMainObjectBeforeCommit; Procedure OnMainObjectChanged; Procedure OnMainObjectPropChanged(const iPropName:string); end; Implementation {TWFClasseAObserver} Function TWFClasseAObserver.getWFClasseA():WFClasseA; //Function getWFClasseA():WFClasseA; begin // get the typed actual instance Result := MainObject as WFClasseA; end; Procedure TWFClasseAObserver.OnMainObjectBeforeCommit; //Procedure OnMainObjectBeforeCommit; var inst:WFClasseA; begin // do some additional checks before commit inst := GetWFClasseA; if Assigned(inst) then begin if inst.uneChaine='' then raise ERule.Create('La chaine est obligatoire'); end; end; Procedure TWFClasseAObserver.OnMainObjectChanged; //Procedure OnMainObjectChanged; var inst:WFClasseA; begin // do something when main instance changed inst := GetWFClasseA; if Assigned(inst) then begin end; end; Procedure TWFClasseAObserver.OnMainObjectPropChanged(const iPropName:string); //Procedure OnMainObjectPropChanged(const iPropName:string); var inst:WFClasseA; begin // do something when property of main instance changed if (iPropName='unCode') then begin inst := GetWFClasseA; if Assigned(inst) and (inst.uneChaine='') then inst.uneChaine := inst.unCode; end; end; end.