05. januar 2003 - 09:10Der er
5 kommentarer og 1 løsning
Mus i turbo pascal 5.5/7.0
Hej alle Eksperter jeg skal bruge en musse kode til turbo pascal 5.5/7.0 (Dos version) så hvis man f.eks. trykker inden for firkanten 50,10,100,100 på skærmen skal den gå til proceduren Start.
if mouse_clicked(buttons) then mouse_position(b,x,y); if (b and 1) then {left mouse button} begin if ((x > 50) and (x<100) and (y > 10) and (y < 100)) then Start; end else break; {other mouse button} until true; end; end;
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.
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;
PS. Der mangler lige følgende inden case-sætningen:
HideMouse; CloseGraph;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.