Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Ответить
 • Просмотры: 2
Аватара пользователя
DillerInc

Re: Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Сообщение DillerInc »

serg700

Давай пробовать .



Значит есть такая WinAPI-функция TrackMouseEvent
,которая способна следить за состоянием курсора и отправлять соответствующие сообщения.Эти сообщения будут приниматься и обрабатываться с помощью функции WindowProc приложения.

Функция TrackMouseEvent принимает в качестве параметра указатель на структуру
TRACKMOUSEEVENT
,заполняя которую мы указываем особенности слежения за курсором.



Итак,нам понадобится создать функцию,обрабатывающую различные сообщения, - WindowProc:





Код:

Код: Выделить всё

var
 Hovering : Boolean; // переменная типа Boolean,которая сигнализирует о зависании курсора
 TME : TTrackMouseEvent;
function WindowProc(hWnd : HWND; uMsg : UINT; wParam : WPARAM;
                    lParam : LPARAM) : LRESULT; stdcall;
begin
 Result := DefWindowProc(hWnd, uMsg, wParam, lParam); 
if uMsg = WM_MOUSEMOVE then
begin
 { Заполняем структуру TRACKMOUSEEVENT }
 TME.cbSize := SizeOf(TME);
 TME.dwFlags := TME_HOVER; // Вариант с зависанием курсора
 TME.hwndTrack := hWnd; // Описатель,который используется первым параметром в WindowProc
 TME.dwHoverTime := 3000; // три секунды зависания
 TrackMouseEvent(TME); // Вызываем саму функцию
if Hovering then // Если курсор зависал и был спрятан,
begin
 ShowCursor(True);  // то показываем его
 Hovering := False;
 end;
end; // uMsg = WM_MOUSEMOVE
if uMsg = WM_MOUSEHOVER then // Если поступает сообщение
begin                                                        // о зависании курсора,то
 Hovering := True;                                              // прячем его
 ShowCursor(False);
end; // uMsg = WM_MOUSEHOVER
end; // WindowProc

Функция TrackMouseEvent словно бы одноразовая,т.е. сгенерировав одно сообщение,она перестаёт функционировать,поэтому её необходимо каждый раз запускать заново.Именно поэтому я поставил её инициацию в обработчик сообщения передвижения курсора (WM_MOUSEMOVE) .



P.S. Я точно не уверен возможно ли таким образом реализовать функцию WindowProc на чистом Delphi,т.е. с применением всяких там VCL и т.п.

Я это делал на примере минимального Delphi-приложения,где используется только WinAPI.

P.P.S. Вероятно описанная WindowProc не является полнофункциональной,т.к. я старался объяснить только принцип актуального вопроса.
Ответить

Вернуться в «Программирование и базы данных»