![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Tedit [D7, WinXP]
poroshm © (2007-08-05 16:36:00)Как надо настроить TEdit чтобы вводились только цифры?
DVM (2007-08-05 22:00:00) [21]в OnKeyPress нужного Edit-а:
if not (key in [ #0..' ','0'..'9']) then key:=#0;
SergeIT (2007-08-05 21:45:00) [22]Что-нибудь вроде этого (использую больше 10 лет)
type
TLetters = #32..#255;
TLetSet = set of TLetters;
var
_IntChars: TLetSet = ['0','1','2','3','4','5','6','7','8','9'];
function CheckString(var str: String; const let: TLetSet): Boolean;
var
s: String;
n, i: Integer;
begin
Result := TRUE;
s := '';
n := Length(str);
if n < 1 then exit;
Result := FALSE;
for i := 1 to n do
begin
if str[i] in let then s := s + str[i];
end;
if Length(s) = n then Result := TRUE else str := s;
end;
procedure EditCheckValue(Edit: TEdit; Let: TLetSet);
var
i, n: Integer;
s: String;
begin
if NOT Edit.Focused then exit;
i := Edit.SelStart;
n := Length(Edit.Text);
s := Edit.Text;
if NOT CheckString(s, Let) then
begin
Edit.Text := s;
i := i - (n - Length(s));
if (i >= 0) AND (i <= Length(s)) then
Edit.SelStart := i
else Edit.SelStart := 0;
if Edit.Focused then MessageBeep($FFFFFFFF);
end;
end;
EditCheckValue вызывется в OnChange TEdit.
Инс (2007-08-05 17:30:00) [23]
> [2] {RASkov} © (05.08.07 17:27)
Да и ваш способ на 100% не решает проблемы. Следующий вопрос будет, а как мне сделать, чтобы туда нельзя было вставить не-цифры. Ответ - перекрывать обработку WM_PASTE. В общем, все сводится к написанию своего компонента:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1140+ обсуждение
{RASkov} (2007-08-05 17:27:00) [24][1] - но этот способ отвечат на 100% вопроса:
> чтобы вводились только цифры
Т.е. уже никакие другие символы, такие как -+., , вводиться уже не будут....
Если нужно более шире, то обработывать нужно OnKeyXxxx и контролировать параметр Key.... который var....
Инс (2007-08-05 16:46:00) [25]SetWindowLong(Edit1.Handle,GWL_STYLE,GetWindowLong(Edit1.Handle,GWL_STYLE) or ES_NUMBER);