« TObserverController (class) » : différence entre les versions

De Wiki1000
(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é ... »)
 
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
__NOTOC__
__NOTOC__
==Introduction==
==Introduction==
La classe TObserverController est une classe non persistante utilisable comme classe ancêtre d'un observeur.  
La classe TObserverController est une classe non persistante utilisable comme classe ancêtre d'un observateur.  


Un observeur est un objet lié à un objet source et notifié des changements de cet objet.
Un observateur est un objet lié à un objet source et notifié des changements de cet objet.


{{tip|Un observeur peut être utilisé comme contrôleur de saisie dans une interface utilisateur.}}
{{tip|Un observateur peut être utilisé comme contrôleur de saisie dans une interface utilisateur.}}


===Attributs===
===Attributs===
Ligne 37 : Ligne 37 :


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:Version900]]
[[category:Version900]]

Version du 28 février 2020 à 16:42

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.

Tip : Un observateur peut être utilisé comme contrôleur de saisie dans une interface utilisateur.

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é par les descendants de TObserverController.

OnMainObjectChanged Appelé lorsque l'objet observé change.
OnMainObjectPropChanged Appelé lorsque un attribut de l'objet observé change.
OnMainObjectBeforeCommit Appelé avant le commit de l'objet observé.

Voir aussi :

Exemple d'utilisation d'un observateur, dans cet exemple, la classe observée est WFClasseA :

<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>