| Сегодня я расскажу про API функции используемые при работе с курсором. В принципе, при написании офисных программ, они используются очень редко, но всё же мне иногда приходят вопросы связанные с курсором. Поэтому я решил описать их сегодня. Сегодня ты узнаешь про: ClipCursor CopyCursor CreateCursor DestroyCursor GetClipCursor GetCursorPos SetCursorPos ShowCursor ClipCursor Функция ограничивает движение курсора определённой областью. Если позиция курсора находится за пределами указанной области, windows автоматически переносит его в ближайшую точку в этой области. Существует в: Win NT, Win9x, Win32s. Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows. Объявление: Для С/С++ BOOL ClipCursor( CONST RECT *lpRect // Указатель на структуру области ); Для Delphi function ClipCursor( lpRect: PRect ): BOOL; stdcall; Функции передаётся единственный параметр в виде указателя на структуру в которой содержатся координаты области. Если всё ничтяк, то функция возвращает не ноль. Пример использования в Delphi: ClipCursor(Rect(10,15,50,55)). В этом случае курсор ограничивается прямоугольником с координатами Х1=10, Х2=15, Y1=50, Y2=55. CopyCursor Функция копирования курсора. Точнее сказать, возвращает копию переданного ей курсора. Существует в: Win NT, Win9x, Win32s. Для С/С++ объявлена в winuser.h. Самое интересное, что для Delphi я объявления не нашёл. Но оно должно выглядеть где-то так, как приведено ниже. Объявление: Для С/С++ HCURSOR CopyCursor( HCURSOR pcur // Указатель на курсор ); Для Delphi function CopyCursor( pcur: HICON ): HICON; stdcall; Функции передаётся единственный параметр в виде указателя на существующий курсор. После выполнения она вернёт копию переданного курсора. CreateCursor Функция создаёт новый курсор. Существует в: Win NT, Win9x, Win32s. Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows. Объявление: Для С/С++ HCURSOR CreateCursor( HINSTANCE hInst,// Указатель на экземпляр приложения int xHotSpot,// Горизонтальная позиция горячей точки int yHotSpot,// Вертикальная позиция горячей точки int nWidth, // Ширина курсора int nHeight,// Высота курсора CONST VOID *pvANDPlane,// Указатель на AND битовую маску CONST VOID *pvXORPlane // Указатель на XOR битовую маску ); Для Delphi function CreateCursor( hInst: HINST; // Указатель на экземпляр приложения xHotSpot, // Горизонтальная позиция горячей точки yHotSpot, // Вертикальная позиция горячей точки nWidth, // Ширина курсора nHeight: Integer; // Высота курсора pvANDPlaneter, // Указатель на AND битовую маску pvXORPlane: Pointer// Указатель на XOR битовую маску ): HCURSOR; stdcall; Горячая точка - точка которой будет происходить касание. Например, у курсора в виде прицела горяцая точка должна быть в центре, а у стрелки на её конце. DestroyCursor Функция уничтожает курсор. Существует в: Win NT, Win9x, Win32s. Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows. Объявление: Для С/С++ BOOL DestroyCursor( HCURSOR hCursor // Указатель на уничтожаемый курсор ); Для Delphi function DestroyCursor( hCursor: HICON // Указатель на уничтожаемый курсор ): BOOL; stdcall; Функции передаётся единственный параметр в виде указателя на существующий курсор который надо уничтожить. GetClipCursor Функция возвращает облать в которой может перемещатся курсор. Эту область можно задать с помощью функции ClipCursor. Существует в: Win NT, Win9x, Win32s. Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows. Объявление: Для С/С++ BOOL GetClipCursor( LPRECT lpRect // Структура типа Rect ); Для Delphi function GetClipCursor( var lpRect: TRect // Структура типа Rect ): BOOL; stdcall; Функции передаётся единственный параметр в виде указателя на структуру типа Rect. В неё будет записан результат, то есть размеры области курсора. Если всё ничтяк, то функция вернёт не ноль. GetCursorPos Функция возвращает текущее положение курсора. Существует в: Win NT, Win9x, Win32s. Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows. Объявление: Для С/С++ BOOL GetCursorPos( LPPOINT lpPoint // Структура с позицией курсора. ); Для Delphi function GetCursorPos( var lpPoint: TPoint // Структура с позицией курсора. ): BOOL; stdcall; Функции передаётся единственный параметр в виде указателя на структуру типа Point. В неё будет записан результат, т.е. текущая позиция курсора. Пример на Delphi: var MousePos:TPoint; begin GetCursorPos(MousePos); end; После этого, чтобы получить Х позицию курсора, нужно прочитать MousePos.х, а для y позиции нужно прочитать MousePos.y. Если всё ничтяк, то функция вернёт не ноль. SetCursorPos Функция устанавливает текущее положение курсора. С её помощью ты можешь переместить указатель курсора в любое место экрана. Существует в: Win NT, Win9x, Win32s. Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows. Объявление: Для С/С++ BOOL SetCursorPos( int X,// Горизонтальная позиция int Y // Вертикальная позиция ); Для Delphi function SetCursorPos( X, // Горизонтальная позиция Y: Integer // Вертикальная позиция ): BOOL; stdcall; Если всё ничтяк, то функция вернёт не ноль. ShowCursor Эта функция позволяет показывать и прятать курсор. Существует в: Win NT, Win9x, Win32s. Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows. Объявление: Для С/С++ int ShowCursor( BOOL bShow // cursor visibility flag ); Для Delphi function ShowCursor( bShow: BOOL ): Integer; stdcall; Функции передаётся только один параметр. Если он равен true, то курсор надо показать, а если равен false, то спрятать. Если всё ничтяк, то функция вернёт не ноль. Мне иногда приходят вопросы типа: "Как загрузить собственный курсор?". Признаюсь честно - не знаю. Я даже не могу знать всё. Я посмотрел помощь по Delphi и нашёл следующее: const crMyCursor = 5; procedure TForm1.FormCreate(Sender: TObject); begin Screen.Cursors[crMyCursor] := LoadCursor(HInstance, 'NewCursor'); Cursor := crMyCursor; end; Я попробовал воссоздать, но ничего не вышло. Разбиратся пока времени нет. Как только разбирусь, так сразу напишу статью.
|