Objet de saisie TSaisieEdit
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:
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:
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:
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...