Avatar billede zity Nybegynder
05. januar 2003 - 09:10 Der 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.

Der er 60 point at hente!!!!

//Zity
Avatar billede hreiff Nybegynder
08. januar 2003 - 14:03 #1
Jeg kan desværre ikke køre TP under windows, men det må være noget med :

uses mouse;

var
  buttons: word;

begin
  if mouseparams(buttons) <> 0 then
  begin
    mouse_cursor(true);
    repeat
      if mouse_clicked
Avatar billede hreiff Nybegynder
08. januar 2003 - 14:09 #2
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;
Avatar billede hreiff Nybegynder
10. januar 2003 - 09:40 #3
Det skal være
  until false;
for at være en uendelig løkke (indtil break bliver kaldt)
Avatar billede hreiff Nybegynder
10. januar 2003 - 09:41 #4
og
  if (b and 1) = 1 then
Avatar billede hreiff Nybegynder
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;
Avatar billede hreiff Nybegynder
11. januar 2003 - 09:38 #6
PS. Der mangler lige følgende inden case-sætningen:

  HideMouse;
  CloseGraph;
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester