Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Вниз

OnMouseMove   Найти похожие ветки 

 
Leech   (2004-02-26 13:37) [0]

Есть такое событие, как OnMouseMove... А как узнать, что движение мыши перестало происходить над объектом?


 
Silver Alex   (2004-02-26 13:47) [1]

отлавливать сообщение WM_MOUSELEAVE


 
Leech   (2004-02-26 13:50) [2]

2 Silver Alex
можно пример?


 
Leech   (2004-02-26 13:57) [3]

2 Silver Alex
В справочной системе отсутствует информация о WM_MOUSELEAVE...
Есть WM_MOUSEFIRST, WM_MOUSELAST и WM_MOUSEMOVE...


 
Silver Alex   (2004-02-26 13:57) [4]

попутал, сообщение CM_MOUSELEAVE

...
public
{ Public declarations }
old: TWndMethod;
procedure newWNDProc(var Msg: TMessage);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
old:=Button1.WindowProc;
Button1.WindowProc:=newWNDProc;
end;
procedure TForm1.newWNDProc(var Msg: TMessage);
begin
old(Msg);
if Msg.Msg =CM_MOUSELEAVE then
begin
Button1.Caption:="no mouse";
end;
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Button1.Caption:="ok mouse";
end;


 
pasha_golub   (2004-02-26 14:21) [5]

Можно и проще OnExit, исходя из вопроса.


 
Vlad40   (2004-02-26 14:25) [6]


> pasha_golub © (26.02.04 14:21) [5]


А причем здесь OnExit? OnExit нельзя


 
Silver Alex   (2004-02-26 14:25) [7]

OnExit происходит когда теряется фокус, и мыша здесь ни при чем.А исходя из вопроса нужна именно мыша


 
Vlad40   (2004-02-26 15:26) [8]


> Silver Alex © (26.02.04 13:57) [4]

В развитие вопроса: а если у тебя 20 (к примеру) кнопочек и ты хочешь выполнять для них одинаковую процедуру OnMouseLeave, как ты в своей newWNDProc определишь для какой кнопки выполнять действие?


 
Rouse_   (2004-02-26 15:49) [9]

Думаю что предложенные варианты не совсем верно описывают решение.
Первое:
Дело в том что сообщение CM_MOUSELEAVE приложение отсылает в DoMouseIdle которое непосредственно вызывается в Application.OnIdle так что есть большая вероятность пропустить факт выхода курсора за пределы формы.
Второе:
Как вариант - можно сделать проверку границ формы и координат мыши по таймеру.
Ну и третье:
Самый оптимальный способ - это установка хука на WH_MOUSE.


 
serge   (2004-02-26 15:56) [10]

В дополнение к Rouse_ © (26.02.04 15:49) [9]


var
HookHandle: hHook;

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PEVENTMSG;
key: integer;
begin
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
with Form1 do
case msg.message of
//здесь обрабатываешь позицию мауса, например
WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr(msg.ParamH);

end;
end else
result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookHandle > 0 then
UnhookWindowsHookEx(HookHandle);
end;



 
Игорь Шевченко   (2004-02-26 17:16) [11]

Rouse_ © (26.02.04 15:49)


> Второе:
> Как вариант - можно сделать проверку границ формы и координат
> мыши по таймеру.
> Ну и третье:
> Самый оптимальный способ - это установка хука на WH_MOUSE.


Самый оптимальный способ - это написание мышиного драйвера и замена стандартного своим написанным.

RTFM SetCapture/ReleaseCapture



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
1-25733
Rayslava
2004-02-26 17:48
2004.03.09
RichEdit из Dll


4-25968
Igit
2004-01-03 22:08
2004.03.09
Debug API в XP


14-25938
iudjen
2004-02-11 21:43
2004.03.09
алгаритм переводчиков


1-25768
sapsi
2004-02-26 10:48
2004.03.09
Минимизация формы


3-25707
YuRock
2004-02-10 14:58
2004.03.09
ADO, DBase, индексы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский