Создание TEdit с вводом только цифр
Вот пример, когда нужно вводить только цифры в TEdit:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in [#8,'0'..'9']) then key:=#0; end;
А вот довольно простой компонент, который будет выполнять это для Вас:
unit GSSimp; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TGSErrorType = (etChange, etPress); type TErrorEvent = procedure(Sender: TObject; ErrType: TGSErrorType) of object; type TGsSimpleNumEdit = class(TEdit) private FOnError: TErrorEvent; protected procedure Change; override; procedure KeyPress(var Key: Char); override; published property OnError: TErrorEvent read FOnError write FOnError; end; procedure Register; implementation procedure TGsSimpleNumEdit.Change; var tmpI: integer; begin try tmpI := StrToInt(Text); inherited Change; except if Assigned(FOnError) then FOnError(self, etChange); end; end; procedure TGsSimpleNumEdit.KeyPress(var Key: Char); var tText: string; begin if SelLength <> Length(Text) then tText := Text else tText := EmptyStr; if Key in ['0'..'9', #8, #127] then inherited KeyPress(Key) else begin Key := #0; if Assigned(FOnError) then FOnError(self, etPress); end; end; procedure Register; begin RegisterComponents('Sample', [TGsSimpleNumEdit]); end; end.
Как видите все работает. Но на самом деле это очень плохой и неправильный пример.
Зачем изобретать кривой велосипед, когда есть много стандартных рабочих решений! Вот одно из них:
в событии создания формы пишем код:
var style: cardinal; ... begin ... style := GetWindowLong({ нужный_TEdit}.H andle, GWL_STYLE); SetWindowLong({ нужный_TEdit}.H andle, GWL_STYLE, style + ES_NUMBER); ... end;
На том все!
Комментарии