Форум: "WinAPI";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];
ВнизСоздание сплывающей панельки... Найти похожие ветки
← →
D@VINCHI (2003-05-15 16:17) [0]Мастера, подскажете как мне сделать, чтобы моя форма сварачивалась, когда курсор мыши не на ней. Проблема в том, что я не могу перехватывать события от мыши когда курсор не на форме. Я знаю, что можно поставить мышиный ХУК, но заморачиваться не хочу, може кто знает как это сделать проще ???
← →
clickmaker (2003-05-15 16:32) [1]А это нужно сделать, пользуясь только Win API?
← →
Игорь Шевченко (2003-05-15 17:41) [2]TrackMouseEvent не поможет ?
← →
jonni (2003-05-15 20:38) [3]u menuya bial premernaya problema i ya reswhil vot kaka
procedure WMShowWindow(var message: TWMNCACTIVATE);message WM_NCACTIVATE;
kogda fokus na okne to vse normal"no..kak toka ushli to postupaet eto soobschenie.....
mozet pomozet....
← →
nikkie (2003-05-16 00:09) [4]я бы сделал SetCapture и после этого спокойно ловил бы WM_MOUSEMOVE
← →
Irbi (2003-05-16 10:21) [5]Помоему всё просто, лови на свой объект wm_MOuSEENTER ^ wm_MOuSELEAVE(не очень уверен в правильности, чисто, синтаксической: Enter-вводить, Leave- покидать); когда маус покидает форму(или др. объект) приходит wm_mouseleave, когда возвращается на объект wm_mouseENTER
← →
Mischka (2003-05-16 13:04) [6]а у меня не получается на API перехватить эти события. И TrackMouseEvent не помогает. Хотя с дельфийскими формами работает прекрасно... :(
← →
MBo (2003-05-16 13:14) [7]>Mischka
Я проверял WM_MOUSELEAVE и говорил тебе об этом - в паре с TrackMouseEvent работает. А про Дельфийские cm_mouseleave и др - смотри в исходниках, как Idle работает.
← →
Mischka (2003-05-16 14:42) [8]Ну, может, кусок кода кинешь? У меня ж нихрена не работает. (От платформы это не зависит?)
← →
MBo (2003-05-16 14:49) [9]>Ну, может, кусок кода кинешь
не сохранил, т.к. пробовал во временном проекте в соответствии с msdn без всяких изысков.
← →
Mischka (2003-05-16 14:56) [10]Ну посмотри, может, у меня чего не так:
MouseEvent.cbSize:=sizeOf(tagTRACKMOUSEEVENT);
MouseEvent.dwFlags:=TME_HOVER or TME_LEAVE;
MouseEvent.hwndTrack:=Window;
MouseEvent.dwHoverTime:=0;
trackMouseEvent(MouseEvent);
И в WindowProc:
case Message of
WM_MOUSELEAVE: beep(440, 40);
не пищит...
← →
clickmaker (2003-05-16 15:22) [11]А ОС случаем не 95?
← →
Mischka (2003-05-16 15:34) [12]Случаем ХР. Но хотелось бы чего-нибудь универсального. 95 - не в счет. 98/2000/ХР
← →
clickmaker (2003-05-16 15:44) [13]А WM_MOUSEHOVER пищит ?
← →
Mischka (2003-05-19 06:55) [14]ни WM_MOUSEHOVER, ни WM_MOUSELEAVE :(
Мож, они передаются не в сам Message, а в l/wParam? Глупо, конечно...
← →
nikkie (2003-05-19 08:31) [15]Не мешало бы проверять, что возвращает TrackMouseEvent. Вполне вероятно, что dtHoverTime = 0 не годится. MSDN пишет, что можно использовать HOVER_DEFAULT.
← →
Mischka (2003-05-19 08:57) [16]Да пробовал уже. Явно не в dtHoverTime дело
← →
MBo (2003-05-19 09:23) [17]>Mischka
ленив ты, видимо
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
TME:TTrackMouseEvent;
begin
if not OverFlag then begin
Caption:="Over "+IntToStr(GetTickcount);
OverFlag:=True;
end;
if not LeaveFlag then begin
TME.cbSize:=SizeOf(TME);
TME.dwFlags:= TME_LEAVE;
TME.hwndTrack:=Handle;
TME.dwHoverTime:=HOVER_DEFAULT;
TrackMouseEvent(TME);
LeaveFlag:=True;
end;
end;
procedure TForm1.MouseLeave(var m: TMessage);
begin
Caption:="Leave "+IntToStr(GetTickcount);
LeaveFlag:=False;
OverFlag:=False;
end;
← →
Mischka (2003-05-20 06:27) [18]:) Ленив. Но не до такой же степени. Если б был у меня TForm1, я бы не спрашивал.
Если описать в классе формы
procedure MouseEnter(var m: TMessage); message WM_MOUSEENTER;
procedure MouseLeave(var m: TMessage); message WM_MOUSELEAVE;
все работает нормально. Я уже сто раз так делал.
А на чистый API перевести не могу. В оконной процедуре эти события не хочут обрабатываться!!!
← →
MBo (2003-05-20 06:47) [19]msdn почитай про TrackMouseEvent. Там и пример был какой-то
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c