Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Débutant
Débutant Pour bien débuter avec Delphi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/12/2012, 23h40   #1
gaston11
Membre à l'essai
 
Homme armindo simao
Technicien maintenance
Inscription : novembre 2012
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme armindo simao
Localisation : France, Aude (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : novembre 2012
Messages : 50
Points : 20
Points : 20
Par défaut appel et passage de parametres

Re bonsoir
desolé de monopoliser cette rubrique mais je bloque et je vais faire dodo..
alors si ...

voilà mon souci,

j'ai "développé" mon petit exercice et là de nouveau coincé (oui je sais c'est une habitude )
cet exercice était de créer un graphique avec une sinusoïde, les axes xy avec l’échelle. ca c'est fait!

maintenant j'ai ajouté 2 bouton (frequence + et -)
comment faire pour passer la variable "frequence" que je modifie?
je n'arrive pas après avoir modifié celle-ci a rappeler la "procedure TForm1.BoiteDessinPaint(Sender: TObject);"

voici le code que j'ai déjà réaliser (je sais on peut faire mieux, mais pour l'instant....)

Merci


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
 
    BoiteDessin: TPaintBox;
 
    LabelResultat: TLabel;
    Label1Y: TLabel;
    Label1X: TLabel;
    Label0: TLabel;
    FrequenceMoins: TButton;
    Frequenceplus: TButton;
 
    procedure BoiteDessinClick(Sender: TObject);
    procedure BoiteDessinPaint(Sender: TObject);
    procedure FrequenceMoinsClick(Sender: TObject);
    procedure FrequenceplusClick(Sender: TObject);
 
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
 
var
  Form1: TForm1;
  frequence : Integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.BoiteDessinClick(Sender: TObject);
var x, y,z :integer;
begin
 
end;
 
procedure TForm1.BoiteDessinPaint(Sender: TObject);
var x, y,z : Extended;
    GX,GY,pasW,pasH,EchelleX,EchelleY :  integer;
    W,W2,H,H2, repere   : Integer;
    depart : array [1..2] of integer;
    arrive : array [1..2] of integer;
    first : boolean;
begin
      EchelleX :=50;
      EchelleY :=50;
      W:= BoiteDessin.Width;
      H:=BoiteDessin.Height;
      PasW := w div 10;
      Pash := H div 10;
      W2 := W Div 2;
      H2:=  H div 2;
      x:=0;
      y:=0;
      z:=0  ;
        depart[1]:=0;
        depart[2]:=0;
        first:= true;
      Form1.Caption:= 'Fréquence = ' + IntToStr (frequence) + ' Hz';
      boiteDessin.Canvas.MoveTo(W2,0);    { axe des y }
      BoiteDessin.canvas.lineto(W2,H);
      Label1Y.Caption := 'Axe Y';
 
       for  repere := 1 to (H div echelleY)   do
      begin
          if  ((H div (2*echelleY))-repere+1 ) <>0 then
          BoiteDessin.canvas.TextOut(w2-4,(repere*echelleY),   {echelle Y}
                        IntToStr( (H div (2*echelleY))-repere+1 ));
     end;
     for  repere := 1 to (W div echelleX)   do
     begin
          BoiteDessin.canvas.TextOut((repere*EchelleX),h2-10,   {echelle x}
                   IntToStr(repere-(w div (2*echelleX))));
     end;
     boiteDessin.Canvas.MoveTo(0,H2);    { axe des x}
     BoiteDessin.canvas.lineto(W,H2);
     Label1X.Caption := 'Axe X';
     For GX := 0 TO W do
     Begin
         x:= frequence*PI/W*GX-PI;
         y := sin(x);
         GY := round(-W/2/PI*Y+H/2);
         arrive[1] := GY;
         arrive[2] := GX;
         if first then
         begin
              depart[1] := GY;
              depart[2] := GX;
              first := false;
              BoiteDessin.Canvas.MoveTo(depart[2],depart[1])
          end;
          BoiteDessin.canvas.lineto(arrive[2],arrive[1]);
          depart[1]:=arrive[1];
          depart[2]:=arrive[2];
      End;
end;
 
procedure FrequenceMoins(Sender: TObject);
begin
 
end;
 
procedure TForm1.FrequenceMoinsClick(Sender: TObject);
begin
        dec(frequence);
          if frequence <1 then frequence :=1;
end;
     procedure TForm1.FrequenceplusClick(Sender: TObject);
