procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9']) then
Key := #0;
end;
KrOuTe
Comment on fait ? :D
os2
tu n'as qu'a utiliser l'évènement keypress et ne permettre de tapé seulement des chiffres, c'est très aisé à faire...
antp
if chaine[i] < '0' or chaine[i] > '9' then
le compilateur voit
if chaine[i]< ('0' or chaine[i]) > '9' then
ou un truc du genre
faut faire
if (chaine[i] < '0') or (chaine[i] > '9') then
et comparer un caractère à '57' (une chaine) ça risque pas de faire ce que tu veux :D
KrOuTe
Ok le truc marche mais seulement si je n'utilise pas la deuxieme partie (And Chaine[i]>'57') paske qd je fait ca le compilateur me dit que l'operateur est invalide poue ce type d'opérande.J'ai essayé avec un else if mais la ca marche plus du tout ....
antp
Zion a écrit a écrit :
Pourquoi caster un byte en Integer maintenant? :pt1cable:
bhen dans le cas où tu dois le récupérer comme un integer :heink:
genre les onkeypress/onkeydown ou tu mélanges des char, des word et des constantes...
KrOuTe
C cool ca me plait !
zion
Pourquoi caster un byte en Integer maintenant? :pt1cable:
(Fait pas attention Kroute, on fait de l'ambiance comme on peut :p)
antp
bah oui 48 c'est mal, mais bon y a des cas où c'est utile
puis Ord(machin) c'est plus court à écrire que Integer(machin) :na:
zion
antp a écrit a écrit :
:heink:
bhen si
if chaine[i] < 48 ca passe pas
if Ord(chaine[i]) < 48 ca passe
benh déjà 48 c'est mal, si tu veux compiler ton truc pour .NET, admettons qu'ils utilise de l'EBCDIC (non je déconne, c juste pour l'exemple), ton 48 marchera plus.
De plus l'ORD est inutile, suffit de caster :sarcastic:
antp
Zion a écrit a écrit :
Ca sert à rien cte fonction :D
:heink:
bhen si
if chaine[i] < 48 ca passe pas
if Ord(chaine[i]) < 48 ca passe
mais c'est vrai que ta solution est meilleure ;)
KrOuTe
Ok en fait j'avais encore pas bien capté maintenant je pense avoir capté et il semble que ca marche merci :jap:
zion
antp a écrit a écrit :
Ord(chaine[1]) te renvoie un entier ayant la valeur du 1er caractere par ex, ca te permet de le comparer à un autre entier ;)
:heink:
Ca sert à rien cte fonction :D
zion
:heink:
Je viens de te dire de faire
chaine[i]<'1'
plutot que 48
je le répète, le pascal est un langage fortement typé
Soit tu castes byte(chaine[i]) soit char(48)
antp
Ord(chaine[1]) te renvoie un entier ayant la valeur du 1er caractere par ex, ca te permet de le comparer à un autre entier ;)
KrOuTe
Ben ouais ca y me semble avoir compris,mais ca me permet pas de comparer avec la valeur ASCII du caractere
zion
Le pascal est un langage typé, donc un char n'est pas un byte, et inversément, sauf si tu le caste
char(48), ou '1' c'est pareil, mais 48 c'est pas un char, c'est un byte
:hello:
KrOuTe
Je crois que j'ai pas tout a fait capté encore :) ...
Comme je veux que l'utilisateur ne saisisse que des chiffres je compare la valeur ASCII du caractère en cours avec la valeur ASCII des chifre 1,2,3,4...
Je fais (pour reprendre l'exemple) : if Chaine[i] < 48 And Chaine[i] > 57 then ... Mais le compilateur me dit que les types sont incompatibles,les valeurs ASCII c pas des Int ?
KrOuTe
A ok merci j'avais pas kapté ca :) j'suis un petit peu débutant aussi alors...
antp
la contenu des caractère c'est leur valeur ASCII...
chaine[i] = code ASCII du caractère à la position i (pour i allant de 1 à longueur)
KrOuTe
Salut ,est il possible en Delphi de convertir des caractères en leur valeur ASCII ? Paske en fait je veux gérer une saisie utilisateur et il faudrait que seulement des chiffres soient saisis...