Главная страница
    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.008 c
14-25893
Алексей
2004-02-16 12:06
2004.03.09
Помогите решить графическую задачу на паскале


4-25972
MScorp
2004-01-03 00:20
2004.03.09
Принять WinPopup сообщение


1-25737
ghg
2004-02-26 22:49
2004.03.09
Axis.Labels в TChart


11-25724
puky
2003-05-23 19:16
2004.03.09
Kol и Shareware


1-25758
Pahan_
2004-02-26 16:16
2004.03.09
Drag n Drop в наследнике от TTreeView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский