![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Tedit [D7, WinXP]
poroshm © (2007-08-05 16:36:00)Как надо настроить TEdit чтобы вводились только цифры?
HWNDDeletor (2007-08-13 14:07:00) [1]Тфу епт RASkov, не заметил...
Просматривал бегло, туплю чего-то ((((
{RASkov} (2007-08-13 13:26:00) [2]> [23] HWNDDeletor (13.08.07 13:21)
Ты его из первого поста скопировал?
HWNDDeletor (2007-08-13 13:21:00) [3]
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Edit1.Handle,GWL_STYLE,
GetWindowLong(Edit1.Handle,GWL_STYLE) or ES_NUMBER);
end;
Правда этот способ от Paste не помагает...
Германн (2007-08-06 17:37:00) [4]
> Eraser © (06.08.07 17:00) [21]
>
> TSpinEdit
>
TRxSpinEdit
Eraser (2007-08-06 17:00:00) [5]TSpinEdit
{RASkov} (2007-08-06 16:40:00) [6]> [19] Leonid Troyanovsky © (06.08.07 13:17)
> Это тебе персонально
Пригодится. Спасибо)
Leonid Troyanovsky (2007-08-06 13:17:00) [7]
> {RASkov} © (06.08.07 11:43) [18]
> Может [14] - это не мне тогда, а автору, как альтернативный
> вариант....
Это тебе персонально, у вопрошающего и так много предложений.
А заменить или что - думай сам.
--
Regards, LVT.
{RASkov} (2007-08-06 11:43:00) [8]> [17] Leonid Troyanovsky © (06.08.07 11:29)
> Не KeyPress, а Change.
Все равно не пойму.... нужно объеденить что ли мой код и твой по ссылке??? или заменить... или что?
Может [14] - это не мне тогда, а автору, как альтернативный вариант....
Leonid Troyanovsky (2007-08-06 11:29:00) [9]
> {RASkov} © (06.08.07 11:15) [16]
Не KeyPress, а Change.
--
Regards, LVT.
{RASkov} (2007-08-06 11:15:00) [10]> [14] Leonid Troyanovsky © (06.08.07 09:26)
???
> [15] Leonid Troyanovsky © (06.08.07 09:31)
Угу.... именно поэтому "проблема" в кавычках....
Leonid Troyanovsky (2007-08-06 09:31:00) [11]
> {RASkov} © (06.08.07 02:23) [12]
> ЗЫ Одна из "проблем" с ним - Invalid input value. Use escape
type
TMyMaskEdit = class(TMaskEdit)
private
procedure CMExit(var msg: TCMExit); message cm_exit;
end;
procedure TMyMaskEdit.CMExit;
begin
try
inherited;
except
on E: EDBEditError do
raise Exception.Create('My exception');
end;
end;
Если же хочется снабдить оной функциональностью существующий контрол,
то ему нужно подменять WindowProc на приблизительно такую:
procedure TForm1.NewProc(var msg: TMessage);
begin
try
OldProc(msg);
except
on E: EDBEditError do
raise Exception.Create('My exception'); // do something
end;
end;
таким образом:
OldProc := MaskEdit1.WindowProc; // OldProc - поле формы :TWndMethod
MaskEdit1.WindowProc := NewProc;
--
Regards, LVT.
Leonid Troyanovsky (2007-08-06 09:26:00) [12]
> {RASkov} © (06.08.07 00:47) [9]
> procedure TMyEdit.KeyPress(var Key: Char);
http://www.rsdn.ru/Forum/Message.aspx?mid=517237&only=1
--
Regards, LVT.
Германн (2007-08-06 02:32:00) [13]И ничего не изменилось пока я "купался и загорал" :)
Опять вопрос "не знаю чей", "не знаю о чём". И сразу ответы на "не знаю что, но я думаю про это" :)
{RASkov} (2007-08-06 02:23:00) [14]> [11] Двигатель внешнего сгорания (06.08.07 02:07)
> Какие?
Есть вроде....) с ходу не помню, просто он мне как-то однажды так не понравился, что я его стараюсь избегать :)
К данному вопросу впрочем не относится, указать маску '!99999;1; ' и то что нужно автору, вроде бы получится..... только девяток указать столько сколько нужно по максимуму...
ЗЫ Одна из "проблем" с ним - Invalid input value. Use escape key to abandon changes. - почему-то вспомнилась. Впрочем - проблема - в кавычках :)
Двигатель внешнего сгорания (2007-08-06 02:07:00) [15]
> {RASkov} © (06.08.07 00:47) [9]
> Есть у него некоторые "неприятные" моменты :)
Какие?
SergeIT (2007-08-06 01:22:00) [16]> Модуль формы превращается в большую свалку
Никакой свалки. Функции проверки ввода в отдельном модуле. А в модуле формы только добавляется EditXonChange - для однотипных едитов одна функция.
{RASkov} (2007-08-06 00:47:00) [17]
uses ...., Unit2;
type
TEdit = class(TMyEdit); //Альтернатива "создания" нового компонента, т.е. без регистрации в палитре.
TForm1 = class(TForm)
Edit1: TEdit;
//...................................................
unit Unit2;
interface
uses Windows, Messages, StdCtrls;
const EM_AFTERPASTE = WM_USER+10;
PASTE_CODE = 22;
MAX_LENGTH = 10;
type
TMyEdit = class(TEdit)
protected
procedure KeyPress(var Key: Char); override;
procedure WndProc(var Mes: TMessage); override;
end;
implementation
{ TMyEdit }
procedure TMyEdit.KeyPress(var Key: Char);
begin
inherited;
if ORD(Key) = PASTE_CODE then Exit;
if not (Key in ['0'..'9', #8]) then Key:=#0 else
if ((Length(Text)>MAX_LENGTH-1) and (Key<>#8)) then
if SelStart<MAX_LENGTH then SelLength:=1 else Key:=#0;
end;
procedure TMyEdit.WndProc(var Mes: TMessage);
var S: String; N: Integer;
begin
if Mes.Msg = WM_PASTE then PostMessage(Handle, EM_AFTERPASTE, 0, 0);
if Mes.Msg = EM_AFTERPASTE then begin
S:=Text;
for N:= Length(S) downto 1 do if not (S[N] in ['0'..'9']) then Delete(S, N, 1);
if Length(S)>MAX_LENGTH then SetLength(S, MAX_LENGTH);
Text:=S;
end else inherited;
end;
end.
Но это так же "отсеивает" все кроме цифр(т.е. 100% решение вопроса)... под руку попался этот модуль.
> [8] Двигатель внешнего сгорания (05.08.07 23:07)
> TMaskEdit использовать
Есть у него некоторые "неприятные" моменты :)
Двигатель внешнего сгорания (2007-08-05 23:07:00) [18]
> poroshm (05.08.07 16:36)
> Как надо настроить TEdit чтобы вводились только цифры?
TMaskEdit использовать не получится?
Инс (2007-08-05 22:55:00) [19]
> вызывется в OnChange TEdit.
Лично я противник таких методов. Модуль формы превращается в большую свалку, разобраться в которой по меньшей мере трудно.
Нужно просто создать свой компонент и бросить его на форму. Все будет чистенько и аккуратненько
SergeIT (2007-08-05 22:52:00) [20]
> в OnKeyPress
А Copy/Paste ?