Salut,

Aujourd'hui une classe de saisie de type InputQuery mais pour n valeurs à saisir, c'est la classe TSaisieEdit.

Voilà comment elle fonctionne :

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
#include "SaisieEdit.h"
...
TSaisieEdit *s=new TSaisieEdit("Titre");
 
s->AjouteChamp("Champ 1","Valeur 1");
s->AjouteChamp("Champ 2","Valeur 2");
s->AjouteChamp("Champ 3","Valeur 3");
s->AjouteChamp("Champ 4","Valeur 4");
s->AjouteChamp("Champ 5","Valeur 5");
 
s->Execute();
if (s->Valeur->Count>0)
{
   Edit1->Text=s->Valeur->Strings[0];
   Edit2->Text=s->Valeur->Strings[1];
   Edit3->Text=s->Valeur->Strings[2];
   Edit4->Text=s->Valeur->Strings[3];
   Edit5->Text=s->Valeur->Strings[4];
}
delete s;
La fonction AjouteChamp a 2 paramètres, le premier étant le nom du champ et le second sa valeur initiale.
Après exécution de la saisie, on récupère les valeurs dans la TStrings Valeur.
Si l'utilisateur annule la saisie, Valeur sera vide.

Voilà ce que ça donne en image :


le .cpp :

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
128
129
//---------------------------------------------------------------------------
#include "SaisieEdit.h"
//---------------------------------------------------------------------------
TSaisieEdit::TSaisieEdit(AnsiString titre)
{
   FTitre=titre;
   FValeur=new TStringList();
   FNomChamp=new TStringList();
}
//---------------------------------------------------------------------------
TSaisieEdit::~TSaisieEdit(void)
{
   delete FValeur;
   delete FNomChamp;
}
//---------------------------------------------------------------------------
void __fastcall TSaisieEdit::Valider(TObject *Sender)
{
   FValeur->Clear();
   for(int i=0;i<FListEdit->Count;i++)
      FValeur->Add(((TEdit *)FListEdit->Items[i])->Text);
   FPage->Close();
}
//---------------------------------------------------------------------------
void __fastcall TSaisieEdit::Annuler(TObject *Sender)
{
   FValeur->Clear();
   FPage->Close();
}
//---------------------------------------------------------------------------
void TSaisieEdit::AjouteChamp(AnsiString nomchamp,AnsiString valeurdefaut)
{
   FNomChamp->Add(nomchamp);
   FValeur->Add(valeurdefaut);
}
//---------------------------------------------------------------------------
void TSaisieEdit::Execute(void)
{
   TEdit * edit;
   TGroupBox * groupbox;
   TList * listgroupbox;
   TButton * boutonvalider;
   TButton * boutonannuler;
   TPanel * panel;
   // Page
 
   FPage=new TForm(NULL,0);
   FPage->Caption=FTitre;
   FPage->Position=poScreenCenter;
   FPage->BorderStyle=bsSingle;
   FPage->Height=(FNomChamp->Count+1)*HAUTEURCONTENANT+MARGEPAGEV;
   FPage->Width=LARGEUREDIT+4*MARGEOBJETH;
   FPage->BorderIcons >> biMinimize >> biMaximize >> biHelp >> biSystemMenu;
 
   // Création dynamique des ensembles de saisie
 
   listgroupbox=new TList();
   FListEdit=new TList();
   for (int i=0;i<FNomChamp->Count;i++)
   {
      groupbox=new TGroupBox(FPage);
      groupbox->Parent=FPage;
      groupbox->Caption=FNomChamp->Strings[i];
      groupbox->Top=i*HAUTEURCONTENANT;
      groupbox->Left=MARGEOBJETH;
      groupbox->Height=HAUTEURCONTENANT;
      groupbox->Width=LARGEUREDIT+2*MARGEOBJETH;
 
      listgroupbox->Add(groupbox);
 
      edit=new TEdit(groupbox);
      edit->Parent=groupbox;
      if (FValeur->Count>i)
         edit->Text=FValeur->Strings[i];
      else
         edit->Text="";
      edit->Top=MARGEEDITV;
      edit->Left=MARGEOBJETH;
      edit->Height=HAUTEURCONTENU;
      edit->Width=LARGEUREDIT;
 
      FListEdit->Add(edit);
   }
 
   // Panneau de validation
 
   panel=new TPanel(FPage);
   panel->Parent=FPage;
   panel->Top=FNomChamp->Count*HAUTEURCONTENANT;
   panel->Left=MARGEOBJETH;
   panel->Height=HAUTEURCONTENANT;
   panel->Width=LARGEUREDIT+2*MARGEOBJETH;
 
   boutonvalider=new TButton(panel);
   boutonvalider->Parent=panel;
   boutonvalider->Caption="&Valider";
   boutonvalider->Top=(HAUTEURCONTENANT-HAUTEURCONTENU)/2;
   boutonvalider->Left=MARGEOBJETH;
   boutonvalider->Height=HAUTEURCONTENU;
   boutonvalider->Width=LARGEURBOUTON;
   boutonvalider->Default=true;
   boutonvalider->Anchors >> akTop >> akLeft;
   boutonvalider->OnClick=Valider;
 
   boutonannuler=new TButton(panel);
   boutonannuler->Parent=panel;
   boutonannuler->Caption="&Annuler";
   boutonannuler->Top=(HAUTEURCONTENANT-HAUTEURCONTENU)/2;
   boutonannuler->Left=panel->Width-MARGEOBJETH-LARGEURBOUTON;
   boutonannuler->Height=HAUTEURCONTENU;
   boutonannuler->Width=LARGEURBOUTON;
   boutonannuler->Anchors >> akTop >> akRight;
   boutonannuler->OnClick=Annuler;
 
   FPage->ShowModal();
 
   for(int i=0;i<FListEdit->Count;i++)
      delete (TEdit *)FListEdit->Items[i];
   delete FListEdit;
   for(int i=0;i<listgroupbox->Count;i++)
      delete (TGroupBox *)listgroupbox->Items[i];
   delete listgroupbox;
 
   delete boutonannuler;
   delete boutonvalider;
   delete panel;
   delete FPage;
}
//---------------------------------------------------------------------------
et le .h

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
//--------------------------------------------------------------------------- 
#ifndef SaisieEditH
#define SaisieEditH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
#define HAUTEURCONTENU 25   // Hauteur des objets contenus dans les groupes
#define HAUTEURCONTENANT 50   // Hauteur des objets supports de groupes
#define LARGEUREDIT 300    // Largeur champs edit
#define LARGEURBOUTON 85     // Largeur bouton annuler et valider
#define MARGEPAGEV 30     // Marge verticale sur la construction de la page
#define MARGEOBJETH 10       // Marge horizontale pour la construction des objets contenus
#define MARGEEDITV 20     // Marge verticale pour la construction des edits dans les radiogroups
//---------------------------------------------------------------------------
class TSaisieEdit
{
   private:
      TStrings * FValeur;
      TStrings * FNomChamp;
      AnsiString FTitre;
 
      TList * FListEdit;
      TForm * FPage;
 
      void __fastcall Valider(TObject *Sender);
      void __fastcall Annuler(TObject *Sender);
   public:
      __property TStrings *Valeur = { read = FValeur };
 
      void AjouteChamp(AnsiString nomchamp,AnsiString valeurdefaut);
      void Execute(void);
 
      TSaisieEdit(AnsiString titre);
      ~TSaisieEdit(void);
};
//---------------------------------------------------------------------------
#endif
Je m'en sers assez souvent disons que je trouve utile de l'avoir sous le coude au cas où, ça permet de gagner du temps si le cas se présente. Et puis, pour les grosses applications, ça évite d'avoir des fiches à trainer partout avec deux, trois, quatre, cinq TEdit selon les besoins...