Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как нормально заставить работать CM_MOUSELEAVE [D7, WinXP]


tytus ©   (2007-03-26 15:01:00) 

Доброго дня. Есть форма в длл, показываемая модально. Событие cm_mouseenter срабатывает нормально, а вот CM_MOUSELEAVE - не хочет. Нужно  для установки флага (boolean), по которому на канву формы копируется то один, то другой рисунок (BitBlt).


Loginov Dmitry   (2007-03-26 19:59:00) [1]

> убрать форму из ДЛЛ и проблема решиться сама-собою.


Не решится. Дело здесь не в ДЛЛ.


Eraser   (2007-03-26 19:31:00) [2]

> [0] tytus ©   (26.03.07 15:01)
> Доброго дня. Есть форма в длл, показываемая модально.

убрать форму из ДЛЛ и проблема решиться сама-собою.


Loginov Dmitry   (2007-03-26 16:59:00) [3]


> [4] Жуков Олег   (26.03.07 15:37)


Работает для голой формы. Если растянуть на форме к примеру TImage, то работать перестает. Технологии, млин!


Loginov Dmitry   (2007-03-26 15:56:00) [4]

Добавь таймер. Через каждые 100 - 200 мс проверяй, находится ли мыша на форме, или вне ее пределов.

А сообщением CM_MOUSELEAVE особо не загоняйся. Жди, когда борландцы подправят в VCL способы оповещения с помощью CM_MOUSELEAVE, или же извращайся другими, но работающими способами.


tytus   (2007-03-26 15:55:00) [5]

>Жуков Олег   (26.03.07 15:37) [4]
Супер! Спасибо!


Жуков Олег   (2007-03-26 15:37:00) [6]

В MouseEnter вставь:

var
 EventTrack: TTrackMouseEvent;
...

 EventTrack.cbSize := SizeOf(EventTrack);
 EventTrack.dwFlags := TME_LEAVE;
 EventTrack.hwndTrack:= Handle;
 EventTrack.dwHoverTime := HOVER_DEFAULT;
 TrackMouseEvent(EventTrack);


tytus   (2007-03-26 15:19:00) [7]

private 
   procedure CmMouseEnter(var Msg:TMessage);message CM_MOUSEENTER;
   procedure CmMouseLeave(var Msg:TMessage);message CM_MOUSELEAVE;

begin

...

procedure TSForm.CmMouseEnter(var Msg:TMessage);
begin
MM:=true;
end;

procedure TSForm.CmMouseLeave(var Msg:TMessage);
begin
MM:=false;
//можно вставить
//MessageBox(Handle,'Leave','...',MB_OK+MB_SYSTEMMODAL);
// и масаги небудет. Только если форма потеряет фокус ввода (кликнуть)
// гдето-на десктопе, то сработает и месаг появится!
end;


Loginov Dmitry   (2007-03-26 15:15:00) [8]

> а вот CM_MOUSELEAVE - не хочет


Что, прям совсем ни разу не срабатывает?


GrayFace   (2007-03-26 15:09:00) [9]

Должно, раз модально показываешь. Проблемы должны быть с другими вещами...


Наверх

Титульная страница Поиск, карта сайта Написать письмо