begin
        inc(frequence);
 
end;
begin
    frequence :=10;
 
 
end.
gaston11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 00h17   #2
yvonic2010
Membre à l'essai
 
Inscription : février 2008
Messages : 39
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 39
Points : 20
Points : 20
Si le but est juste de rappeler la procédure BoiteDessinPaint :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
procedure TForm1.FrequenceMoinsClick(Sender: TObject);
begin
        dec(frequence);
          if frequence <1 then frequence :=1;
        BoiteDessinPaint(nil); //<== appelle de la procédure pour -
end;
     procedure TForm1.FrequenceplusClick(Sender: TObject);
begin
        inc(frequence);
        BoiteDessinPaint(nil);  //<== appelle de la procédure pour +
end;
Pas sur d'avoir tout compris mais si ca peut t'aider
yvonic2010 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 13h20   #3
gaston11
Membre à l'essai
 
Homme armindo simao
Technicien maintenance
Inscription : novembre 2012
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme armindo simao
Localisation : France, Aude (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : novembre 2012
Messages : 50
Points : 20
Points : 20
Citation:
Envoyé par yvonic2010 Voir le message
Si le but est juste de rappeler la procédure BoiteDessinPaint :

Code :
1
2
3
4
5
6
 
procedure TForm1.FrequenceMoinsClick(Sender: TObject);
 
 ******
        BoiteDessinPaint(nil);  //<== appelle de la procédure pour +
end;
Pas sur d'avoir tout compris mais si ca peut t'aider
si c'est ce que je cherchait!! merci!
mais comment savoir qu'il fallait mettre ce nil?? je ne l'ai pas encore rencontré!!

Merci a toi, ça m'a bien débloqué!!
gaston11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 14h23   #4
tourlourou
Modérateur
 
Homme Yves Lemaire
Biologiste ; Progr(amateur)
Inscription : mars 2005
Messages : 1 681
Détails du profil
Informations personnelles :
Nom : Homme Yves Lemaire
Âge : 50
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Biologiste ; Progr(amateur)

Informations forums :
Inscription : mars 2005
Messages : 1 681
Points : 3 092
Points : 3 092
Les procédures qui réagissent aux événements des composants ont un paramètre Sender qui permet de savoir qui appelle la procédure.

Exemple : j'ai 3 boutons qui servent à afficher chacun une image différente dans le même composant TImage. Je les fais pointer sur la même procédure de traitement du Click car le traitement est le même. Il suffit d'identifier le Sender (if Sender is Button1 then... ) pour le traitement variable.

Et quand on n'a pas besoin de connaître l'appelant, comme il faut bien passer le paramètre attendu à l'événement, on remplace par nil qui est la valeur non assignée d'un pointeur, ou vide d'un objet.

Si jamais le code de l'événement utilise le Sender sans avoir testé qu'il soit bien assigné, ça entraînera une violation d'accès : on essaie de faire fonctionner un objet inexistant. (Dans ce cas, tester : if Assigned(Sender) and (Sender is TButton) then TButton(Sender).Click; : teste qu'il soit assigné, que ce soit bien un bouton, puis déclenche le Click de cet objet en indiquant que c'est bien un bouton, et qu'il dispose de ses méthodes).
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits
tourlourou est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 16h15   #5
gaston11
Membre à l'essai
 
Homme armindo simao
Technicien maintenance
Inscription : novembre 2012
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme armindo simao
Localisation : France, Aude (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : novembre 2012
Messages : 50
Points : 20
Points : 20
Merci pour l'explication !
ça explique pas mal de choses.

c'est quand même bizarre quand dans les 4 ou 5 tutoriaux que j'ai déjà lu et/ou survolé, je n'aie rien vu concernant ces appels de procédures.

Cdt
gaston11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 16h21   #6
yvonic2010
Membre à l'essai
 
Inscription : février 2008
Messages : 39
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 39
Points : 20
Points : 20
Si tu as besoin de passer des paramètres dépendant de l'appelant, tu peux utiliser "self" à la place de "nil", comme ça via le if donné par tourlourou tu peux appliquer différents paramètres via le Sender.

En gros, dans la majeure partie des cas faut utiliser "nil" (moi je préfère faire une procédure pour chaque appelant, quand il y en a peu ça clarifie les choses), après on peut utiliser "self" voire même "Application" si on veut un peu pousser les choses.
yvonic2010 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h51.


 
 
 
 
Partenaires

Hébergement Web