TFils = class
protected
procedure SetVal(const Value: integer); override;
end;
implementation
procedure TPere.SetVal(const Value: integer);
begin
if Assigned(OnEvent) then
OnEvent(Value); // (oui oui, je sais que value est const, c'est juste pour l'exemple)
//ici, Value peut etre modifie par l'evenement
...
end;
procedure TFils.SetVal(const Value: integer);
begin
inherited SetVal(Value);
//ici, je voudrai pouvoir recuperer la valeur eventuellement modifiée dans l'evenement de la procedure de TPere
...
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 5 sept. 2007 à 23:04
heu je crois qu'on s'est mal compris foxi !!!
ma fonction SetVal est le setter d'une property ... donc impossible de lui donner un parametre var !
et c'est gentil mais je connais quand meme la difference entre const et var (et meme out !)
j'ai resolu le probleme en faisant une fonction intermediaire, mais j'aimerai quand meme trouver une autre solution car ca me semble pas tres propre. j'ai fait ainsi :
type
TChangeEvent = procedure( var Val: integer) of object;
procedure SetPropriedad(const Value: integer); override;
function GetPropriedad: integer; override;
end;
procedure TPadre.TrySetPropriedad(const Value: integer);
var
v: integer;
begin
v := Value;
OnChange(v); // modif eventuelle de v SetPropriedad(v); // appel de la fonction heritee avec la nouvelle valeur
end;
procedure THijo.SetPropriedad(const Value: integer);
begin
//La value a ete modifiee par le TrySetPropriedad
end;
...
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 5 sept. 2007 à 21:12
type
TPapa = class(TObject)
public
procedure TestA(var V : integer); virtual;
function TestB(const V : integer) : integer; virtual;
end;
TFiston = class(TPapa)
public
procedure TestA(var V : integer); override;
function TestB(const V : integer) : integer; override;
end;
{ TPapa }
procedure TPapa.TestA(var V: integer);
begin
V := not V;
end;
function TPapa.TestB(const V: integer): integer;
begin
result := not V;
end;
{ TFiston }
procedure TFiston.TestA(var V: integer);
var VOld : integer;
begin
VOld := V;
inherited TestA(V);
MessageDlg(format('TESTA : Ancienne : %.8x // Nouvelle :%.8x',[VOld, V]),mtInformation,[mbOk],0);
end;
function TFiston.TestB(const V: integer): integer;
var VNew : integer;
begin
VNew := inherited TestB(V);
MessageDlg(format('TEST B : Ancienne : %.8x // Nouvelle :%.8x',[V, VNew]),mtInformation,[mbOk],0);
end;
TFils = class(TPere)
private
function DoBeforeChange(const Value : integer) : integer; override;
public
property OnBeforeChange;
end;
{ TPere }
function TPere.DoBeforeChange(const Value : integer) : integer;
begin
result := value;
if Assigned(fOnBeforeChange) then
fOnBeforeChange(self, result);
end;
procedure TPere.SetVal(Value: integer);
begin
fVal := DoBeforeChange(Value);
end;
{ TFils }
function TFils.DoBeforeChange(const Value : integer) : integer;
begin
result := inherited DoBeforeChange(Value);
end;