Вниз
Скачать: CL | DM;

Написание компанента   Найти похожие ветки 

 
LuckyMan   (2002-07-28 21:12) [0]

Здравствуйте. Столкнулся со следующей пролемой. Мне нужно выполнить следующее: написать компонент, эмулирующий обычную кнопку, однако, имеющую анимированный 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) [1]

> как отловить событие того, что на форме
> выбран другой объект

В этот момент Ваша кнопка получит сообщение WM_KILLFOCUS. Посмотрите, например, как в VCL реализовано событие OnExit.

Кстати, кнопка может стать выделенной и без всякой мыши - клавишей Tab. Так что надо ловить не Down/Up, а WM_SETFOCUS.


> Как сделать так, чтобы стало возможным отлавливать изменения,
> сделанные пользователем в редакторе свойств объекта

Для этого служат методы Set (методы записи свойств). Они вызываются при любом изменении свойств и могут выполнять и перерисовку, и вообще любую дополнительную работу. Примеров в VCL - целая туча.


> Что посоветуете с анимацией надписи?

Встроить в кнопку таймер и по нему перерисовывать Caption.


И последнее - рисование НАМНОГО упростится, если использовать DrawFrameControl (см. в справке API).



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.009 c
1-24056
Kin
2002-07-23 20:55
2002.08.08
Скрытые файлы...


3-23893
NDR
2002-07-17 13:54
2002.08.08
oemtoansistr


1-24032
ghg
2002-07-28 12:24
2002.08.08
Проблемы с созданием файла


1-24039
AM
2002-07-25 12:57
2002.08.08
Печать


1-24022
Denvor
2002-07-25 02:37
2002.08.08
Events Excel in Delphi?




   Наверх