Clavier [Résolu]

cs_orques 13 Messages postés mercredi 28 septembre 2005Date d'inscription 14 octobre 2005 Dernière intervention - 30 sept. 2005 à 16:31 - Dernière réponse : jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

22 réponses

Meilleure réponse
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 30 sept. 2005 à 17:23
3
Merci
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

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de jlen100
Meilleure réponse
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 30 sept. 2005 à 18:03
3
Merci
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 !

Merci ni69 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de ni69
Meilleure réponse
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 30 sept. 2005 à 18:36
3
Merci
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;

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de jlen100
Meilleure réponse
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 30 sept. 2005 à 18:53
3
Merci
ben au debut je pense

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

Merci Nicolas___ 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Nicolas___
Meilleure réponse
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 30 sept. 2005 à 19:05
3
Merci
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;

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de jlen100
Meilleure réponse
cs_orques 13 Messages postés mercredi 28 septembre 2005Date d'inscription 14 octobre 2005 Dernière intervention - 1 oct. 2005 à 22:42
3
Merci
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+.

Merci cs_orques 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_orques
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 30 sept. 2005 à 16:59
0
Merci
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key='8' then ...
end;

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

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

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

Merci encore.
Commenter la réponse de cs_orques
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 30 sept. 2005 à 17:59
0
Merci
passes le code de ta fonction calculette (la partie lecture des
boutons) on pourra regarder comment lui passer les code du clavier.
Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 30 sept. 2005 à 18:06
0
Merci
bonne remarque nico.
Commenter la réponse de jlen100
cs_orques 13 Messages postés mercredi 28 septembre 2005Date d'inscription 14 octobre 2005 Dernière intervention - 30 sept. 2005 à 18:14
0
Merci
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;
Commenter la réponse de cs_orques
cs_orques 13 Messages postés mercredi 28 septembre 2005Date d'inscription 14 octobre 2005 Dernière intervention - 30 sept. 2005 à 18:23
0
Merci
c'est l'erreur que j'ai lorsque je veux compiler!



[Erreur] Unit1.pas(260): Instruction attendu(e) mais 'CONST' trouvé(e)
Commenter la réponse de cs_orques
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 30 sept. 2005 à 18:26
0
Merci
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 !
Commenter la réponse de ni69
cs_orques 13 Messages postés mercredi 28 septembre 2005Date d'inscription 14 octobre 2005 Dernière intervention - 30 sept. 2005 à 18:50
0
Merci
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'?
Commenter la réponse de cs_orques
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 30 sept. 2005 à 18:52
0
Merci
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 !
Commenter la réponse de ni69
cs_orques 13 Messages postés mercredi 28 septembre 2005Date d'inscription 14 octobre 2005 Dernière intervention - 30 sept. 2005 à 19:07
0
Merci
ça marche!!

MERCI A TOUS POUR VOTRE AIDE!!
Commenter la réponse de cs_orques
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 30 sept. 2005 à 21:38
0
Merci
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).
Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 30 sept. 2005 à 21:49
0
Merci
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;
Commenter la réponse de jlen100
cs_orques 13 Messages postés mercredi 28 septembre 2005Date d'inscription 14 octobre 2005 Dernière intervention - 1 oct. 2005 à 09:03
0
Merci
Merci, tu es un as!
Commenter la réponse de cs_orques

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.