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...
Partager