IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

appel et passage de parametres


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 44
    Points
    44
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Si le but est juste de rappeler la procédure BoiteDessinPaint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 44
    Points
    44
    Par défaut
    Citation Envoyé par yvonic2010 Voir le message
    Si le but est juste de rappeler la procédure BoiteDessinPaint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é!!

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    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 - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 44
    Points
    44
    Par défaut
    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

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    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.

Discussions similaires

  1. DOS passage de parametre à un .bat
    Par malbaladejo dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 26/11/2014, 15h44
  2. Réponses: 0
    Dernier message: 23/12/2010, 11h13
  3. Probleme de passage de parametre a un TQuery
    Par gve21 dans le forum C++Builder
    Réponses: 7
    Dernier message: 15/01/2004, 15h49
  4. Passage de parametre calculé
    Par soazig dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 06/06/2003, 16h25
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo