Pascal/Turbo Pascal - MOUSE EN FREE PASCAL

 
Vista:

MOUSE EN FREE PASCAL

Publicado por Antonio Martín (74 intervenciones) el 31/10/2011 21:54:43
Hola: Necesito ayuda para resolver problema que me surge al implementar mouse en FREE PASCAL.
CODIGO FUENTE:
===============
uses crt, winmouse, wincrt;

var
x,y,state : longint;
c : char;

begin
if mousefoundo then
begin
clrscr;
ShowMouse;
while keypressed do Readkey;
repeat
getmousestate(x,y,state);
gotoxy(10,10);
write('X: ',x div 8,' Y: ',y div 8);
if LPressed then
state := 1;
if RPressed then
state := 2;
if MPressed then
state := 3;
gotoxy(20,10);
write('Boton pulsado = ',state)

until c=#27;
HideMouse;
while Keypressed do Readkey

end
end.

Este codigo fuente no me da errores al compilar y al ejecutar el programa me da la posicion del cursor, pero no me devuelve el boton del ratón que pulso.

Muy agradecido por la ayuda que me puedan prestar.
Un saludo: Antonio
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

MOUSE EN FREE PASCAL

Publicado por ramon (2158 intervenciones) el 05/11/2011 16:13:17
{Observa la unidat winmouse pero ten en cuenta que es para graficos o sea modo grafico
no modo texto}

unit winmouse;

interface
Function InitMouse:Boolean;
Procedure ShowMouse;
Procedure HideMouse;
Procedure GetMouseState(var x,y, buttons :Longint);
Function LPressed:Boolean;
Function RPressed:Boolean;
Function MPressed:Boolean;

Const
LButton = 1;
RButton = 2;
MButton = 4;

Var
MouseFound: Boolean;

implementation

uses
windows,graph;

var
oldexitproc : pointer;
mousebuttonstate : byte;

function InitMouse : boolean;

begin
InitMouse:=MouseFound;
end;

procedure ShowMouse;

begin
Windows.ShowCursor(true);
end;

procedure HideMouse;

begin
Windows.ShowCursor(false);
end;

function msghandler(Window: HWnd; AMessage:UInt; WParam : WParam; LParam: LParam): Longint; stdcall;

begin
case amessage of
wm_lbuttondblclk,
wm_lbuttondown:
mousebuttonstate:=mousebuttonstate or LButton;
wm_rbuttondblclk,
wm_rbuttondown:
mousebuttonstate:=mousebuttonstate or RButton;
wm_mbuttondblclk,
wm_mbuttondown:
mousebuttonstate:=mousebuttonstate or MButton;
wm_lbuttonup:
mousebuttonstate:=mousebuttonstate and not(LButton);
wm_rbuttonup:
mousebuttonstate:=mousebuttonstate and not(RButton);
wm_mbuttonup:
mousebuttonstate:=mousebuttonstate and not(MButton);
end;
msghandler:=0;
end;

Function LPressed : Boolean;

begin
LPressed:=(mousebuttonstate and LButton)<>0;
end;

Function RPressed : Boolean;

begin
RPressed:=(mousebuttonstate and RButton)<>0;
end;

Function MPressed : Boolean;

begin
MPressed:=(mousebuttonstate and MButton)<>0;
end;

Procedure GetMouseState(var x,y,buttons : Longint);

var
pos : POINT;

begin
buttons:=mousebuttonstate;
GetCursorPos(@pos);
ScreenToClient(GraphWindow,@pos);
x:=pos.x;
y:=pos.y;
end;

procedure myexitproc;

begin
exitproc:=oldexitproc;
mousemessagehandler:=nil;
end;

begin
mousemessagehandler:=@msghandler;
oldexitproc:=exitproc;
exitproc:=@myexitproc;
mousebuttonstate:=0;
MouseFound:=GetSystemMetrics(SM_MOUSEPRESENT)<>0;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar