OVH Cloud OVH Cloud

CB6 TMaskEdit test de saisie

6 réponses
Avatar
Olivier Sarda
Bonjour,
Ja fais un formulaire de saisie,
une question bete comment faire pour savoir si l'utilisateur a saisie
quelque chose dans un TMaskEdit

j'ai essaye

Code:
if(MaskCodePostal->Text==""){
// sans success
}

if(MaskCodePostal->GetTextLen()==0){
// sans succes
}

if (!MaskCodePostal->Modified){
//sans succes
}


En outre si je je modifie par derriere le formulaire cela plante

bref avez vous un idée ?

merci de vos conseils
_________________
Cordialement,
Sarda Olivier
_________________________________

6 réponses

Avatar
Cyrille Szymanski
On 2004-06-07, Olivier Sarda wrote:
Code:
if(MaskCodePostal->Text==""){
// sans success
}



Je ne pense pas que le == soit correct ici (à moins que Text soit une
classe dont l'opérateur == ait été surchargé). Si Text est un char*,
tu peux faire MaskCodePostal->Text[0]==0

--
cns
Avatar
Olivier Sarda
Text est tu type AnsiString propre a BCB6
"Cyrille Szymanski" a écrit dans le message de news:
40c491ef$0$25510$
On 2004-06-07, Olivier Sarda wrote:
> Code:
> if(MaskCodePostal->Text==""){
> // sans success
> }

Je ne pense pas que le == soit correct ici (à moins que Text soit une
classe dont l'opérateur == ait été surchargé). Si Text est un char*,
tu peux faire MaskCodePostal->Text[0]==0

--
cns


Avatar
Pierre Maurette
"Olivier Sarda" typa:

Bonjour,
Ja fais un formulaire de saisie,
une question bete comment faire pour savoir si l'utilisateur a saisie
quelque chose dans un TMaskEdit

j'ai essaye

Code:
if(MaskCodePostal->Text==""){
// sans success
}

if(MaskCodePostal->GetTextLen()==0){
// sans succes
}

if (!MaskCodePostal->Modified){
//sans succes
}


En outre si je je modifie par derriere le formulaire cela plante

bref avez vous un idée ?


Ça semble trivial. Si ce n'est qu'en CB6, une partie du taf est de
mettre le code au bon endroit.
Je vous suggère un test qui vous propose deux solutions (ce n'est pas
du code d'école):

Une fiche Form1, un bouton Button1 et un TMaskEdit MaskEdit1.

Dans Unit1.h :
class TForm1 : public TForm
{
__published: // Composants gérés par l'EDI
/* ......................... */
private: // Déclarations de l'utilisateur
AnsiString TextInitial;
bool MaskEditChanged;

Dans le gestionnaire OnCreate de Form1:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TextInitial = MaskEdit1->Text;
Button1->Caption = "Inchangé";
MaskEditChanged = false;
}

Dans le gestionnaire OnClick du bouton:
void __fastcall TForm1::Button1Click(TObject *Sender)
{

if(MaskEdit1->Text == TextInitial)
{
Button1->Caption = "Inchangé";
}
else
{
Button1->Caption = "Modifié";
}
}

Dans le gestionnaire OnChange du MaskEdit:
void __fastcall TForm1::MaskEdit1Change(TObject *Sender)
{
MaskEditChanged = (TextInitial == MaskEdit1->Text);
/* Régair au changement */
}

La solution du bouton et celle du OnChange sont indépendantes.
--
Pïerre
Avatar
Olivier Sarda
Je te remercie cependant si je saisie un fois ou
que je saissise puis que j'efface j'ai toujours la meme ereur
va voir a cette adresse pour plus d'explication de mon probleme

http://www.developpez.net/forums/viewtopic.php?t 5393&sid ba77c1b708842d
5690cd4fa97a4609

merci encore




"Pierre Maurette" a écrit dans le message de news:

"Olivier Sarda" typa:

>Bonjour,
>Ja fais un formulaire de saisie,
>une question bete comment faire pour savoir si l'utilisateur a saisie
>quelque chose dans un TMaskEdit
>
>j'ai essaye
>
> Code:
> if(MaskCodePostal->Text==""){
> // sans success
> }
>
> if(MaskCodePostal->GetTextLen()==0){
> // sans succes
> }
>
> if (!MaskCodePostal->Modified){
> //sans succes
> }
>
>
>En outre si je je modifie par derriere le formulaire cela plante
>
>bref avez vous un idée ?
Ça semble trivial. Si ce n'est qu'en CB6, une partie du taf est de
mettre le code au bon endroit.
Je vous suggère un test qui vous propose deux solutions (ce n'est pas
du code d'école):

Une fiche Form1, un bouton Button1 et un TMaskEdit MaskEdit1.

Dans Unit1.h :
class TForm1 : public TForm
{
__published: // Composants gérés par l'EDI
/* ......................... */
private: // Déclarations de l'utilisateur
AnsiString TextInitial;
bool MaskEditChanged;

Dans le gestionnaire OnCreate de Form1:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TextInitial = MaskEdit1->Text;
Button1->Caption = "Inchangé";
MaskEditChanged = false;
}

Dans le gestionnaire OnClick du bouton:
void __fastcall TForm1::Button1Click(TObject *Sender)
{

if(MaskEdit1->Text == TextInitial)
{
Button1->Caption = "Inchangé";
}
else
{
Button1->Caption = "Modifié";
}
}

Dans le gestionnaire OnChange du MaskEdit:
void __fastcall TForm1::MaskEdit1Change(TObject *Sender)
{
MaskEditChanged = (TextInitial == MaskEdit1->Text);
/* Régair au changement */
}

La solution du bouton et celle du OnChange sont indépendantes.
--
Pïerre


Avatar
BlueR
Bonjour

Tu as un problème avec les AnsiString ?
Je viens de tester ceci
if (MaskEdit1->Text == "") ShowMessage ("le TMaskEdit est vide");
ça marche parfaitement chez moi.

Mais si tu veux savoir s'il y a qq chose dedans, il faut mettre
if (MaskEdit1->Text != "")

--
BlueR
Avatar
Pierre Maurette
"Olivier Sarda" typa:

Je te remercie cependant si je saisie un fois ou
que je saissise puis que j'efface j'ai toujours la meme ereur
va voir a cette adresse pour plus d'explication de mon probleme

http://www.developpez.net/forums/viewtopic.php?t 5393&sid ba77c1b708842d
5690cd4fa97a4609


Ce n'est pas à proprement parler une erreur. C'est le fonctionnement
normal de TMaskEdit, qui génère une EDBEditError (voir Help) en cas
d'incompatibilité avec le masque. Il me semble que la vérification est
faite à la perte de focus (OnExit). La gestion par défaut de cette
exception explique dans une box que la saisie est incorrecte et que
ESC permet de réinitialiser la boîte de saisie.
Important: pour juger si ce comportement vous convient, il faut
impérativement tester votre programme en dehors de l'EDI (double clic
sur l'exe) et peut-être est-ce mieux en release ("Version finale" dans
Projet/Options/Compilateur).

Personnellement, je préfère généralement un TEdit et du code dans
OnChange et OnExit (par exemple) à un TMaskEdit.
Pour piger le fonctionnement de TMaskEdit, vous pouvez faire ce genre
de test:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Text = MaskEdit1->Text;
Edit2->Text = MaskEdit1->EditText;
}
Pensez que vous pouvez initialiser TMaskEdit::Text à une valeur
convenable, ce qui peut faciliter la saisie. Je n'ai pas trouvé de
moyen d'empêcher l'utilisateur d'effacer un caractère (un chiffre
obligatoire par exemple). On doit pouvoir le faire dans le OnKeyPress
ou le OnChange, mais ça va en contradiction avec une règle qui
voudrait qu'on évite de surcharger le comportement des composants
complexes.
Comme souvent, il y a un problème dans l'aide. Pour la chaine de
format, faire Aide/Index/TEditMask (et non TMaskEdit).

Mais bon, pour un code postal, un simple TEdit, une vérification "que
des chiffres et longueur <= 5" dans le OnChange, plus une vérification
finale à la validation du formulaire, roule raoul...
--
Pierre