Главная страница
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.014 c
1-23971
Nox
2002-07-26 22:57
2002.08.08
<<<Помогите!>>>


14-24193
Loops
2002-07-13 01:27
2002.08.08
Работа на лето


1-24126
cherepovets
2002-07-26 17:18
2002.08.08
Панель задач


1-24083
Dmitry Zhelobaev
2002-07-25 14:13
2002.08.08
Работа с модемом?


14-24234
Alx2
2002-07-12 10:39
2002.08.08
Справочная система из html