begin process at 2012 05 30 18:28:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

TEdit problème


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

TEdit problème

jeudi 10 février 2005 à 03:06:19 | TEdit problème

vez_from_hell

bonsoir
je travail avec Borland C++ Builder 5 et je souhaite que mon TEdit devienne une variable int.

exemple:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
AnsiString var = Edit1->Text;       
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int nb_un;

nb_un=random(1+99);


if(Edit1>nb_un)
{
   MsgBox("Entrez un plus petit chiffre");
}
if(Edit1<nb_un)
{
   MsgBox("Entrez un plus grand chiffre");
}
if(Edit1 == nb_un)
{
   MsgBox("Vous l'avez eu");
}
}
//---------------------------------------------------------------------------


je sais que c'est très basique mais je suis débutant et c'est mon premier programme en c++
alors si quelqu'un voudrait m'aider svp soit en corrigeant mes erreurs ou simplement me disant comment on fait pour mettre un TEdit en variable int.

jeudi 10 février 2005 à 09:59:24 | Re : TEdit problème

Dvdmizo

Salut,

j'ai refait ton petit prog voici le source :

j'ai juste placé un TEdit et un TBitBtn sur la form

tout d'abord le .h
unit1.h

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // Composants gérés par l'EDI
   TEdit *Edit1;
   TBitBtn *BitBtn1;
   void __fastcall Edit1KeyPress(TObject *Sender, char &Key);
   void __fastcall BitBtn1Click(TObject *Sender);
private:    // Déclarations utilisateur
public:        // Déclarations utilisateur
   __fastcall TForm1(TComponent* Owner);
   void choisis_un_nombre(void) ;
   unsigned int le_nombre ;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


et voici  le .cpp
unit1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
void TForm1::choisis_un_nombre(void)
{
   randomize() ;  // initialise le générateur de nombre aléatoires
                  // très utile car sans lui à chaque redémarrage on obtiendrait
                  // toujours la même séquence
                  // randomize est definie dans <time.h>
   le_nombre = random(1+99);  // la fonction random est définie dans <stdlib.h>
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   choisis_un_nombre() ;   // au démarage on commence par choisir un nombre
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
   // cet évenement est appelé quand on appuie sur une touche
   // la variable Key contient le code de la touche appuyée

   // Si on appuie sur autre chose que des touches entre '0' & '9'
   // et autre chose que la touche 'Backspace' (effacement juste au dessus de 'return')
   // ou encore si c'est autre chose que la touche 'entrée'
   if((Key < '0' || Key > '9') && Key != 8 && Key != 13)
   {
      Key = 0 ;   // on annule la touche en mettant 0 dedans
   }
   if(Key == 13)  // si on appuie sur la touche 'entrée'
   {
      BitBtn1Click(Sender) ;  // on force l'appel à la fonction de click du bouton
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
   unsigned int nombre_saisi ;
   char message[100] ;

   try   // on essaye de récupérer en int la valeur saisie dans Edit1
   {
      nombre_saisi = Edit1->Text.ToInt() ;
   }
   catch(...)  // si la valeur déclenche une exception car elle n'est
               // pas transformable en int on averti l'utilisateur
   {
      Application->MessageBoxA("Le nombre saisi n'est pas valide", "Erreur", MB_OK|MB_ICONSTOP) ;
      return ; // et on sort de la fonction
   }

   // si tout s'est bien passé...

   if(nombre_saisi < le_nombre)
   {
      Application->MessageBoxA("Trop petit", "Raté", MB_OK|MB_ICONINFORMATION) ;
   }
   if(nombre_saisi > le_nombre)
   {
      Application->MessageBoxA("Trop grand", "Raté", MB_OK|MB_ICONINFORMATION) ;
   }
   if(nombre_saisi == le_nombre)
   {
      // sprintf est définie dans <stdio.h>
      sprintf(message, "Le nombre était bien : %d", le_nombre) ;
      Application->MessageBoxA(message, "Raté", MB_OK|MB_ICONINFORMATION) ;

      // on choisit un autre nombre puisque le précédent a été trouvé
      choisis_un_nombre() ;

      // et on avertit le joueur qu'on est prêt à recommencer...

      Application->MessageBoxA("Un nouveau nombre a été choisi, cliquer sur OK pour continuer à jouer", "Prêt", MB_OK|MB_ICONINFORMATION) ;
   }
}
//---------------------------------------------------------------------------

voila...
quelques petites explications sur le conversion en int d'un TEdit:
Un TEdit contient une propriété Text qui n'est autre qu'un AnsiString. Les AnsiStrings possèdent des Methodes pour travailler au niveau des chaines, ici j'ai utilisé ToInt() pour convertir en int mais il en existe plein (ToDouble(), Length(), etc....)
Le truc avec la Methode ToInt() c'est qu'elle déclenche une exception si la valeur est incorrecte (chaine vide ou bien contenant des caractères impossibles à convertir en entiers (lettres ou ponctuation))
pour éviter que l'utilisateur ne puisse saisir n'importe quoi, j'ai fait un filtrage directement en réponse à l'évenement d'appui sur une touche pour ne garder que les chiffres ou les caractères qui m'interressent (entrée ou effacement).
bon, maintenant la conversion n'échouera pas à cause de mauvais caractères, mais la chaine peut très bien être vide. Pour réagir à cela, 2 possibilités :

- soit en testant que la chaine n'est pas vide :

if(Edit1->Text == "")
{
    Application->MessageBoxA("La chaine est vide", "Erreur", MB_OK) ;
}

- soit en interceptant l'exception et en affichant un message personnalisé, ce que j'ai fait dans l'exemple ci-dessus avec le bloc Try { } Catch {} . Personellement je préfère cette methode car elle me permet de m'assurer que je n'ai pas oublié une situation à traiter et que je ne me retrouverai pas avec un message en anglais incompréhensible pour l'utilisateur au cas où on tomberait sur une situation imprévue ...

bon, je crois que je vais arrêter là

si tu as des questions n'hesite pas ;-)

DvdMizo
vendredi 11 février 2005 à 23:22:12 | Re : TEdit problème

vez_from_hell

merci ça m'a beaucoup aidé mais maintenant j'ai un autre problème.
Si je veut filtrer les nombres qui sont supérieur à 99 et faire apparaître un MessageBox pour avertir de l'invalidité, ça ne fonctionne pas. J'ai essayé

if(Edit1->Text > "99")
        {
                Application->MessageBoxA("This is not valid. Try again", "Error", MB_OK|MB_ICONSTOP) ;
                return;
        }

mais ça ne marche pas.
Pouvez vous m'indiquer l'astuce svp.
Merci d'avance
samedi 12 février 2005 à 17:34:54 | Re : TEdit problème

Dvdmizo

si tu récupères la valeur dans un int ça sera plus facile ;-)

