Librairie de controle (filtre) de touche dans un tedit

0/5 (1 avis)

Snippet vu 3 888 fois - Téléchargée 21 fois

Contenu du snippet

Ceci un librairie ou dll qui controle les entrees des utilisateurs dans un TEdit.Limitation des entrees a des chiffres entiers ou avec virgules.L'edition acceptant le retour de chariot.
Vous appelerez les fonction par les evenements de Tedit OnKeyPress
qui accepte une variable Char.
Exemple:

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

Pour importer les fonctions dans le programme,exemple:

var
Form1: TForm;
IntKey:procedure(var m:Char);stdcall;
RealKey:procedure(var m:Char);stdcall;

Source / Exemple :


library dimbfunc;
{ Dlls de controle de touche
entree de chiffre entier ou decimal par exemple
dans une boite d'edition.Cet exemple est specifique
pour la platforme Windows  }

uses
  Forms,SysUtils,Windows,Dialogs,Classes;

{$R *.res}

var w:Byte;

function SeparDec:Byte;
var c:Char;
    TF:TFormatSettings;
    InfoLocal:Integer;
begin
 InfoLocal:=Languages.LocaleID[0];
 GetLocaleFormatSettings(InfoLocal,TF);
 c:=TF.DecimalSeparator;
 if c=','then Result:=1 else Result:=0;
 {recuperation de separateur decimal
 pour un point ou un virgule.}
end;

procedure RealKey(var m:Char);stdcall;export;
var n:Integer;
{touches numériques avec virgule(réel)
ou point(si anglais)}
begin
 n:=Ord(m);
 if w=1 then begin
  if (n>=48)and (n<=57)then m:=m
  else if (n=Ord(VK_BACK))or(n=44) then m:=m else m:=#0;
 end else begin
  if (n>=48)and (n<=57)then m:=m
  else if (n=Ord(VK_BACK))or(n=46) then m:=m else m:=#0;
  end;
end;

procedure IntKey(var m:Char);stdcall;export;
var n:Integer;
begin
//nombre entier de 0 a 9
 n:=Ord(m);
 if (n>=48)and (n<=57)then m:=m
 else if n=Ord(VK_BACK) then m:=m else m:=#0;
end;

exports IntKey,RealKey,EntKey;

begin
 w:=SeparDec;
end.

Conclusion :


Comment compter si les sepateurs decimals sont en plus
et que le chiffre ne commence pas par un separateur decimal?

A voir également

Ajouter un commentaire Commentaire
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
20 déc. 2007 à 09:49
procedure RealKey(var m:Char);stdcall;export;
begin
if not (m in ['0'..'9',decimalseparator,#8]) then
m := #0;
end;

procedure IntKey(var m:Char);stdcall;export;
begin
if not (m in ['0'..'9',#8]) then
m := #0;
end;

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.