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é ... »)
 
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 à 17: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-20px.png 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 :

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.
Outils personnels