[Back to MOUSE SWAG index]  [Back to Main SWAG index]  [Original]

Program MouseDemo;   { I just learned this little piece of wizardry }
Uses                 { so I thought I would pass it on -- have fun! }
  Crt,Dos,Drivers;
Type
  CharType=Set Of Char;
Var
  Key:Char; ValidKeys:CharType;
  Button_Status,Mouse_X,Mouse_Y,ButtonPressed,X,Y:Word;
Procedure GetMouse (Var Button_Status,Mouse_X,Mouse_Y:Word;
                                              Monitor:Word);
Var                       { --------------------------------------- }
  Regs:Registers;         { Button_Status     0 = no button pressed }
Begin                     { Mouse_X           X coordinate          }
  Regs.AX:=3;             { Mouse_Y           Y coordinate          }
  Intr($33,Regs);         { Monitor           0 = off  1 = on       }
  Button_Status:=Regs.BX; { Monitor can be set to 1 While coding to }
  Mouse_X      :=Regs.CX; { display Button_Status,   Mouse_X,   and }
  Mouse_Y      :=Regs.DX; { Mouse_Y in the upper-left corner of the }
  If (Monitor=1) Then     { screen                                  }
    Begin                 { --------------------------------------- }
      TextBackGround(7); TextColor(8); GotoXY(1,1);
      Write('             '); GotoXY(1,1);
      Write(Button_Status:2,Mouse_X:5,Mouse_Y:5); Delay(100)
    End
End;
Procedure GetEvent;
Label
  ExitLoop;
Begin
  TextBackGround(0); ClrScr; TextColor(7);
  GotoXY(26,12); Write('Continue? [Y] or [N]? ');
  ValidKeys:=[#89,#78];          { accept only Y or N as valid keys }
  Key:=#255;                     { initialize Key to a nonvalid key }
  Repeat
    While (Not KeyPressed) Do
      Begin
        GetMouse(Button_Status,Mouse_X,Mouse_Y,0);
        Repeat                               { ^  turns monitor off }
          GetMouse(ButtonPressed,X,Y,0) { X & Y are dummy variables }
        Until (KeyPressed) Or (ButtonPressed<>Button_Status);
    { Repeat ^ Until "waits" until a change in Button_Status occurs }
    { this eliminates a "slow" click from being processed as two or }
    { more clicks                                                   }
        If (Button_Status>0) THEN { a mouse button has been pressed }
          Begin { convert mouse clicks into corresponding key codes }
            If      (Mouse_X=288) And (Mouse_Y=88) Then Key:=#89
            Else If (Mouse_X=344) And (Mouse_Y=88) Then Key:=#78;
            If      (Key In ValidKeys)             Then Goto ExitLoop
          End                              { exit the loop if valid }
      End;                                 { key codes are received }
    Key:=Upcase(ReadKey) { get keyboard event if KeyPressed is true }
  Until (Key In ValidKeys);
  ExitLoop: TextBackGround(0); ClrScr; TextColor(7);
  If Key=#89 Then
    Begin
      Randomize;
      X:=Random(61)+10;      { pick a random X column from 10 to 60 }
      Y:=Random(21)+ 3;      { pick a random Y row    from  3 to 23 }
      GotoXY(X,Y);     Write(#177);
      GotoXY(X-5,Y+1); Write('Click here!');
              { the X column and Y row numbers must be converted to }
              { X and Y coordinates by multiplying the column & row }
              { numbers by 8 and then subtracting 8 from that value }
      Repeat  { for example:  column 40, row 10 converts to 312, 72 }
        GetMouse(Button_Status,Mouse_X,Mouse_Y,1)
                                             { ^   turns monitor on }
      Until(Button_Status>0) And (Mouse_X=X*8-8) And (Mouse_Y=Y*8-8);
      GetEvent                   {        ^^^^^               ^^^^^ }
    End;                         { X coordinate        Y coordinate }
  HideMouse; ClrScr
End;
Begin
  InitEvents;
        { sets the "hide counter" to zero and displays mouse cursor }
        { use ShowMouse to decrement the hide counter               }
        { use HideMouse to increment the hide counter               }
        { when hide counter equals zero the mouse cursor is visible }
  GetEvent
End.

[Back to MOUSE SWAG index]  [Back to Main SWAG index]  [Original]