Clavier

Résolu
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005 - 30 sept. 2005 à 16:31
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 3 oct. 2005 à 07:58
Bonjour,
je suis débutant, j'ai crée une calculatrice qui fonctionne bien mais pour l'utiliser il faut que je clique sur les boutons affectés.
Je souhaiterais savoir quel(s) code(s) utiliser pour utiliser également le clavier numérique.
Merci d'avance.

22 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 sept. 2005 à 17:23
salut,

tu peux faire comme cela:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

const Valid = #13,DecimalSeparator, '0'..'9';

begin

if not(key in valid) then key: =#0 else// ne fait rien si pas numerique

begin

//la tu appelles ta fonction calculette;

end;

end;

bonne prog
3
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
30 sept. 2005 à 18:03
Attention !

Il ne faut pas oublier de mettre la propriété KeyPreview de la form à true pour que cela marche correctement !

@+

Nico { http://www.ni69.new.fr/ }




<hr size="2" width="100%">

N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
3
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 sept. 2005 à 18:36
c'est le decimalseparator en constante qui génére l'erreur. SI on le remplace par ',' ça marche. Par contre le keypreview génère une double saisie dans l'Edit

essaie ça:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

const Valid = #13,'.', '0'..'9';

begin

if not(key in valid) then key:=#0 // ne fait rien si pas numerique

else

begin

edit1.Text:=edit1.Text+key

end;

end;
3
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
30 sept. 2005 à 18:53
ben au debut je pense

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.KeyPreview:=true;
end;
ciao
nico
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 sept. 2005 à 19:05
pour eviter la double saisie quand l'edit à la focus il faut rajouter:

procedure TForm1.Edit1Enter(Sender: TObject);

begin

form1.KeyPreview:=false;

end;



procedure TForm1.Edit1Exit(Sender: TObject);

begin

form1.KeyPreview:=true;

end;

et pour éviter les doubles separateur decimaux rajoute dans FormKeyPress :

if
(key=DecimalSeparator)and(pos(DecimalSeparator,edit1.Text)<>0)
then key:=#0;

et la fonction de nico :

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if ((key = DecimalSeparator) and (Pos(DecimalSeparator,(Sender as
TEdit).Text) <> 0)) or (not (key in #8,
#13,DecimalSeparator,'0'..'9'
)) then key := #9; //

end;
3
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005
1 oct. 2005 à 22:42
J'ai cherché une solution moins compliquée pour moi (bien que la tienne
fonctionne très bien!) et j'ai trouvé une solution un peu enfantine:

il suffit de mettre le charactère & devant la touche concernée dans la propriété caption de l'inspecteur d'objet.

A+.
3
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
30 sept. 2005 à 16:59
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key='8' then ...
end;

En esperant que ca peut t aider ...
Ciao
Nico
0
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005
30 sept. 2005 à 17:41
Merci pour ces solutions; je vais essayer!

Bon WE!
0
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005
30 sept. 2005 à 17:55
désolé mais aucune des solutions ne marche.

Si vous avez d'autres idées...

Merci encore.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 sept. 2005 à 17:59
passes le code de ta fonction calculette (la partie lecture des
boutons) on pourra regarder comment lui passer les code du clavier.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 sept. 2005 à 18:06
bonne remarque nico.
0
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005
30 sept. 2005 à 18:14
voila le code pour la touche'1':



procedure TForm1.Button3Click(Sender: TObject);

begin



if(TF=0) then edit1.Text:=edit1.Text+'1'

else edit1.Text:='1';

TF:=0;

end;
0
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005
30 sept. 2005 à 18:23
c'est l'erreur que j'ai lorsque je veux compiler!



[Erreur] Unit1.pas(260): Instruction attendu(e) mais 'CONST' trouvé(e)
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
30 sept. 2005 à 18:26
C'est sur ces lignes que s'arrête le compilateur ? bizarre...

@+

Nico { http://www.ni69.new.fr/ }




<hr size="2" width="100%">

N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005
30 sept. 2005 à 18:50
effectivement ça marche!

Par contre où faut-il que je mettes la propriété KeyPreview de la form à true dans le code de la touche'1'?
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
30 sept. 2005 à 18:52
dans l'inspecteur d'objets de la Form

@+

Nico { http://www.ni69.new.fr/ }




<hr size="2" width="100%">

N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005
30 sept. 2005 à 19:07
ça marche!!

MERCI A TOUS POUR VOTRE AIDE!!
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 sept. 2005 à 21:38
si j'en crois le code que tu donnes plus haut:

procedure TForm1.Button3Click(Sender: TObject);

begin



if(TF= 0) then edit1.Text:=edit1.Text+'1'

else edit1.Text:='1';

TF:=0;

end;

tu appelles une procédure par bouton.

tu dois pouvoir simplifier en appelant qu'un seulévènement onclick pour tous les boutons en faisant

procedure TForm1.Button1Click(Sender: TObject);

begin

with (sender as Tbutton) do

begin

if (caption =DecimalSeparator)and(pos(DecimalSeparator,edit1.Text)<>0) then

beep else

edit1.text:=edit1.Text+caption;

end;

end;

et en appelant cette procedure dans l'évènement onclick de chaque
bouton (j'ai supposé que le caption de chaque bouton correspond à un
chiffre).
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 sept. 2005 à 21:49
pour pouvoir utiliser le séparateur decimal prédéfini il faut modifier la procedure

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

begin

if (keyDecimalSeparator) and (pos(DecimalSeparator,edit1.Text)<>0) <gras>then key:</gras>#0;

if not(key in #13,DecimalSeparator, '0'..'9') then key:= #0 else // ne fait rien si pas numerique

begin

edit1.Text: =edit1.Text+key

end;

end;
0
cs_orques Messages postés 13 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 14 octobre 2005
1 oct. 2005 à 09:03
Merci, tu es un as!
0
Rejoignez-nous