Нещо като Editbox, но да приема integer
7 отговора
349 прегледа
Нещо като Editbox, но да приема integer
Имам нужда от компонент подобен на EditBox но да приема само числа.
Мерси предварително!!!!
Мерси предварително!!!!
Re: Нещо като Editbox, но да приема integer
Има доста библиотеки, които имат такива компоненти. Сещам се например за EhLib, RxLib, DCS... Сигурно има още доста. Има и отделни компоненети (ако не искаш да инсталираш целите библиотеки). Потърси по някой от сайтовете за Делфи (Torry например) или в Google.
Също така можеш и да използваш обикновения TEdit. Тази процедура може би ще ти свърши работа.
Недостатък е, че може да се paste-не текст от клипборда. За да го избегнеш трябва да си поиграеш да прихванеш събитията и да следиш дали това, което се въвежда е валидно число. Малко е играчка, ама става.
Също така можеш и да използваш обикновения TEdit. Тази процедура може би ще ти свърши работа.
procedure SetNumEdit(ce: TWinControl);
var
A: Integer;
begin
A := GetWindowLong(ce.handle, gwl_Style);
A := A or ES_NUMBER;
SetWindowLong(ce.Handle, gwl_Style, A);
end;
Недостатък е, че може да се paste-не текст от клипборда. За да го избегнеш трябва да си поиграеш да прихванеш събитията и да следиш дали това, което се въвежда е валидно число. Малко е играчка, ама става.
Редактирано от andrew_nikoloff на
Re: Нещо като Editbox, но да приема integer
Когато е необходимо да се въвеждат само цели числа, аз ползвам събитието OnKeyPress на Edit контролата по следния начин:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Key:=#0;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Key:=#0;
end;
Редактирано от TRN на
Re: Нещо като Editbox, но да приема integer
Има два варинта - да се ползва MaskEdit от страница Additional, или още по-мързеливо - SpinEdit от страница Samples.
чети и дишай по-леко
чети и дишай по-леко
Само да отбележа...
... че това не решава проблема с paste-ването на "нечислов" текст. Освен това има един гаден страничен ефект - блокира клавишните комбинации за клипборда (ctrl+x/c/v). За да се избегне това трябва да разрешиш целия интервал #0..#31 освен цифрите.
Между другото, пепи, не е много ясно... За цели числа ли става въпрос или за дробни?
Между другото, пепи, не е много ясно... За цели числа ли става въпрос или за дробни?
Re: Само да отбележа...
Не почнаха ли вече ваканциите
Направи един
Нататък, надявам се ти е ясно. Ако не е, попрочети пак за наследяване в ООП.
Успех
Направи един
TMyEdit = class(TCustomEdit)
...........
protected
function IsValidChar(Key: Char): Boolean; virtual;
procedure KeyPress(var Key: Char); override; //идва от TWinControl
.................
implementation
...........
function TMyEdit.IsValidChar(Key: Char): Boolean;
begin
Result := Key in [#0..#31, '0'..'9'];
end;
procedure TMyEdit.KeyPress(var Key: Char);
begin
........
if not IsValidChar(Key) then
begin
Key := #0;
MessageBeep(MB_ICONEXCLAMATION)
end;
if Key <> #0 then inherited KeyPress(Key);
end;
Нататък, надявам се ти е ясно. Ако не е, попрочети пак за наследяване в ООП.
Успех
Re: Нещо като Editbox, но да приема integer
Дай e-mail за да ти пратя един компонент.