Réccupérer des données sur un autre Unit

m_cyril1 Messages postés 59 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 3 juin 2005 - 9 mai 2005 à 14:20
m_cyril1 Messages postés 59 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 3 juin 2005 - 11 mai 2005 à 09:00
J'ai fait un petit programme, celui-ci mémorise des chiffres entier sur une première form et sur la deuxième le résultat de la somme des chiffres s'affiche. Moi ce que je voudrait faire c'est que le calcul s'effectue sur le Unit de la deuxième Form et non que tout le programme soit sur l'unit de la prmière Form. mais je ne vois pas comment faire
J'ai modifier mon programme en:

{Unit (nom :memorisation) de la Form de la première form (nom:memo)}<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Memo: TMemo;


var Memoire:array of Real;
var n:Integer;


implementation


{$R *.dfm}


procedure TMemo.FormCreate(Sender: TObject);
begin
n:=0;
SetLength(Memoire, n);
MemoEd.Clear;
end;


procedure TMemo.MemoButClick(Sender: TObject);
begin
inc(n);
SetLength(Memoire, n);
Memoire[n-1]:=StrToInt(MemoEd.Text);
MemoEd.Clear;
end;


procedure TMemo.FermerButClick(Sender: TObject);
begin
close;
end;

{Unit (nom :result) de la Form de la segonde Form (nom:resultat)}

procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Resultat: TResultat;


implementation


{$R *.dfm}


procedure TResultat.FormCreate(Sender: TObject);
var i:Integer;
begin
For i=0 to ???
begin
???
end;
Resultat.Text:=IntToStr(???);
end;


procedure TResultat.FermerClick(Sender: TObject);
begin
Close;
end;

Donc faudrait que j'arrive à réccupérer les données du tableau dynamique pour pouvoir faire la somme et à remplacer les ???


end.

7 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
9 mai 2005 à 19:15
{Unit (nom :memorisation) de la Form de la première form (nom:memo)}<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />

type
TMemo = class(TForm)
private
{ Déclarations privées }
public
// Déclaration de ton tableau ici !!
Memoire:array of Real;
end;

var
Memo : TMemo ;

Utilisation :

Unit (nom :result) de la Form de la segonde Form (nom:resultat)}

procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Resultat: TResultat;


implementation


{$R *.dfm}



uses TMemo ;

procedure TResultat.FormCreate(Sender: TObject);
var i,Total:Integer;

begin
Total : = 0 ;
For i= 0 to Length(Memoire)-1 do
begin
Inc( Total, Memoire[i] ) ;
end;
Resultat.Text: =IntToStr(Total );
end;


procedure TResultat.FermerClick(Sender: TObject);
begin
Close;
end;

Cordialement.
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
9 mai 2005 à 19:17
oups uses Memorisation ; bien sur et pas uses TMemo ;

Cordialement.
0
m_cyril1 Messages postés 59 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 3 juin 2005
10 mai 2005 à 09:23
Ok! J'ai fait les modifications mais il n'apprécie pas la deuxième condition de la boucle For et ce qu'il y a dedans
Et en plus j'avais oublié un bouton pour lancer le calcul. Le Code ça donne:

{Unit (nom :memoriser) de la Form de la première form (nom:memo)}
public
{ Déclarations publiques }
Memoire:array of Real; end;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


var Memo: TMemo;
var n:Integer;

implementation


uses result;


{$R *.dfm}


procedure TMemo.FormCreate(Sender: TObject);
begin
n:=0;
SetLength(Memoire, n);
MemoEd.Clear;
end;


procedure TMemo.MemoButClick(Sender: TObject);
begin
inc(n);
SetLength(Memoire, n);
Memoire[n-1]:=StrToInt(MemoEd.Text);
MemoEd.Clear;
end;


procedure TMemo.FermerButClick(Sender: TObject);
begin
close;
end;


procedure TMemo.CalculerClick(Sender: TObject);
begin
Resultat.show;
end;

{Unit (nom :result) de la Form de la segonde Form (nom:resultat)}
var Resultat: TResultat;


implementation


uses Memoriser;


{$R *.dfm}


procedure TResultat.FormCreate(Sender: TObject);
var i,total:Integer;
begin
Total:=0;
For i=0 to Length(Memoire)-1 do
begin
Inc( Total, Memoire[i] );
end;
Resultat.Text:=IntToStr(Total);
end;


procedure TResultat.FermerClick(Sender: TObject);
begin
Close;
end;

Je sais que je ne suis pas doué, mais la j'ai juste fais un copier coller. J'ai essayer en déclarant n dans public et donc la boucle devient For i=0 to n-1 do, mais c'est pareil.

PS: Quel est l'avantage de déclarer ses tableaux ou certaines variables dans public
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
10 mai 2005 à 12:40
Désolé mais je t'ai répondu rapidement et sans vérifier.
Comme toujours :
"vite fait mal fait"

il faut écrire :

procedure TResultat.FormCreate(Sender: TObject);
var i,total:Integer;
begin
Total:= 0;
For i=0 to Length( Memo. Memoire)-1 do
begin
Inc( Total, Memo.Memoire[i] );
end;
Resultat.Text: =IntToStr(Total);end;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


En effet ton tableau mémoire est contenu dans ta fiche Memo.

On déclare Memoire en section public afin de pouvoir l'utiliser dans d'autres unités. On Aurait pu également le déclarer en variable globale, mais je ne suis pas pour...


Cordialement.
0

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

Posez votre question
m_cyril1 Messages postés 59 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 3 juin 2005
10 mai 2005 à 13:30
J'ai modifié et j'ai toujours les messages:
[Erreur] result.pas(37): La variable de contrôle de boucle FOR doit être une variable locale simple
[Erreur] result.pas(37): Types incompatibles : 'Boolean' et 'Integer'
[Erreur] result.pas(38): Expression attendu(e) mais 'BEGIN' trouvé(e)
[Erreur] result.pas(39): Types incompatibles
[Erreur fatale] memoriser.pas(32): Impossible de compiler l'unité utilisée 'result.pas'
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
10 mai 2005 à 19:03
Il manque juste le : du := !!!

For i : =0

Cordialement.
0
m_cyril1 Messages postés 59 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 3 juin 2005
11 mai 2005 à 09:00
Ouais maintenant avec le := ça fonctionne plus ou moins
Explication : pas d'erreur de compilation le programme de mémorisation fonctionne, on mémorise quelques chiffres, on appui sur calculer et la c'est le drame le TEdit est vide
La partie {Unit (nom :memoriser) de la Form de la première form (nom:memo)} n'a pas changé.

Et la partie {Unit (nom :result) de la Form de la segonde Form (nom:resultat)}
devient:

procedure FermerClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Resultat: TResultat;


implementation


{$R *.dfm}

uses Memoriser ;


procedure TResultat.FormCreate(Sender: TObject);
var i,Total:Integer;
begin
Total:=0 ;
For i:=0 to Length(Memo.Memoire)-1
do
begin
Inc( Total, Memo.Memoire[i] ) ;
end;
Resultat.Text:=IntToStr(Total );
end;


procedure TResultat.FermerClick(Sender: TObject);
begin
Close;
end;


end.
0
Rejoignez-nous