Problème de procedure

Résolu
Signaler
Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
-
Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
-
Voilà je crée une procedure de cette forme :

Procedure initordi( chiffre : integer; ordi : TImage; chaine : String );
Begin
Case chiffre Of
0 :
Begin
ordi.picture.LoadFromFile( 'bille_bleue.bmp' );
chaine := 'bille_bleue.bmp';
End;
1 :
Begin
ordi.picture.LoadFromFile( 'bille_rouge.bmp' );
chaine := 'bille_rouge.bmp';
End;
2 :
Begin
ordi.picture.LoadFromFile( 'bille_verte.bmp' );
chaine := 'bille_verte.bmp';
End;
3 :
Begin
ordi.picture.LoadFromFile( 'bille_jaune.bmp' );
chaine := 'bille_jaune.bmp';
End;
4 :
Begin
ordi.picture.LoadFromFile( 'bille_blanche.bmp' );
chaine := 'bille_blanche.bmp';
End;
5 :
Begin
ordi.picture.LoadFromFile( 'bille_rose.bmp' );
chaine := 'bille_rose.bmp';
End;
6 :
Begin
ordi.picture.LoadFromFile( 'bille_orange.bmp' );
chaine := 'bille_orange.bmp';
End;
7 :
Begin
ordi.picture.LoadFromFile( 'bille_violet.bmp' );
chaine := 'bille_violet.bmp';
End;
End;
End;

et je l'apelle de cette manière :

initordi( random(8), ordi1, chaineordi1 );

Ma procédure me renvoie bien l'image que je choisi dans ordi1 mais elle me renvoie une chaîne vide et je ne vois pas quel est mon erreur.
Si quelqu'un peut aider à la trouver il serait très gentil.

Merci d'avance.

La puce

5 réponses

Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
1
J'ai trouvé, enfin je pense que c'est se qui provoquait l'erreur.
A la déclaration de ma procedure j'ai rajouter Var devant chaine et maintenant sa marche

La puce
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Les types de base (string, integer, boolean, etc) doivent être passés par adresse (var) si l'on veut retrouver la valeur modifiée à la sortie de ta routine.
Il en va tout autrement avec des objets qui sont des références (autrement dit des pointeurs masqués). Dans leur cas, c'est en réalité l'adresse de l'objet pointé qui est transmis.

Rappels sur le passage d'arguments à une autre routine en ce qui concerne les types de base :
1- aucune précision : transmission par valeur. Le compilateur crée une copie locale sur le tas et destruction à la sortie de la routine. La valeur reçue n'est donc pas modifiée puisque la routine appelée a travaillé sur une copie.

2 - var : passage par adresse. La valeur modifiée sera retournée à la routine appelante avec la valeur modifiée

3 - const : passage par adresse et la routine recevant le paramètre ne peut pas modifier la valeur de l'argument reçu.

3 - out : passage par adresse sans contrôle du type de l'argument reçu. La valeur modifiée est retournée à l'appelant.

Je pense que cela t'aidera à y voir plus clair maintenant.

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
C'est tout simplement ça. Sympa de poster la réponse tout de même.

http://www.croix-rouge.fr/index/partner_campagne.html
Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
1
Merci, mais je comprend pas trop pourquoi vu que j'ai pas besoin de mettre var devant mes images alors que je les modifies aussi....

La puce
Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
1
Ok, je te remercie pour tes explication, c'est super cool.
Au moins ici, on a des réponses, c'est pas comme en cours.

La puce