![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дублирование события у компонента [D6, Win2k]
Mishenka © (2004-11-25 09:16:00)Хочу написать Edit, в который можно было бы водить только цифры, тобишь нужно описать событие OnChange. Как его описать, чтоб у полученного компанента также можно было обрабатывать событие OnChange?
Amoeba (2004-11-25 11:09:00) [1]Есть готовые. Найдешь на Torry.
KSergey (2004-11-25 09:45:00) [2]Пока набирал - старшие товарищи опредили ;)
KSergey (2004-11-25 09:44:00) [3]Ну... Классически надо перекрыть OnKeyPress, а не OnChange. Это если именно с клавиатуры не давать вводить. Но можно будет вставить из буфера обмена.
Если именно OnChange - то тогда будет "промаргивать" (сначала отобразится "недопустимое", потом вы его затрете.
Перекрытие OnChange для компоентабудет выглядеть так:
TMyEdit = class(TEdit)
private
procedure Change; override;
end;
procedure TMyEdit.Change;
begin
// здесь пишем код
inherited; // чтобы, в частности, сработал пользовательский OnChange
end;
А чтобы совсем все было хорошо (все лишнее рубить, да еще и чтобы не "моргало") - это надо обрабатывать CN_COMMAND и в нем CBN_EDITUPDATE. Но это для Win32 платформы, как там для kylix - понятия не имею (предыдущий код явно универсален, надеюсь)
Leonid Troyanovsky (2004-11-25 09:40:00) [4]
> Mishenka (25.11.04 09:16)
> Хочу написать Edit, в который можно было бы водить только
> цифры, тобишь нужно описать событие OnChange. Как его описать,
> чтоб у полученного компанента также можно было обрабатывать
> событие OnChange?
type
TMyEdit = class(TEdit)
protected
procedure Validate; virtual;
procedure Change; override;
end;
procedure TMyEdit.Validate;
begin
;
end;
procedure TMyEdit.Change;
begin
Validate;
inherited;
end;
Можно посмотреть и реализацию:
http://groups.google.com/groups?selm=1553063689%40p2.f175.n5020.z2.ftn
--
С уважением, LVT.
ASoft (2004-11-25 09:39:00) [5]Смотри ветку ниже [проверить на тип]
MBo (2004-11-25 09:25:00) [6]Cтиль окна Edit должен содержать флаг ES_NUMBER
(SetWindowLong c GWL_STYLE)