cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
23 avril 2008 à 15:36
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
23 avril 2008 à 17:55
Salut à tous,
je fais le override d' une fonction comme ça dans un des mes compos:
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 23 avril 2008 à 16:20
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.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 23 avril 2008 à 17:17
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;
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 23 avril 2008 à 15:49
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.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 23 avril 2008 à 15:58
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 23 avril 2008 à 16:06
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]
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 23 avril 2008 à 17:13
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;
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 23 avril 2008 à 17:50
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...).