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

C++Builder Discussion :

Objet de saisie TSaisieEdit


Sujet :

C++Builder

  1. #1
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut 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 : 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...

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est vrai qu'Embarcadero a un peu tardé pour fourni la variante multi-chaine de InputQuery

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    extern PACKAGE bool __fastcall InputQuery(
      const System::UnicodeString ACaption,
      System::UnicodeString const *APrompts,
      const int APrompts_Size,
      System::UnicodeString *AValues,
      const int AValues_Size,
      _di_TInputCloseQueryFunc CloseQueryFunc = _di_TInputCloseQueryFunc())/* overload */;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. [XL-2007] Utiliser des données saisies comme nom d'objet
    Par Tchebichef dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/09/2014, 22h53
  2. [Débutant] créer des objets pour fonction de saisie automatique
    Par problems99 dans le forum MATLAB
    Réponses: 1
    Dernier message: 13/12/2010, 11h46
  3. [AC-2003] définition des Propriétés des objets: vba ou formulaire de saisie
    Par Jones dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/05/2010, 10h14
  4. [Débutant] Saisie avec objet
    Par gregory.bts dans le forum Langage
    Réponses: 23
    Dernier message: 10/10/2006, 13h39
  5. [PowerBuilder] Objet d'un datawindow en saisie
    Par skynet dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 12/09/2005, 13h57

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