[Borland C++} gestion des exception en graphique - Grrr

[Borland C++} gestion des exception en graphique - Grrr - C++ - Programmation

Marsh Posté le 29-01-2006 à 19:21:33    

Bon, voila, ça m'enerve!
J'ai un formulaire, quelques champs 'Edit', certain d'entre eux sont pour la saisie de nombre.
Derriere je l'ai convertis donc en Int.  
Comme ça peut generer une exception en cas de saisie autre que des chiffre, je met tout ça dans un try/catch comme si dessous.
Mais rien faire, apres compilation, quand je fait un test, s'il y a une erreur de saisie j'ai un message a la **** dans une fentre qui apparait, el truc qui plante totalement, et une fentre avec le processeur et les instructions qui apparait.
Voici mon code :
 

Code :
  1. void __fastcall TForm1::CalculerClick(TObject *Sender)
  2. {
  3.         int alpha,Phi,nb=0;
  4.         try
  5.         {
  6.                 alpha = StrToInt(EditAlpha->Text);
  7.                 Phi = StrToInt(EditPhi->Text);
  8.                 nb = StrToInt(EditNbIte->Text);
  9.         }
  10.         catch(EConvertError &Exception)
  11.          {
  12.               LblAlert->Visible=true;
  13.          }
  14. }


 
 
Que faire...???
 
Je suis sous Borldan 6 C++ .


Message édité par gargantua307 le 30-01-2006 à 08:56:55
Reply

Marsh Posté le 29-01-2006 à 19:21:33   

Reply

Marsh Posté le 29-01-2006 à 19:57:26    

Salut,
Quel est l'erreur exacte?
Es tu sur que StrToInt genere bien une EConvertError?
 
Dans ton catch, on ne peut pas dire que tu cherche a resoudre le probleme!
Quelle est l'utilité de "LblAlert->Visible=true;" pour la suite des calculs?

Reply

Marsh Posté le 29-01-2006 à 20:23:54    


 
Pour EConvertError, j'ai trouvé ce morceau de code sur internet, donc je pense que ça doit etre ça. Je vais verifier (je sais pas trop comment).
 
Sinon pour le LblAlert->Visible=true;
ça m'affiche sur la fenetre un Label pour signaler a l'utilisateur une mauvaise saisie, afin qu'il recommence.
J'aurai eventuellement mettre ça dans un pop-up mais je ne sais pas faire (je debute en graphique).
 
Merci

Reply

Marsh Posté le 29-01-2006 à 21:42:00    

Et si tu utilisais StrToIntDef ?

Reply

Marsh Posté le 30-01-2006 à 08:54:32    

fat a écrit :

Et si tu utilisais StrToIntDef ?


 
Le probleme de StrToIntDef c'est que en cas d'erreur il prend une valeur par defaut si j'ai bien compris.
 
Sinon le message de borland (lors de l'execution) : blabla have raised an EConvertError with text "<valeur de ma zone de saisie>" blabla.
Je n'ai plus le message exact sous les yeux.
 
Bref, je ne comprend pas pourquoi c'est raised, alors qu'il y a un traitement dans mon catch...?
 
Sinon, vu que rien dans mon projet ne m'empeche a priori de saisir des flottant, je pense utiliser StrToFlat si j'me souvient bien, y a t-il l'equivalent pour des double?
 
Merci.
 
Comment créer une focntion pour empeché lasaisie de text directement sur l'interface?

Reply

Marsh Posté le 30-01-2006 à 09:23:28    

Si tu as le message "...raised an EConvertError", c'est que le StrToInt a lancé une exception qui n'est pas "attrapée" par ton catch, c'est ca qui est bizzare, étant donné que tu catch une EConvertError.
Un truc : quand tu es en debug et que tu lance le programme à partir de l'IDE, tu as les messages d'exception même si tu as un catch qui l'attrape, et juste après ce message, ton programme continue dans la partie catch, cela permets de savoir justement qu'il y a eu une exception.
Mais si tu lance le programme en dehors de l'ide, tu ne devrais pas avoir ce message.

Reply

Marsh Posté le 30-01-2006 à 09:49:38    

fat a écrit :

Si tu as le message "...raised an EConvertError", c'est que le StrToInt a lancé une exception qui n'est pas "attrapée" par ton catch, c'est ca qui est bizzare, étant donné que tu catch une EConvertError.
Un truc : quand tu es en debug et que tu lance le programme à partir de l'IDE, tu as les messages d'exception même si tu as un catch qui l'attrape, et juste après ce message, ton programme continue dans la partie catch, cela permets de savoir justement qu'il y a eu une exception.
Mais si tu lance le programme en dehors de l'ide, tu ne devrais pas avoir ce message.


 
C'est effectivement ce que j'etais en train de verifier.
Effectivement, quand je lance le .exe , tout ce passe comme prévu.
 
Par contre depuis borland, quand j'ai ce message, il plante après...c'est pour ça que ça me faisait ***** :fou:  
 
Enfin, maintenant je sais a quoi m'en tenir.
 
Merci pour votre aide.
 
 
Derniere question, comment faire pour que quand je click sur un boutton, une nouvelle page de mon formulaire s'ouvre? Enfin c'est a dire que les param du premier formulaire sont envoyés, et je tombe sur un autre formulaire ou les traitements sont appelés et le resultat afficher.
 
Merci.
 
Garg

Reply

Marsh Posté le 30-01-2006 à 14:45:42    

Le plus simple étant d'empêcher l'utilisateur d'entrer autre chose que des chiffres.
 

Code :
  1. long StylesEdit = GetWindowLong(Edit1->Handle, GWL_STYLE);
  2. SetWindowLong(Edit1->Handle, GWL_STYLE, StylesEdit | ES_NUMBER);

Reply

Marsh Posté le 30-01-2006 à 14:49:26    

Concernant les exceptions signalées par l'IDE de borland, pour les désactiver, il faut aller dans Outils > Options du débogueur > Exceptions du language.
 
Il y a deux case Arrêter sur exceptions Delphi et Arrêter sur Exceptions C++ à décocher.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed