Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.21;
Скачать: CL | DM;

Вниз

Создание сплывающей панельки...   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2003.07.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
6-67946
Fixxxer
2003-05-12 00:37
2003.07.21
Socket


3-67716
shick
2003-06-27 14:58
2003.07.21
InterBase 6


14-68011
Крот
2003-07-03 07:36
2003.07.21
Можно мне немножко поныть?...


14-68033
Slon
2003-07-03 16:56
2003.07.21
Comp1 -> Money1; Money1 + Money2 -> Comp2


3-67734
Shtukos
2003-06-29 14:15
2003.07.21
BDE выдает ошибку, как перевести в ADO