Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

косяк с заходом мыша на форму и уходом с неё

18K
15 апреля 2007 года
#pragma
16 / / 03.03.2007
Ну совсем неожиданный баг! Всегда таким манером делал, по науке всё, и работало, как надо, а тут вылез косяк.. :(

Короче, захотелось как-то сделать что-то симпатичное - как окошко у DownLoad Master'а - наведешь мышу - постепенно ярчает, уберёшь - постепенно прозрачнеет. И в самом начале работы на тебе bug!! Если медленно вести мышу - всё пачит, если быстро - срабатывает не всегда, а иногда пролетает, т.е. форма не прозрачнеет. После многочисленных экспериментов выяснилось, что если мыша при уходе с формы попадает на синенький border - всё work, а если пролетает - шиш.

Короче, вот код:
Код:
TWndMethod OldFormWindowProc;

//
void __fastcall TForm1::NewFormWindowProc(TMessage &Msg)
{
  switch (Msg.Msg)
  {
    case CM_MOUSELEAVE: {
                          Form1->AlphaBlendValue = 100;
                        }
    break;

    case CM_MOUSEENTER: {
                          Form1->AlphaBlendValue = 255;
                        };
    break;
  }
  OldFormWindowProc(Msg);
}

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  OldFormWindowProc = Form1->WindowProc;
  Form1->WindowProc = NewFormWindowProc;
  Form1->Perform(CM_MOUSELEAVE,0,0);
}


Юзаю BCB 6. Может, косяк - нужно не CM_* мессаги, а WM_*? А?
19K
15 апреля 2007 года
Malice
33 / / 13.03.2007
Мдя... я занимался подобным года 2 назад, и реализовывал через сообщения WM_* и через Hook. (В DLL) Если нужен будет исходник пиши :)
18K
15 апреля 2007 года
#pragma
16 / / 03.03.2007
КОНЕЧНО НУЖЕН!! А есть какая-нибудь толковая документация по хукам? А то что ето - приблизительно представляю, а как использовать - не понятно.. :rolleyes:
19K
17 апреля 2007 года
Malice
33 / / 13.03.2007
Лови: если не разберёщься пиши на мыло: [email]malicex@mail.ru[/email]
19K
18 апреля 2007 года
Snikex
32 / / 03.04.2007
Цитата: Malice
Мдя... я занимался подобным года 2 назад, и реализовывал через сообщения WM_* и через Hook. (В DLL) Если нужен будет исходник пиши :)


Не обязательно писать библиотеку :eek:. Можешь использовать SetCaptureControl() - и отслеживать положеие курсора относительно формы. Или во время наведения курсора на компонент делай так

TRACKMOUSEEVENT trEvent;
trEvent.cbSize = sizeof(trEvent);
trEvent.dwFlags = TME_LEAVE;
trEvent.hwndTrack = Handle;
trEvent.dwHoverTime = 10;
TrackMouseEvent(&trEvent);


Тогда событие WM_MOUSELEAVE точно сработает

19K
18 апреля 2007 года
Malice
33 / / 13.03.2007
Это дело вкуса... тебя же никто не заставляет делать именно так... просто пользы от изучения работы с Dll и с хуками будет несоизмеримо больше..
18K
18 апреля 2007 года
#pragma
16 / / 03.03.2007
Товарищ Malice, большое спасибо за мануал ещё раз!
Мыло: [EMAIL="Dominatore@yandex.ru"]Dominatore@yandex.ru[/EMAIL].
Чего-то не пойму - прошлый ответ пропал куда-то, чё за хрень творится, вчера же отвечал!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог