Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 2013
-
31 mars 2009 à 13:22
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 2013
-
3 avril 2009 à 00:45
Bonjour ,
j'ai un petit problème avec les property , je m'explique :
property MyVar : single read GetMyVar write SetMyVar ;
.... (le reste n'est pas obligatoire ... )
mon problème , c'est le suivant :
j'aimerais bien que ma procedure SetMyVar deviennent une fonction qui me retourne true quand ma variable est bien garnie et false quand il y a eu un problème
je recommence l'opération en faisant cette fois si :
2°) Mon problème
type
TMyObject = class (TQqCh)
private
// je transforme bêtement ma procedure en fonction ...
function SetMyVar ( AValue : single):boolean;
function GetMyVar : single;
public
property MyVar : single read GetMyVar write SetMyVar ;
.... (le reste n'est pas obligatoire ... )
et ça ne compile pas ,
erreur : [Erreur] Types incompatibles
pourtant j'utilise toujours le type single dans mon SetMyVar
comment faut-il faire ? ou je m'y prends mal ?
[ Forcement ,j'aimerais faire de même avec function GetMyVar : single
mais la ça va encore poser plus de problème , vu que si je mets boolean comme type de retour , là il y aura types incompatibles ! ]
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 31 mars 2009 à 15:01
Merci ok ,
donc pour tester dans le code je ferais quelque chose du genre
var
MyObject : TMyObject ;
...
MyObject := TMyObject.Create;
MyObject.MyVar := 0.25;
// on teste maintenant pour voir si la valeur a bien été affectée
if not MyObject.MyVarCheck then begin
MessageBox( blablablablabla ) ;
halt;
end;
C'est un peu fastidieux comme technique , non ?
Vaut-il mieux laisser les tomber les property dans ce cas là et garder les bon vieux gettors/settors
// bien sur dans ce cas ci , SetMyVar est une fonction avec boolean comme type //de retour ;)
if not MyObject.SetMyVar(0.25) then begin
MessageBox( blablablablabla ) ;
halt;
end;
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 31 mars 2009 à 19:08
Non impossible, un setter est toujours une procédure, avec comme paramètre une variable du type de la propriété et eventuellement un ou plusieurs index.
Ce que tu peux faire, c'est une propriété "LastError" (dernière erreur), que l'utilisateur pourra vérifier après chaque appel à des getter/setter, qui eux changeront la valeur de LastError selon la réussite ou l'échec de leur opération. Un peu à la manière des API et de GetLastError, ça me semble la solution la plus propre ?
Cordialement, Bacterius !
Vous n’avez pas trouvé la réponse que vous recherchez ?