Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Tedit [D7, WinXP]


Страницы:   1 2

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 ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо