begin process at 2008 07 25 03:58:40
1 216 054 membres
37 nouveaux aujourd'hui
14 180 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : override et Inherited d' une fonction avec resultat. [ Divers / Aide et documentation ] (MAURICIO)

override et Inherited d' une fonction avec resultat. le 23/04/2008 15:36:52

MAURICIO
Salut à tous,

je fais le override d' une fonction comme ça dans un des mes compos:

protected
  procedure FontionXYZ: Boolean; override;

j' aimerai faire cela ::

procedure FontionXYZ: Boolean;
begin
  RESULT := Inherited FontionXYZ;

  if not RESULT
  then bla bla bla ...;
end;

Mais RESULT est toujours à true même lorsque la fonction originelle renvoie false.
Alors vrai bug ou je dois écrire cela d' une autre façon?

Pour l'instant j' ai fait un copier coller du code dans la fonction héritée mais ce serait plus correct d' utiliser Inherited ...

A+







Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 15:49:56

florenth
Membre Club
Salut !

A mon avis, ce serait plus simple si tu nous faisait un copier-coller de ta vraie fonction car ça m'étonnerait que ton code là compile (tu nous as pondu une procédure avec résultat ^^ et pas que ça d'ailleurs)

Mets donc le code de la procédure de l'ancêtre et celle qui ne fonctionne pas pour qu'on regarde ça de plus près.

++

Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 15:58:20

MAURICIO
Bem si ça compile ^^
Il s' agit de mon dernier compo posté hier :

    protected
      function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;



function TcyDBGrid.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  // doesn' t work because returns always true :
// RESULT := Inherited DoMouseWheelDown(Shift, MousePos);

  RESULT := false;  

  if Assigned(OnMouseWheelDown)
  then OnMouseWheelDown(self, Shift, MousePos, RESULT);

  if not RESULT      // Not handled
  then cyMouseWheelDown(self, Shift, MousePos, RESULT);
end;

A+


Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 16:06:32

florenth
Membre Club
A en voir ton code, tu passes Result dans la procédure OnMouseWheelDown qui modifie la valeur de Result (c'est un paramètre var).

Donc il se peut que la fonction ancêtre retourne False, mais que OnMouseWheelDown() modifie cette valeur en True, donc ton code d'en dessous n'est jamais exécuté !

[ou alors j'ai pas tout compris ce que tu souhaites faire]

Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 16:11:53

MAURICIO

Au lieu de faire cela: 
  RESULT := false;  

  if Assigned(OnMouseWheelDown)
  then OnMouseWheelDown(self, Shift, MousePos, RESULT);

  if not RESULT      // Not handled
  then cyMouseWheelDown(self, Shift, MousePos, RESULT);

Je veux faire cela:
  RESULT := Inherited DoMouseWheelDown(Shift, MousePos);

  if not RESULT      // Not handled
  then cyMouseWheelDown(self, Shift, MousePos, RESULT);

Malheureusement RESULT := Inherited DoMouseWheelDown(Shift, MousePos) est toujours true.

A+


Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 16:14:07

MAURICIO
La code suivant étant ce qui est dans DoMouseDown originel de TControl: 

  RESULT := false;  

  if Assigned(OnMouseWheelDown)
  then OnMouseWheelDown(self, Shift, MousePos, RESULT);

A+

Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 16:20:53

florenth
Membre Club
Réponse acceptée !
Ahhh ben voila !

Là y'a un problème ! (je sais, j'ai mis du temps à comprendre !)
Si tu places un point d'arrêt sur "RESULT := Inherited DoMouseWheelDown(Shift, MousePos)", un "Watch" sur la variable Result et que tu fais F7 lorsque tu arrives sur cette ligne, se passe-il un truc anormal ?

Tu verras au moins pourquoi la fonction renvoit False et non True.

Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 17:13:33

MAURICIO
En fait la syntaxe semble bonne!
RESULT := Inherited DoMouseWheelDown(Shift, MousePos);

Ça appelle l' événement OnMouseWheelDown (propriété FOnMouseWheelDown, j' ai vu ça avec F7).
Mais après ça va faire ce code:
function TcyDBGrid.SelectCell(ACol, ARow: Longint): Boolean;
begin
  Result := True; 
  if Assigned(FOnSelectCell) then FOnSelectCell(Self, ACol, ARow, Result);
end;

Puis reviens dans ma procedure ...
Le fait que SelectCell = true n' a rien à voir avec:
Inherited DoMouseWheelDown qui renvoie toujours true non?

D' ailleurs, je viens de voir cela:
function TCustomGrid.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := inherited DoMouseWheelDown(Shift, MousePos);
  if not Result then
  begin
    if Row < RowCount - 1 then Row := Row + 1;
    Result := True;
  end;
end;

Je fais comme eux ^^
Alors, une idée?

A+

Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 17:17:53

MAURICIO
Réponse acceptée !
Je suis bête:
en faisant Inherited DoMouseWheelDown ça appelle celle-ci:
function TCustomGrid.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := inherited DoMouseWheelDown(Shift, MousePos);
  if not Result then
  begin
    if Row < RowCount - 1 then Row := Row + 1;
    Result := True;
  end;
end;

et non pas celle-ci:
function TControl.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := False;
  if Assigned(FOnMouseWheelDown) then
    FOnMouseWheelDown(Self, Shift, MousePos, Result);
end;

merci Florenth, tu m' as mis sur la voie!

A+

Re : override et Inherited d' une fonction avec resultat. le 23/04/2008 17:50:21

florenth
Membre Club
De rien !
La VCL et ses méthodes bizarres semble en déstabiliser plus d'un ! (thwilliam lui aussi semble en baver avec elle)
Et moi le premier. Je ne te dis même pas le nombre d'heures passées à comprendre ces phénomènes étranges (voire carrément ne pas les comprendre...).


[Page 1 Page 2]
Classé sous : fonction, result, override, inherited, fontionxyz

Participer à cet échange

Pub



Appels d'offres

Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€
Demande de devis pour ...
Budget : 7 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS