Librairie de controle (filtre) de touche dans un tedit

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 747 fois - Téléchargée 20 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
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
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.