bonjour,

j'essaye de faire un composant TEditFloat (BCB 4).
qui, comme son nom l'indique, h�rite du TEdit.
J'ai r�ussi � rajouter quelques prori�t�s dans l'inspecteur d'objets.
Certaines propri�t�s concernent la valeur du flottant (des bornes),
et d'autres concernent le format de la repr�senation du flottant (caract�re du s�parateur d�cimal, caract�re entre milliers, nb de chiffres apr�s la virgule).
Je voudrais "surcharger" l'�venement OnExit de TEditFloat
par rapport au TEdit pour afficher automatiquement mon flottant au format d�fini quand l'utilisateur quitte la zone.

J'ai surcharg� OnChange et �a se passe bien,
mais le OnExit ne fonctionne pas.
En pas � Pas, en mettant mes unit�s EditFloat.cpp/.h dans le m�me dossier qu'un petit projet test, je parviens � passer dans le code de l'�v�nement OnChange de TEditFloat mais pas dans celui de OnExit...

Je suppose que je m'y prends mal pour red�finir le code de l'�v�nement OnExit, mais j'ai atteind les limites de l'aide builder
et je n'ai pas trouv� de questions ressemblantes sur le forum...


Voici quelques extraits de code pour expliquer
comment j'ai fait pour red�finir les 2 gestionnaires �v�nements :

dans le .h, dans la class PACKAGE TEditFloat : public TEdit

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
public :
  TNotifyEvent FOnChange;
  TNotifyEvent FOnExit;
 
   void __fastcall Change();
   void __fastcall Exit();
 
published :
   __property TNotifyEvent OnChange 
   = {read=FOnChange, write=FOnChange};
__property TNotifyEvent OnExit
   = {read=FOnExit, write=FOnExit};[/

dans 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
void __fastcall TEditFloat::Change()
 
{
   if(!CModeInit)
  {
    TEdit::Change();     // effectue la gestion standard,
                                  // y compris l'appel du gestionnaire
     // Votre personnalisation s'effectue ici :
 
     try{ Cval.SetStrVal(Text); }
     catch(...){ Cval = 0; }
 
     //....
  }
}
//------------------------------------
void __fastcall TEditFloat::Exit()
{
  TEdit::DoExit();        
 
  try  {Cval.SetStrVal(Text);}
  catch(...){ Cval = 0; }
 
  Cvaleur       = Cval.GetVal();
 
  CModeInit = true;
     Text = Cval.GetStrVal();
  CModeInit = false;
}

quelques explications du code pour les curieux :
Cval est une instance de la classe Cdouble
qui a un attribut double et un attribut AnsiString pour la rep�sentation.
Cval est public de TEditFloat.
Cvaleur est un double private de TEditFloat.

CModeInit est un attribut private de TEditFloat.
S'il vaut vrai, le Code de l'�v�nement OnChange est inateignable,
ce qui devrait permettre de modifier le texte sans probl�me sur l'�v�nement OnExit...