10. januar 2003 - 21:27
#5
Jeg har prøvet at bikse noget sammen fra bunden vha. en bog, men jeg kan som sagt ikke teste det. Der mangler sikkert både ; og : mv. Vend tilbage hvis der mangler nogle konstanter eller lignende.
Program MouseTst;
Uses
Graph, Crt, Dos;
Const
LeftButton : Integer = 0;
RightButton : Integer = 1;
EitherButton: Integer = 2;
MouseReset = 0;
MouseShow = 1;
MouseHide = 2;
GetMouseStatus = 3;
SetMouseCoord = 4;
CheckButtonPress = 5;
CheckButtonRelease = 6
MouseMovement = 11;
Var
MouseExists: Boolean;
Procedure Mouse(var m1,m2,m3,m4: word);
var
regs: registers;
begin
Regs.AX := m1; Regs.BX := m2;
Regs.CX := m3; Regs.DX := m4;
Intr($33, Regs);
m1 := Regs.AX; m2 := Regs.BX;
m3 := Regs.CX; m4 := Regs.DX;
end;
Function HideMouse;
Var
m1,m2,m3,m4: word;
begin
m1 := MouseHide;
Mouse(m1,m2,m3,m4);
end;
Function ShowMouse;
Var
m1,m2,m3,m4: word;
begin
m1 := MouseShow;
Mouse(m1,m2,m3,m4);
end;
Function TestButton(TestType,WhichButton: integer): boolean;
Var
m1,m2,m3,m4: word;
FoundAction : boolean;
begin
TestButton := false;
FoundAction := false;
if (WhichButton = LeftButton) or (WhichButton = EitherButton) then
begin
m1 := TestType; m2 := LeftButton;
Mouse(m1,m2,m3,m4);
if m2 > 0 then
begin
TestButton := True;
FoundAction := True;
end;
end;
if not FoundAction and ((WhichButton = Rightbutton) or
(WhichButton = EitherButton)) then
begin
m1 := TestType; m2 := RightButton;
Mouse(m1,m2,m3,m4);
if m2 > 0 then
TestButton := True;
end;
end;
Function ResetMouse: Boolean;
Var
m1,m2,m3,m4: word;
begin
m1 := mouseReset;
Mouse(m1,m2,m3,m4);
if m1 < 0 then
ResetMouse := True
else
ResetMouse := False;
end;
Procedure MoveMouse(x,y: integer);
var
m1,m2,m3,m4: word;
Begin
m1:= SetMouseCoord;
If GetMaxX = 319 then x := x*2;
m3 := x; m4 := y;
Mouse(m1,m2,m3,m4);
x := m3; y := m4;
end;
Function InitMouse: Boolean;
Var
GMode: Integer;
Begin
MouseExists := True;
If ResetMouse then
begin
GMode := GetGraphMode;
If GMode = HercMonoHi then
Mem[$0040:$0049] := $06;
MoveMouse(0,0);
ShowMouse;
InitMouse := True;
end
else
begin
MouseExists := False;
end;
end;
Procedure GetMouseCoords(var x,y:integer);
var
m1,m2,m3,m4: word;
Begin
m1:= GetMouseStatus;
If GetMaxX = 319 then x := x*2;
m3 := x; m4 := y;
Mouse(m1,m2,m3,m4);
x := m3; y := m4;
if GetMaxX = 319 then x := x div 2;
end;
function MouseButtonReleased(WhichButton: integer): boolean;
var
Button: integer;
begin
MouseButtonReleased := TestButton(CheckButtonRelease, Whichbutton);
end;
function MouseButtonPressed(WhichButton: integer): boolean;
var
Button: integer;
begin
MouseButtonPressed := TestButton(CheckButtonPress, Whichbutton);
end;
function MouseInBox(Left,Top,Right,Bottom,x,y:integer): boolean;
begin
MouseInBox := ((x>=left) and (x <= right) and (y>=top) and (y<=bottom));
end;
function GetInput(WhichButton: integer): integer;
begin
if keypressed then
GetInput := Ord(ReadKey)
else
begin
if MouseButtonPressed(WhichButton) then
begin
While not MouseButtonReleased(WhichButton) do ;
GetInput := -1;
end
else
if MouseButtonReleased(WhichButton) then
GetInput := -1;
else
GetInput := 0;
end;
end;
function WaitForInput(WhichButton: integer): integer;
var
c: integer;
begin
repeat
c := getInput(WhichButton);
until c <> 0;
WaitForInput := c;
end;
(***********************)
Const
GDriver: integer = Detect;
Var
GMode, c, x, y: integer;
ok: integer;
Begin
InitGraph(GDriver,GMode,'');
If InitMouse then
begin
Hidemouse;
outTextXY(0,10,press a mousebutton);
ShowMouse;
repeat
c := WaitForInput(EitherButton);
until c < 0;
GetMouseCoords(var x,y:integer)
If MouseInBox(10,10,100,100,x,y) then
ok := 2
else
ok := 1;
end
else
ok := 0;
case ok of
0: writeln('Mouse not detected');
1: writeln('Button pressed');
2: writeln('Button pressed inside square');
end;
end;