Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.08;
Скачать: 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 вся ветка

Текущий архив: 2002.08.08;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
3-23954
Explorer
2002-07-19 09:19
2002.08.08
TreeView для данных из БД (MSSQL)


6-24141
Димитрий
2002-05-24 13:00
2002.08.08
Помогите с сокетами через прокси плыз, плыз, плыз


1-24065
Andrew_
2002-07-26 10:52
2002.08.08
Неправильное выравнивание создаваемых компонентов на лету


7-24252
SergeyDon
2002-05-23 13:59
2002.08.08
Как заставить Win_XP


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