![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Написание компанента
LuckyMan © (2002-07-28 21:12:00)Здравствуйте. Столкнулся со следующей пролемой. Мне нужно выполнить следующее: написать компонент, эмулирующий обычную кнопку, однако, имеющую анимированный caption (бегущую строку).
Но в выполнении задания стоит условие - использовать стандартный
контрол Button нельзя и рисовать ее нужно при помощи стандартных
графических процедур(линий и т.д.). т.е. писать компанент надо с нуля. Кнока должна реагировать на стандартные события (Click, DBlClick и т.д.), в общем вести себя как обычная кнопка.
На данный момент выполнено следующее: качестве класса объекта
выбран TCustomControl. Написаны процедуры для отрисовки четырех
визуальных состояний кнопки(кнопка нетронута, кнопка выделена, кнопка нажата и Disabled). а вот столкнулся с такими проблемами:
1. Ну, для того чтобы перерисовать кнопку при нажатии я использовал
procedure TCustomButton.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbLeft) then
begin
........
тоже самое c MouseUp (для отрисовки состояния, когда кнопка отжата но остается выделена),
????
а вот как отловить событие того, что на форме выбран другой
объект с TabStop=true (это может произойти при выборе клавишей Tab или щелчком мыши на другом объекте) и перерисовать его
в результате наличия этого события?
2. Как сделать так, чтобы стало возможным отлавливать изменения, сделанные пользователем в редакторе свойств объекта перед запуском программы и пересовывать объект на форме согласно результатам этих изменений опятьже перед запуском программы
3. Что посоветуете с анимацией надписи ?
Заранее Спасибо!
Юрий Зотов (2002-07-28 21:40:00) [1]> как отловить событие того, что на форме
> выбран другой объект
В этот момент Ваша кнопка получит сообщение WM_KILLFOCUS. Посмотрите, например, как в VCL реализовано событие OnExit.
Кстати, кнопка может стать выделенной и без всякой мыши - клавишей Tab. Так что надо ловить не Down/Up, а WM_SETFOCUS.
> Как сделать так, чтобы стало возможным отлавливать изменения,
> сделанные пользователем в редакторе свойств объекта
Для этого служат методы Set (методы записи свойств). Они вызываются при любом изменении свойств и могут выполнять и перерисовку, и вообще любую дополнительную работу. Примеров в VCL - целая туча.
> Что посоветуете с анимацией надписи?
Встроить в кнопку таймер и по нему перерисовывать Caption.
И последнее - рисование НАМНОГО упростится, если использовать DrawFrameControl (см. в справке API).