Доброго времени суток.
Для графического режима можно использовать такой модуль
unit GMouse;
{$O+}
interface
uses Objects;
type
TCursorShape = (csArrow, csCross, csWatch);
TCursor = record BitMap : array[1..32] of Word; ZeroW, ZeroH: Word; Shape: TCursorShape; end;
const
CursorVisible : Boolean = False;
mbMiddleButton = 4;
CursorShape : TCursorShape = csArrow;
{ Cursor shape records }
ArrowCursor : TCursor = (
BitMap : ($9fff,$8fff,$87ff,$83ff,$81ff,$80ff,$807f,$803f,
$801f,$800f,$80ff,$887f,$987f,$fc3f,$fc3f,$fe7f,
$0000,$2000,$3000,$3800,$3c00,$3e00,$3f00,$3f80,
$3fc0,$3e00,$3600,$2300,$0300,$0180,$0180,$0000);
ZeroW : $0000;
ZeroH : $00ff;
Shape : csArrow );
CrossCursor : TCursor = (
BitMap : ($ffff,$ffff,$feff,$feff,$feff,$feff,$feff,$c007,
$feff,$feff,$feff,$feff,$feff,$ffff,$ffff,$ffff,
$0000,$0000,$0100,$0100,$0100,$0100,$0100,$3ff8,
$0100,$0100,$0100,$0100,$0100,$0000,$0000,$0000);
ZeroW : $0007;
ZeroH : $0007;
Shape : csCross);
GlassWatch : TCursor = (
BitMap : ($8003,$efef,$efef,$efef,$f45f,$fabf,$fd7f,$fc7f,
$fd7f,$fbbf,$f7df,$eeef,$ec6f,$e82f,$8003,$ffff,
$7ffc,$1010,$1010,$1010,$0ba0,$0540,$0280,$0380,
$0280,$0440,$0820,$1110,$1390,$17d0,$7ffc,$0000);
ZeroW : $0007;
ZeroH : $0007;
Shape : csWatch);
procedure ShowMouse;
procedure HideMouse;
procedure GetMousePos(var P: TPoint);
procedure SetMousePos(P: TPoint);
procedure SetMouseRegionX(NewX,NewY: Integer);
procedure SetMouseRegionY(NewX,NewY: Integer);
procedure SetMouseRegion(R: TRect);
procedure SetCursorShape(Shape: TCursorShape);
implementation
uses Dos;
procedure ShowMouse;
begin
if not CursorVisible then
asm
push ax
mov ax, 0001h
int 33h
pop ax
end;
CursorVisible:=True;
end;
procedure HideMouse;
begin
if CursorVisible then
asm
push ax
mov ax, 0002h
int 33h
pop ax
end;
CursorVisible:=False;
end;
procedure GetMousePos(var P: TPoint);
var
R : Registers;
begin
R.AX:=3;
Intr($33, R);
P.X:=R.CX;
P.Y:=R.DX;
end;
procedure SetMousePos(P: TPoint);
var
R : Registers;
begin
R.AX:=4;
R.Cx:=P.X;
R.DX:=P.Y;
Intr($33, R);
end;
procedure SetMouseRegionX(NewX,NewY: Integer);
var
R : Registers;
begin
R.AX:=7;
R.Cx:=NewX;
R.DX:=NewY;
Intr($33, R);
end;
procedure SetMouseRegionY(NewX,NewY: Integer);
var
R : Registers;
begin
R.AX:=8;
R.CX:=NewX;
R.DX:=NewY;
Intr($33, R);
end;
procedure SetMouseRegion(R: TRect);
begin
SetMouseRegionX(R.A.X, R.B.X);
SetMouseRegionY(R.A.Y, R.B.Y);
end;
procedure SetCursorShape(Shape: TCursorShape);
var
Sg, Off : Word;
Cursor : TCursor;
begin
case Shape of
csArrow : Cursor:=ArrowCursor;
csCross : Cursor:=CrossCursor;
csWatch : Cursor:=GlassWatch;
else Exit;
end;
Sg:=Seg(Cursor.BitMap);
Off:=Ofs(Cursor.BitMap);
asm
mov ax, 0009h
mov bx, Cursor.ZeroW
mov cx, Cursor.ZeroH
mov es, Sg
mov dx, Off
int 33h
end;
CursorShape:=Cursor.Shape;
end;
end.
Остальные функции 33 прерывания, которое отвечает за работу с курсором не реализовывал за ненадобностью.
Удачи!
Другие языки программирования и технологии
Как в Паскале можно описать курсор мыши? Именно вывести его на экран и определить его положение при выполнении программы
Turbo Pascal - Учебник (С. А. Немнюгин)
Глава 4, 5 - Использование мыши в текстовом и графическом режимах
Глава 4, 5 - Использование мыши в текстовом и графическом режимах
Похожие вопросы
- Подкиньте идею Как определить направление от Некой точки на экране до курсора мыши
- JS-программеры! подскажите пожалуйста код для перемещения объекта курсором мыши.
- Возможно ли в Паскале получить какой-нибудь символ уже выведенный на экран?
- Как в visual basic сделать запуск алгоритма щелчком прав. кнопки мыши? Как связать 2 формы и вывести их на экран вместе?
- Создать список. вывести его на экран.
- Опишите процесс выполнения программы
- Как вывести информацию на экран, assembler
- С++: Как изменять размеры многомерных динамических массивов по ходу выполнения программы?
- как на ActionScript сделать растягивающийся квадрат, следующий за курсором мыши (обычно выделение мышкой, при зажатой ле
- Как преобразуется обычная прога на си, где надо вывести слово на экран в маш.код и что процессор там считает?