« 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
 
(3 versions intermédiaires par le même utilisateur non affichées)
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 22 : Ligne 22 :


===Méthodes d'interface===
===Méthodes d'interface===
Les méthodes suivantes peuvent être implémenté par les descendants de TObserverController.
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é lorsque l'objet observé change.
|Appelée lorsque l'objet observé change.
|-
|-
|[[OnMainObjectPropChanged (TObserverController)|OnMainObjectPropChanged]]
|[[OnMainObjectPropChanged (TObserverController)|OnMainObjectPropChanged]]
|Appelé lorsque un attribut de l'objet observé change.
|Appelée lorsque un attribut de l'objet observé change.
|-
|-
|[[OnMainObjectBeforeCommit (TObserverController)|OnMainObjectBeforeCommit]]
|[[OnMainObjectBeforeCommit (TObserverController)|OnMainObjectBeforeCommit]]
|Appelé avant le commit de l'objet observé.
|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]]

Dernière version du 28 février 2020 à 16: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.

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

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