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 :

[Débutant] Appeller un form et attendre le résultat


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 114
    Par défaut [Débutant] Appeller un form et attendre le résultat
    Salut à tous,

    je cherche un exemple ultra basique d'une appli qui ferait ceci :

    - Dans un premier Form, on clique sur un bouton qui fait apparaitre un second Form (avec un ShowModal par exemple).

    - Dans le second form, on a une combo avec plusieurs valeurs, un bouton valider et un bouton quitter.

    - L'utilisateur choisit une valeur et clique sur 'Valider'

    - Le Form 1 récupère la valeur de la combo sélectionné par l'utilisateur.

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    en faisant rapide...
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormActivate(Sender: TObject);
        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);
    begin
    hide;
    form2.show;
    end;
     
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
     caption:=inttostr(form2.valeur);
    end;
     
    end.
     
     
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,unit1;
     
    type
      TForm2 = class(TForm)
        ComboBox1: TComboBox;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCreate(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
      private
        { Déclarations privées }
     
      public
        { Déclarations publiques }
          valeur:integer;
      end;
     
    var
      Form2: TForm2;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm2.ComboBox1Change(Sender: TObject);
    begin
    case combobox1.itemindex of
    0:valeur:=10;
    1:valeur:=20;
    //etc
    end;
     
    end;
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
    position:=poscreencenter;
    combobox1.Items.add('valeur1=10');
    combobox1.Items.add('valeur2=20');
    end;
     
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    form1.show;
    end;
     
    end.
    j'ai pas mis le bouton valider...
    cordialement

  3. #3
    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
    Par défaut
    Bonjour

    Avec une fonction appelante

    Sur form1 : un bouton et un edit
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, 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
     
    {$R *.dfm}
    uses unit2;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var chaine : string;
    begin
      if Form2.SaisieCombo(chaine) then edit1.Text:=chaine; // valeur récupérée si ok validé
    end;
     
    end.

    sur form 2 : une combobox (avec des valeurs), un bouton1 (ok) un bouton2 (quitter)
    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
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm2 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        ComboBox1: TComboBox;
    //    procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        function SaisieCombo(out S_Nom : string) : boolean;
      end;
     
    var
      Form2: TForm2;
      B_Valide : boolean;
     
    implementation
     
    {$R *.dfm}
     
    function tform2.SaisieCombo(out S_Nom : string) : boolean;
    begin
      result := false;
      S_Nom := '' ;
      with tform2.Create(application) do
      try
        showmodal;
        if B_Valide then // si ok validé
        begin
          S_Nom := combobox1.Text;
        end;
      finally
        release;
      end;
      result := B_Valide;
    end;
     
    // ok
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      B_Valide := true;
      close;
    end;
     
    // quitter
    procedure TForm2.Button2Click(Sender: TObject);
    begin
      B_Valide := false;
      close;
    end;
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
      B_Valide := false;
    end;
     
    end.
    La form2 est créée lors de l'appel à celle-ci par la fonction appelante
    Quand la saisie est fini elle se détruit et la valeur est récupérée par le paramètre si l'utilisateur a clické sur le bouton "ok".
    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.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Bonjour.

    Voici une façon de conceptualiser cela.
    Le code ne compile pas.Il sert à poser la réflexion.
    On peut, et au niveau de l'ensemble du projet, stoquer toutes les fiches clients dérivées dans une BPL. (FichesClients.bpl)

    Le record contiendra toutes les valeurs pouvant être saisies dans la fiches.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Unit Const;
     
    interface
     
    TClient = record
     ..............
    end; 
     
    .......
    end.
    La fiche de saisie:

    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
    Unit FicheSaisieClient;
    
    interface
    
    type
    
    
    TFormSaisieClient = class(TTemplateFormSaisie) // Template dérivé de TForm  
    FClient: TClient;
      procedure TFormSaisieClient.BtnValideClick(Sender: TObject);
    private
    public
     procedure ValideDonnees();   //verifie la saisie
     procedure DonneesDansRecord(); //sauvegarde les saisies dans le record  
    end;
    
    function SaisieDonneesClient(var Client: TClient): Boolean;
    
    implementation
    
    function SaisieDonneesClient(var Client: TClient): Boolean;
    var
    FormSaisieClient: TFormSaisieClient; 
    begin
    
          FormSaisieClient:= TFormSaisieClient .Create(Nil);
          with FormSaisieClient do
          try
             .......
            Result:= ShowModal= mrOk;
            if Result Client:= FClient
            else .....  
          finally
            FreeAndNil(FormSaisieClient);
          end;
    end;
    
    procedure TFormSaisieClient.BtnValideClick(Sender: TObject); 
    begin
      ValideDonnees();  
      DonneesDansRecord(); 
    end;
     
    procedure TFormSaisieClient.DonneesDansRecord();
    begin
    
        Fclient.Champ1 := ChampDeSaisie1;//On balance toute les saisies dans le record apres validation.
        Fclient.Champ2 := ChampDeSaisie2;
        .......   
    end;
    
    end.
    Un exemple d'appel de la fiche client depuis une autre fiche:
    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
    unit FicheUtilisatrice;
    
    interface
    
    type
      TFicheUtilisatrice = class(TForm)
        procedure ButtonSaisieClick(Sender: TObject); 
      end;
    
    var
     MonCLient: TClient; 
     Fiche: TFicheUtilisatrice;
    implementation
    
    procedure TFicheUtilisatrice .ButtonSaisieClick(Sender: TObject); 
    begin
       SaisieDonneesClient(MonCLient); // un simple appel pour récuperer toute les donnees, la fiche client contient tout le code utile.
    end;
    
    
    end.

    @+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 114
    Par défaut
    Merci messieurs !

    Je vais appliquer la méthode d'Hervé qui est la plus rapide à mettre en oeuvre. Mais j'aime bien aussi la méthode de François qu'il faudrait creuser.

    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant]Appeler un UserControl dans une Form
    Par Shr3ck dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/03/2009, 14h14
  2. [Dates] Appeler des fonctions sans attendre leurs résultats
    Par ipeteivince dans le forum Langage
    Réponses: 6
    Dernier message: 05/02/2008, 12h22
  3. Valider un form et lancer le résultat ds la fenêtre parent
    Par [DreaMs] dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 23/08/2005, 17h01
  4. [forms 9.04.0.19] Appel de form dans menu
    Par pdiaz dans le forum Forms
    Réponses: 6
    Dernier message: 06/07/2005, 08h05
  5. Réponses: 37
    Dernier message: 25/04/2005, 21h47

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