...
unsigned int nombre_saisi ;
...
try   // on essaye de récupérer en int la valeur saisie dans Edit1
   {
      nombre_saisi = Edit1->Text.ToInt() ;
   }
   catch(...)  // si la valeur déclenche une exception car elle n'est
               // pas transformable en int on averti l'utilisateur
   {
      Application->MessageBoxA("Le nombre saisi n'est pas valide", "Erreur", MB_OK|MB_ICONSTOP) ;
      return ; // et on sort de la fonction
   }


if(nombre_saisi > 99)
{
   Application->MessageBoxA("This is not valid. Try again", "Error", MB_OK|MB_ICONSTOP) ;
    return;
   
}



DvdMizo


Cette discussion est classée dans : int, edit1, nb, tedit, tform1


Répondre à ce message

Sujets en rapport avec ce message

Concaténation int et Cstring [ par maghella ] Salut!Je voudrais concanténer un chiffre et une lettre.Ex: mot="A";Nb=1;mot est de type CString et nb de type int.Je voudrais ke ça donne dans mot: A1 PB poilu de Stack 0verFlow (c++) [ par toufleboss ] Ci joint un algo de détourage d'un bmp de qq lignes :Le Binze c'est que des que la zone a détourée est trop importante je me tape un Stack overflow (l Client/Serveur avec thread sous linux [ par frater_sinister ] J'ai un prblm avec ce programme. Avant tout le but de ce code: le client envoit un fichier au serveur, ce dernier renvoit le nombre de lignes/mots/let jeu le serpent [ par Horfee ] bon je suis tout nouveau en C et j'ai un petit probleme :j'ai codé le jeu du serpent, assez rapidement mais j'ai un probleme : dès que j'appuie sur un Fatal signal: Segmentation Fault (SDL Parachute Deployed) [ par broks ] Je ne comprends vraiment pas pourkoa ca ne marche pas...C'est surement un probleme au niveau de la fonction saisi puisque je plante lorsque je dois sa Multiplication d'une matrice par un scalaire [ par skrime ] Bonjour, j'ai un exercice à faire qui consiste à multiplier une matrice par un scalaire en C (la prof ne veut pas qu'on se serve des boucles FOR), je Fonction qui retourne un tableau [ par Kurul1 ] Bonjour à tous   J'ai une classe contenant un tableau a deux dimensions comme variable private  Ce que je voudrais c'est une fonction ayant pour param addition en binaire [ par jejedi ] bonsoir , je dois faire un petit prog qui additione 2 nombres binaire. Le probleme c' est que mes 2 nombres étant des chaines de caractére ca me renv boucles et boites de dialogues [ par grems ] salut !Mon appli est censée détecter quand des nouveaux *.hd arrivent dans un dossier . Lorsque ca arrive, une boite de dialogue s'ouvre et une musiqu Prob de modulo ou de code ? [ par NeoZ ] Salut, je voudrais stocker un nombre dans un tableau, ou tout du moins, stocker chaque chiffre dans une variable, et j'ai fait ce bout de code, mais i


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,590 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales