1 variable pour 2 unit [Résolu]

Signaler
Messages postés
26
Date d'inscription
vendredi 7 avril 2006
Statut
Membre
Dernière intervention
1 juin 2008
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
bonjour,
je dispose de deux unit dans la premiere j'ai declaré une variable globale a:byte apres je lui affecte un nombre (ex: 5) maintenant je passe à la deuxieme unit et je cree un edit et je lui affect la variable "a" en utilisant biensur inttostr(a). Le probleme c'est que je trouve un '0' dans edit. Comment faire ?merci

8 réponses

Messages postés
26
Date d'inscription
vendredi 7 avril 2006
Statut
Membre
Dernière intervention
1 juin 2008

au fait j'ai trouver l'erreur, j'ai toucher au public et autre choses mais j'ai vu qu'il suffit juste d'ajouter uses unit1; dans implementation et c'est tout.
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
Salut,

il faut déclarer ta variable dans la section Interface de l'unit1:

unit Unit1;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;


type
TForm1 = class (TForm)
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Form1: TForm1;
Ma_Variable : Byte;


implementation


{$R *.dfm}

...
Begin
Ma_Variable : = 125;
End;
...


<HR>

<HR>

unit Unit2;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;


type
TForm2 = class (TForm)
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Form2: TForm1;
implementation


{$R *.dfm}

Uses Unit1;

...
Begin
Edit1.Text : = IntToStr(Ma_Variable);
End;
...

Evite déjà des variables locales d'une lettre
donne un nom plus explicite à tes variables.

@ Francky
Byte est compris dans l'interval de Integer
il n'y a donc pas transtypege a faire


<HR>

n'oubliez pas de cliquer sur Réponse Acceptée
si elle vous convient


<HR>

@+
Cirec

Salut

Tu peux donner ton code stp pour que l'on puisse y voir clair ??

Merci

Pardon je n'avais pas vu

a est un byte et tu fais inttostr(a). Là il y a un soucis non?

Excuse moi mais tu peux m'explique comment tu fais pour faire inttostr(a) alors que a est une variables de type byte ???

C'est une erreur dans ta question ??
Messages postés
26
Date d'inscription
vendredi 7 avril 2006
Statut
Membre
Dernière intervention
1 juin 2008

ben essaye crée un edit et dans le programme met " edit1.text:=(inttostr(a)); " c'est tout!

Fais attention avec ce genre de chose : on doit faire du transpytage normalement. La ca va ca passe mais tu risques de rencontrer des soucis a faire cela
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
non francky ... pas besoin de transtyper les entiers ...

IntToStr accepte aussi bien un byte, qu'un smallint, qu'un word ect... et meme le cardinal et le int64 ...

donc aucun probleme ...

le probleme vient plutot des float qui selon leurs precision ont des decimales erronées aprés cette precision... et aussi il ne se gere pas pareils au niveau des registre CPU ... meme si on ne fait pas de l'assembleur le programme lui reste compilé en assembleur ... donc ...

au mieux, ce que je prefere par dessus tout ... la fonction Format qui accepte tout les types et est aussi performantes que les fonction inttostr, floattostr ect...

edit1.caption := format('%d',[A]);


avantage on peu meme ajouter des 0 devant la valeur

edit1.caption := format('%.4d',[A]); { renvois : '0000'...'0255' }