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 :

[D5] Peut on passer un paramètre avec ShowModal?


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut [D5] Peut on passer un paramètre avec ShowModal?
    Bonjour à toutes et à tous et bon week-end,
    Voici mon problème.
    L’utilisateur de mon appli choisi à l’aide d’un TUpDown une valeur numérique comprise entre 0 et 40.
    Le code dans l’évènement OnChangingEx détermine si des conditions sont remplies :
    - entre autres, la valeur dans le TEdit associé au TUpDown fera t’elle partie de la série (4,8,12,16,20,24,28,32,26,40) un multiple de 4.
    Si c’est le cas j’affiche par ShowModal une form contenant 10 TRadiogroup mais un seul doit être Enabled (celui qui correspond à la valeur, multiple de 4, qui s’affichera dans le TEdit).
    Je souhaite donc connaître une façon de passer un paramètre byte en ouvrant mon FORM2.SowModal, ainsi à l’aide d’un case parametre of je pourrai valider le bon objet.
    J’espère être clair dans ma formulation !
    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 48
    Points : 54
    Points
    54
    Par défaut
    Slt,
    Tu as une autre solutions bcp plus propre c'est de mettre une propriété sur ta FORM2 et avant de faire le ShowModal de renseigner la propriété ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Type 
      Form2 = class (TForm)
      ..
      ..
      Private
       FParametre  : Byte;
       Procedure SetParametre  (Value : Byte);
      Public
        Parametre  : Byte Read FParametre write SetParametre; //Parametre ou autre nom
      ..
      ..
    end;
    Et dans implémentation sur la procédure SetParametre tu fait ton Case Of
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure Form2.SetParametre(Value : Byte);
    Begin
      FParametre := Value;
      Case  Value of
        ..  
        ..
      end;
    end;
    Enfin avant de faire ton ShowModal dans ta form1 tu initialise Parametre avec la valeur que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Form2.Parametre := Valeur_Byte
      Form2.ShowModal
    Voilà pour une solution et je pense que c'est la plus propre.
    A+ et n'hesite pas

  3. #3
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut
    Merci pour ton post.
    Je dois partir maintenant, mais je testerai ça dès demain.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Si c’est le cas j’affiche par ShowModal une form contenant 10 TRadiogroup mais un seul doit être Enabled (celui qui correspond à la valeur, multiple de 4, qui s’affichera dans le TEdit).
    Je souhaite donc connaître une façon de passer un paramètre byte en ouvrant mon FORM2.SowModal, ainsi à l’aide d’un case parametre of je pourrai valider le bon objet.
    Variante simplifiée par action directe, depuis la Form1, sur les RadioGroup de la Form2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Dans l'unité de la Form1 :
            with Form2 do
            begin  Radiogroup1.enabled:=false; // R.A.Z   
                     ...
                     Radiogroup10.enabled:=false;    
                     case parametre of
                            ... :  Radiogroup1.enabled:=true; // Activation
                            ... :
                            ... : Radiogroup10.enabled:=true;
                            // on pourrait même ajouter radiogroup10.ItemIndex:=3; pour pré-sélectionner l'un des Items du TRadioGroup visé 
                     end;
                     ShowModal;
             end;
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par MelkInarian
    Si c’est le cas j’affiche par ShowModal une form contenant 10 TRadiogroup mais un seul doit être Enabled (celui qui correspond à la valeur, multiple de 4, qui s’affichera dans le TEdit).
    pourqoi afficher 9 TRadiogroup non enabled,
    pourqoi pas simlement un seul est le charger avec le code celon le choix dans form1??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    A mon avis, si la form2 contient 10 TRadiogroup distincts cela doit correspondre à un besoin ... par contre plutôt que de dire "mais un seul doit être Enabled" il serait effectivement préférable de dire "mais un seul nécessite d'être visible" à la fois) ... donc autant zwitcher les autres sur visible=false cela dégagera en même temps de l'espace sur l'écran.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 48
    Points : 54
    Points
    54
    Par défaut
    Gilbert Geyer :
    Variante simplifiée par action directe, depuis la Form1, sur les RadioGroup de la Form2
    Pour ma part je préfère gérer éventuellement les Radiogroup1.Enabled (ou visible) dans la Form2 lors de l'affectation de la propriété Parametre (donc dans SetParametre) car cela permet de reutiliser cette forme autre part dans l'application sans avoir à ce soucier de la gestion des Radiogroup (puisque centralisé dans la Form2) et cela me semble plus propre et plsu facile à maintenir.

    M'enfin après c'est une question de point de vue et cela dépend aussi de l'utilisation faite de la Form2......

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Vu. A MelkInarian de choisir en fonction de son point de vue et de l'utilisation.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Avec une procedure appelante

    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
    type
      TForm2 = class(TForm)
        ...
      private
     
      public
        procedure ChoixBtRadio(Bt_Valeur : byte);
      end;
     
    var
      Form2: TForm2;
     
    implementation
    {$R *.dfm}
     
    procedure tform2.ChoixBtRadio(Bt_Valeur : byte);
    begin
      with tform2.Create(application) do
      try
        // init des radios
        ...
        // choix du radio
        case Bt_Valeur of
          ...
        end;
        showmodal;
      finally
        release;
      end;
    end;
    L'appel en une seule ligne de code depuis form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Form2.ChoixBtRadio(TaValeurParametre) ;
    Tu peux adapter ta procédure appelante : paramètre en entré/sortie (var), plusieurs paramètres, type perso,
    ou remplacer par une fonction suivant les besoins.

    Voir un exemple avec fonction et paramètre en sortie à http://www.developpez.net/forums/sho...d.php?t=300593

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  10. #10
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut
    Je viens de rentrer et donc de voir tous vos posts.
    Merci
    Citation Envoyé par Gilbert Geyer
    A mon avis, si la form2 contient 10 TRadiogroup distincts cela doit correspondre à un besoin ... par contre plutôt que de dire "mais un seul doit être Enabled" il serait effectivement préférable de dire "mais un seul nécessite d'être visible" à la fois) ... donc autant zwitcher les autres sur visible=false cela dégagera en même temps de l'espace sur l'écran.
    Effectivement cela correspond à un besoin, et c'est enable à false qui me convient, en effet tous les 4 niveaux on peut accéder (en saisie) à un nouvel objet et pas aux autres par contre même s'ils sont inaccessibles, on peut visualiser ce qui avait été coché lors des niveaux précédents.
    Je viens de tester la méthode de markk qui me paraît séduisante, mais j'ai une erreur à la compil après le Read sur la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parametre  : Byte Read FParametre write SetParametre; //Parametre ou autre nom
    avec le message
    ';' attendu mais identificateur 'Read' trouvé(e)
    Je suis débutant donc je vais aussi tester la méthode de rv26t et de Gilbert Geyer.
    Faire plusieurs essais cela me permet d'apprendre.

    Merci en attendant (je posterai le résultat dans les jours à venir).

  11. #11
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par MelkInarian
    erreur à la compil après le Read sur la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parametre  : Byte Read FParametre write SetParametre; //Parametre ou autre nom
    avec le message

    Je suis débutant donc je vais aussi tester la méthode de rv26t et de Gilbert Geyer.
    Faire plusieurs essais cela me permet d'apprendre.

    Merci en attendant (je posterai le résultat dans les jours à venir).
    certainement un tout petit oubli de la part de markk, il faut juste ajouter le mot clé property, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property Parametre  : Byte Read FParametre write SetParametre; //Parametre ou autre nom

  12. #12
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par evarisnea
    certainement un tout petit oubli de la part de markk, il faut juste ajouter le mot clé property, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property Parametre  : Byte Read FParametre write SetParametre; //Parametre ou autre nom
    Super c'est exactement ce que j'attendais de mon appli.
    Merci evarisnea et markk.
    Je ferais les test des autres méthodes un peut plus tard!
    Merci aussi à tous ceux qui ont cherché,
    c'est sympa l'entraide
    Il vaut mieux un qui sait que dix qui cherchent!

  13. #13
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut [D5] Peut on passer un paramètre avec ShowModal?
    Bonsoir!
    J'ai posé récemment posté une question avec ce même titre.
    MelkInarian 21/04/2007 11h10
    Markk 21/04/2007 11h25 (entre autres) m’a aimablement répondu.
    En poursuivant ma réflexion sur le sujet, j’ai essayé de modifier le source qu’il m’a concocté mais il est évident que je n’ai pas tout compris puisque la transposition ne fonctionne pas. (j’ai essayé de coupler 2 sources différentes http://www.developpez.net/forums/sho...d.php?t=300593
    Tout d’abord voici mes sources (Ceci est un cas d’école) :
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    uses Unit2;
     
    {$R *.DFM}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var ValInt : Byte;
    begin
      Form2.fTitre := 'Définir la valeur de Force ...';
      Form2.ValeurMaxTrackBar := 12;
      if Form2.ValeurRetourTrackBar(ValInt) then edit1.Text:=IntToStr(ValInt); // valeur récupérée si ok validé
    end;
     
    end.
    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
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls;
     
    type
      TForm2 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        TrackBar1: TTrackBar;
        Label1: TLabel;
        Label2: TLabel;
        LblMax: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure TrackBar1Change(Sender: TObject);
      private
        { Déclarations privées }
        ValMaxTB  : Byte;
        Procedure SetValMaxTB(Value : Byte);
      public
        { Déclarations publiques }
        fTitre : String;
        property  ValeurMaxTrackBar  : Byte Read ValMaxTB write SetValMaxTB;
        function ValeurRetourTrackBar(out ValeurEntier : Byte) : boolean;
     end;
     
    var
      Form2: TForm2;
      B_Valide : boolean;
    implementation
     
    {$R *.DFM}
    function tform2.ValeurRetourTrackBar(out ValeurEntier : Byte) : boolean;
    begin
      result := false;
      ValeurEntier := 0;
      Form2.Caption := fTitre;
      LblMax.Caption := IntToStr(ValeurMaxTrackBar);
      TrackBar1.Max := ValeurMaxTrackBar;
      with tform2.Create(application) do
      try
        showmodal;
        if B_Valide then // si ok validé
        begin
          ValeurEntier := TrackBar1.Position;
        end;
      finally
        release;
      end;
      result := B_Valide;
    end;
     
    procedure TForm2.SetValMaxTB(Value : Byte);
    Begin
      ValMaxTB := Value;
      TrackBar1.Max := ValMaxTB;
    end;
     
    procedure TForm2.Button1Click(Sender: TObject); // ok
    begin
      B_Valide := true;
      close;
    end;
     
    procedure TForm2.Button2Click(Sender: TObject);  // quitter
    begin
      B_Valide := false;
      close;
    end;
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
      B_Valide := false;    // Initialisation
    end;
     
    procedure TForm2.TrackBar1Change(Sender: TObject);
    begin
      Label1.Caption := IntToStr(TrackBar1.Position);
    end;
     
    end.
    Maintenant ce que je souhaite voir faire à mon prog.
    Form1 contient simplement un bouton et un édit.
    Si l’on presse le bouton Form2 apparaît contenant un TrackBar, 3 labels et 2 boutons.
    Les 3 labels représentent :
    -la valeur d’origine,
    -la valeur de fin
    -la valeur en cours du TB.
    Les 2 boutons :
    - OK ;
    - - Annul ;
    L’utilisateur doit pouvoir faire varier la position du TB et lorsqu’il est satisfait il presse OK. L’édit de Form1 est alors mis à jour avec TrackBar1.Position.

    Je souhaite par ailleurs mettre à jour :
    -Form2.caption
    - TrackBar1.Max
    avant l’appel à showmodal.
    Il y a plusieurs essais sur les sources donc il y a des résidus indésirables...
    Le titre de Form2 ne se met pas à jour ni TrackBar1.Max
    Quelqu'un peut-il m'expliquer ou je m...

Discussions similaires

  1. Passer des paramètres avec Connect()?
    Par Arkhiall dans le forum wxWidgets
    Réponses: 0
    Dernier message: 15/04/2008, 23h31
  2. [D7] Passer des paramètres avec Synchronise
    Par Hell dans le forum Langage
    Réponses: 4
    Dernier message: 12/01/2008, 17h40
  3. Réponses: 5
    Dernier message: 16/11/2006, 07h09
  4. [Tableaux] passer un paramètre avec un popup
    Par lnikolanta dans le forum Langage
    Réponses: 6
    Dernier message: 11/10/2005, 16h36
  5. Réponses: 2
    Dernier message: 12/09/2005, 15h33

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