Appel procédure, initialisation composant [Résolu]

Signaler
Messages postés
8
Date d'inscription
lundi 11 décembre 2006
Statut
Membre
Dernière intervention
19 décembre 2006
-
Messages postés
8
Date d'inscription
lundi 11 décembre 2006
Statut
Membre
Dernière intervention
19 décembre 2006
-
Salut à tous, j'ai un petit souci avec mon programme en delphi ...
Je veux créer une procédure faisant appel à des composant de ma Form1 genre TStringrid; TEdit; TLabeledEdit ... et pouvoir refaire appel à cette procédure plus tard.
Bon je met un peu de code pour que vous compreniez :

//un bout de mon programme et une partie de ma procédure
  m : Array[1..6,1..14] of real;
...
...
...
procedure AjusteT();
var
  i : integer; 
  StringGrid22 : TStringGrid;     // ?
  LabeledEdit3 : TLabeledEdit;   //?
  Edit7 : TEdit;      //?
//je ne sais pas si les 3 lignes au dessus sont nécéssaire mais sinon delphi indique un problème
//"undeclared identifier StringGrid22" par exemple. Mais ces composant sont déja déclaré
//dans la partie type du programme (tout au début)
begin
        StringGrid22 := Form1.StringGrid22;     // ?
        LabeledEdit3 := Form1.LabeledEdit3;     // ?
        Edit7 := Form1.Edit7;     // ?
//idem je ne sais pas si les 3 lignes au dessus sont nécéssaire mais sinon delphi indique un problème
//"undeclared identifier StringGrid22" par exemple
        m[1,13] := 0;   m[2,13] := 0;
        m[1,14] := 0;   m[2,14] := 0;
        For i:=1 to 12 do
        begin
               m[1,i] := StrToReal(StringGrid22.Cells[1,i]);  
               m[2,i] := m[1,i] + StrToReal(LabeledEdit3.Text);
        end;
...
...
...
end;

//puis plus tard j'appelle cette procédure

procedure TForm1.Button1Click(Sender: TObject);
begin
      AjusteT();
end;

Donc il y a plusieurs problèmes. Par exemple la valeur de mon LabeledEdit3 (lorsque je la teste plus loin)n'est pas la bonne .... C'est donc pour ca que je me suis dit qu'il y a un problème d'initialisation.

Pouvez vous m'indiquer ce qu'il faut faire pour remédier à celà ? Merci d'avance.

Sinon dites moi si ma façon de déclarer les composant (les 2*3 lignes en vert) est la bonne.

Je vous remercie d'avance.

A.

2 réponses

Messages postés
8
Date d'inscription
lundi 11 décembre 2006
Statut
Membre
Dernière intervention
19 décembre 2006

Salut,
Suite à tes conseil j'ai changé tout les real en extended, j'ai donc changé mes StringToReal en


StrToFloat().

Par contre pour ce qui est du changement avec :

Type





  TFMatrix = array[1..6,1..14] of single;






  TForm1 = class(TForm)
  ...
  private
  public
    procedure AjusteT(var aFM : TFMatrix);
  end;

implementation

var
  FM : TFMatrix;


procedure TForm1.AjusteT(var aFM : TFMatrix);
var
  i : integer; 

begin

  aFM[1,13] := 0;  
  aFM[2,13] := 0;
  aFM[1,14] := 0;  
  aFM[2,14] := 0;
  for i := 1 to 12 do begin
      aFM[1,i] := StrToFloat(StringGrid22.Cells[1,i]);  
      aFM[2,i] := aFM[1,i] + StrToFloat(LabeledEdit7.Text);
  end;
end;

Je n'ai pas osé le faire car c'est assez compliqué vu que ce que j'ai écris est uniquement un seul tableau et une seule de mes fonction ... j'ai environ 5 fonctions et environ 15 tableau (array)...

Il y aurait t'il une autre solution ?

Car à cause de celà la valeur contenu par exemple dans un LabeledEdit n'est pas là bonne lorsque je lui fais appel dans une procédure (procedure AjusteT();) par exemple le LabeledEdit7.Text même que celui inscrit.

...
Je ne sais pas quoi faire.
Merci d'avance.
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
m : Array[1..6,1..14] of single; { 336 octets }

ou pour plus de precisions :




m : Array[1..6,1..14] of extended;
{ 840 octets}

le type Real est a eviter...

procedure AjusteT;
var
  i : integer; 
begin
  with Form1 do begin
     m[1,13] := 0;  
     m[2,13] := 0;
     m[1,14] := 0;  
     m[2,14] := 0;
     for i := 1 to 12 do begin
         m[1,i] := StrToFloat(StringGrid22.Cells[1,i]);  
         m[2,i] := m[1,i] + StrToFloat(LabeledEdit7.Text);
     end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AjusteT;
end;

ou on peut egalement declarer AjusteT dans la zone Public de TForm1 ...
et la declarer ensuite comme cela :

Type
  TFMatrix = array[1..6,1..14] of single;

  TForm1 = class(TForm)
  ...
  private
  public
    procedure AjusteT(var aFM : TFMatrix);
  end;

implementation

var
  FM : TFMatrix;

procedure TForm1.AjusteT(var aFM : TFMatrix);

var

  i : integer; 
begin
  aFM[1,13] := 0;  
  aFM[2,13] := 0;
  aFM[1,14] := 0;  
  aFM[2,14] := 0;
  for i := 1 to 12 do begin
      aFM[1,i] := StrToFloat(StringGrid22.Cells[1,i]);  
      aFM[2,i] := aFM[1,i] + StrToFloat(LabeledEdit7.Text);
  end;
end;

<hr size="2" width="100%" />Croc (click me)