sp40
Messages postés1284Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
19 août 2008 à 16:44
sp40
Messages postés1284Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
21 août 2008 à 18:55
Bonjour,
J'ai une unité (sans form) (UPrc2008.pas) dans laquelle je stocke tout un tas de procédures et fonctions qui me sont utiles dans plusieurs projets. J'aimerais pouvoir attacher certaines de ces procédures à des contrôles d'une autre unité de mon projet directement par l'inspecteur d'objet.
Par exemple, la procédure suivante me permet de gérer le keypress sur un contrôle censé recevoir un nombre réel :
procedure MyCtrlKeyPress(Sender: TObject; var Key : Char);
begin
if not (Key in ['0'..'9', #8, ',', '.', #13])
then Key := #0;
if (Key = '.')
or (Key = ',')
then Key := DecimalSeparator;
end;
Je voudrais poser un edit sur une form d'un projet et, par l'inspecteur d'objets, rattacher directement l'évenement OnKeyPress de cet edit à ma procedure MyCtrlKeyPress...
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 21 août 2008 à 16:41
les gestionnaires d'évènements doivent impérativement être disposés dans le control appelant.
fait plutot :
procedure RemapKeyFloat(var Key: char);
begin
{ float string :
1.5
1,5
-1.5
1.5e-10
1,5E+10
}
if not (Key in ['0'..'9','.',',','e','E','+','-',#13,#8]) then
key := #0
else
if Key in ['.', ','] then
key := DecimalSeparator;
end;
procedure RemapKeyInt(var Key: char);
begin
{ Int string
15
0x0F
$0F
-15
}
if not (Key in ['0'..'9','a'..'f','A'..'F','-','$','x',#13,#8]) then
Key := #0;
end;
function ValidEditFloat(Edit: TEdit; var Value: extended): boolean;
const
Colors : array[boolean] of integer = (clRed, clBlue);
begin
result := TryStrToFloat(Edit.Text, Value);
Edit.Font.Color := Colors[result];
end;
function ValidEditInt(Edit: TEdit; var Value: integer): boolean;
const
Colors : array[boolean] of integer = (clRed, clBlue);
begin
result := TryStrToInt(Edit.Text, Value);
Edit.Font.Color := Colors[result];
end;
et ensuite :
procedure TForm1.Edit2KeypPress(sender: TObject; var Key: char);
begin
RemapKeyFloat(Key);
end;
puis
procedure TForm1.Edit2Change(Sender: TObject);
var V : extended;
begin
if ValidEditFloat(TEdit(Sender), V) then
...
end;
sp40
Messages postés1284Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 21 août 2008 à 18:52
Bonjour fOxi et merci pour ta réponse.
Mais donc a priori, je n'ai pas la possibilité d'atteindre mes procédures et fonctions directement dans l'inspecteur d'objet sur la gestion des événements du contrôle ? (GExpert par exemple arrive bien à "parasiter" Delphi...) Ce qui me ferait quand même gagner un peu de temps...
sp40
Messages postés1284Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 21 août 2008 à 18:55
Et au passage (comme j'aime bien comprendre ce que je programme... ),
{ float string :
1.5
1,5
-1.5
1.5e-10
1,5E+10
}
et
{ Int string
15
0x0F
$0F
-15
}
ça correspond à quoi ? Juste des commentaires ?