Appel procédure, initialisation composant

Résolu
cs_ridertart Messages postés 8 Date d'inscription lundi 11 décembre 2006 Statut Membre Dernière intervention 19 décembre 2006 - 11 déc. 2006 à 23:26
cs_ridertart Messages postés 8 Date d'inscription lundi 11 décembre 2006 Statut Membre Dernière intervention 19 décembre 2006 - 19 déc. 2006 à 15:22
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

cs_ridertart Messages postés 8 Date d'inscription lundi 11 décembre 2006 Statut Membre Dernière intervention 19 décembre 2006
19 déc. 2006 à 15:22
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.
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
12 déc. 2006 à 00:22
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)
0
Rejoignez-nous