procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
inherited; // ?????! pas d'inherited dans un gestionnaire d'evenement! if not (Key in ['0'..'9',
Chr(VK_DELETE),Chr(VK_BACK)]) then
Key:=#0;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',
#8]) then
Key:=#0;
end;
mais le mieux est de faire :
Unit Unit1;
interface
uses ...;
type
TEdit = class(StdCtrls.TEdit)
private
fTextAlign : TAlignment;
fOnlyNumbers : boolean;
procedure SetOnlyNumbers(val : boolean);
procedure SetTextAlign(val : TAlignment);
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
published
property OnlyNumbers : boolean read fOnlyNumbers write SetOnlyNumbers;
property TextAlignment: TAlignment read fTextAlign write SetTextAlign;
end;
TForm1 = class(TForm)
....
end;
var
Form1 : TForm1;
implementation
constructor TEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fOnlyNumbers := false;
fTextAlign := taLeftJustify;
end;
procedure TEdit.CreateParams(var Params: TCreateParams);
const
Alignments : array[TAlignment] of Word = (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or Alignments[TextAlignment];
if fOnlyNumbers then
Params.Style := Params.Style or ES_NUMBER;
end;
procedure TEdit.SetOnlyNumbers(val: boolean);
begin
if fOnlyNumbers <> val then begin
fOnlyNumbers := val;
RecreateWnd;
end;
end;
procedure TEdit.SetTextAlign(val : TAlignment);
begin
if fTextAlign <> val then
begin
fTextAlign := val;
RecreateWnd;
end;
end;et dans le OnCreate de la fiche :
EditX.OnlyNumber := true;
EditX.TextAlignement := taRight;
EditX.MaxLength := 4;
puis dans le OnChange de l'edit :
procedure TForm1.EditXOnChange(Sender: TObject);
var L : integer;
const
EdtCol : array[boolean] of tcolor = (clRed, clBlue);
begin
L := Length(EditX.Text);
EditX.Font.Color := EdtCol[L = 4];
// ou encore :
{
L := IntToStrDef(EditX.Text, 0);
EditX.Font.Color := EdtCol[(L >= 1000) and (L < 10000)];
}
end;