Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
3-23949
AlexSam
2002-07-18 15:08
2002.08.08
ADOQuery


3-23921
Alex9801
2002-07-18 11:14
2002.08.08
Пустая строка в DBGrid


3-23924
Cranium
2002-07-18 12:51
2002.08.08
Формат даты в ACCESS


1-23994
Brand
2002-07-28 00:29
2002.08.08
Работа с реестром


1-24092
V.Turecky
2002-07-26 15:11
2002.08.08
Работа с ТCheckListBox...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский