Сегодня я расскажу про 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;
Я попробовал воссоздать, но ничего не вышло. Разбираться
пока времени нет. Как только разберусь, так сразу напишу статью.
|