Среда, 15.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нравится раздел статьи?
Всего ответов: 68
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Система » WinAPI

WinAPI. Функции работы с курсором

Сегодня я расскажу про API функции используемые при работе с курсором. В принципе, при написании офисных программ, они используются очень редко, но всё же мне иногда приходят вопросы связанные с курсором. Поэтому я решил описать их сегодня.

Сегодня ты узнаешь про:

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;

Я попробовал воссоздать, но ничего не вышло. Разбираться пока времени нет. Как только разберусь, так сразу напишу статью.

Получить ссылку на материал

Категория: WinAPI | Добавил: Барон (07.12.2011)
Просмотров: 2387 | Теги: Функця, Курсор, WinAPI | Рейтинг: 1.0/1
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
ActiveX [10]
CORBA и COM [16]
Kol и MCK [23]
WinAPI [28]
Компоненты [27]
Работа с Bluetooth [4]
Железо [8]
Текст [18]
Разное [98]
Королевство Delphi © 2010-2024
Яндекс цитирования