![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как нормально заставить работать 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]Должно, раз модально показываешь. Проблемы должны быть с другими вещами...