Problème de procedure

Résolu
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 - 1 févr. 2005 à 14:26
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 - 2 févr. 2005 à 14:40
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

lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
1 févr. 2005 à 14:40
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
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
2 févr. 2005 à 12:35
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
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 févr. 2005 à 23:01
C'est tout simplement ça. Sympa de poster la réponse tout de même.

http://www.croix-rouge.fr/index/partner_campagne.html
0
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
2 févr. 2005 à 07:47
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
2 févr. 2005 à 14:40
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
0