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)

mercredi 23 avril 2008 à 15:36:52 | override et Inherited d' une fonction avec resultat.

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+







mercredi 23 avril 2008 à 15:49:56 | Re : override et Inherited d' une fonction avec resultat.

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.

++

mercredi 23 avril 2008 à 15:58:20 | Re : override et Inherited d' une fonction avec resultat.

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+


mercredi 23 avril 2008 à 16:06:32 | Re : override et Inherited d' une fonction avec resultat.

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]

mercredi 23 avril 2008 à 16:11:53 | Re : override et Inherited d' une fonction avec resultat.

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+


mercredi 23 avril 2008 à 16:14:07 | Re : override et Inherited d' une fonction avec resultat.

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+

mercredi 23 avril 2008 à 16:20:53 | Re : override et Inherited d' une fonction avec resultat.

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.

mercredi 23 avril 2008 à 17:13:33 | Re : override et Inherited d' une fonction avec resultat.

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+

mercredi 23 avril 2008 à 17:17:53 | Re : override et Inherited d' une fonction avec resultat.

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+

mercredi 23 avril 2008 à 17:50:21 | Re : override et Inherited d' une fonction avec resultat.

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


1 2

Cette discussion est classé dans : fonction, result, override, inherited, fontionxyz


Répondre à ce message

Sujets en rapport avec ce message

Perte de donnée [ par Spikto ] Bonjour j'ai une fonction qui permet de découper un variable de type texte mais j'ai des lettre qui disparaisse de temps en temps.Voici ma fonction ty mot-clé inherited et les fonction [ par JesseJames ] salut, j'ai un problème qui me torture la vie, help !Ayant 2 classes, A et B, A était la super-classe et B une classe fille.la méthode (fonction) de A fonction result TStrings [ par florenth ] Imaginez une fonction tres simple :function Transfert(memo : TMemo) : TStrings;var i : integer;beginfor i:=0 to memo.Lines.Count - 1 do result.Add(m manipulation tstringlist [ par loicbernard ] bonjour tout le monde, J'ai fait une petite fonction qui renvoit un TStringList. Mais je me demande comment je dois m'y prendre pour créer et libérer functions et assembleur intégré [ par barbichette ] Bonjour,j'ai un souci avec l'assembleur.J'ai un type TMyType=array[0..100] of byte;et une fonction :Function Calcul(a,b:TMyType):TMyType;assembler;asm Deplacer des fichiers [ par gpwebmaster ] Y'a t-il une fonction pour deplacer toutles fichiers d'un repertoire à un autre, parce qu'avec la fonction MoveFile ou MoveFileEx je ne peux déplcer q Calcul du temps écoulé entre deux dates.. [ par 68_abis ] Bonjour à tous,J'utilise la fonction time() en php pour connaitre le nombre de secondes écoulées entre deux dates..En php la date de référence pour le Affectation de pointeurs [ par divadav ] Bonjour à tous !!Je suis dans un projet, je monte un composant perso, et j'aurai besoin d'une fonction de ce style :procedure TStringGridPerso.SetPoin Réutilisation d'objet s TLabel dans une fonction [ par draft61 ] Hello! Je réalise un programme en Delphi, permettant de faire un ping d'une plage d'adresses IP.J'ai 254 Labels représentant chaque adresse.  Je souha gérer les fenêtre MDI fille MUTLIPLES [ par sylviecl ] Bonjour, J'ai récupéré sur le site (d'ailleurs bravo à celui qui la fait, c'est génial) comment gérer une fiche mdi fille unique mais le problème c'es


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.