Pascal/Turbo Pascal - usar el mouse en pascal

 
Vista:

usar el mouse en pascal

Publicado por micropais (209 intervenciones) el 06/08/2005 10:56:28
{
Micropais 31-7-2005
UNIDAD MOUSE - libreria bastante sencilla para utilizar el raton en nuestros
programillas funciona tanto en modo texto como en algunos modos graficos, no
estan todas las funciones del raton , pero si las mas basicas.
}

UNIT UMOUSE;
{°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°}
INTERFACE {.......... * simbolos publicos *..........................}
{°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°}
{ * variables globales usado por las funciones y procedimientos del raton }
var

horizontal_cursor_position,vertical_cursor_position:integer;
button_status:integer;
button:integer;

number_of_button_presses:integer;
mouse_status,number_of_buttons:integer;

horizontal_cursor_position_at_last_press:integer;
vertical_cursor_position_at_last_press:integer;

minimo_x,minimo_y,maximo_x,maximo_y:word;{ mouse_window }
x1,x2,y1,y2:word;{ mouse_window }


{............................................................................}
procedure mouse_initialization;
procedure show_cursor;
procedure hidden_cursor;

procedure get_mouse_position_and_button_status;
procedure set_mouse_cursor_position(new_horizontal_cursor_position,new_vertical_cursor_position:integer);

procedure get_button_press_information(button:integer);
procedure mouse_window(x1,y1,x2,y2:integer); {F7yF8}

procedure cursor_off;
procedure cursor_on;

{°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°}
IMPLEMENTATION {.......... * simbolos privados *......................... }
{°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°}
uses windos;
var regs:TRegisters;
procedure mouse_initialization;
{ este procedimiento chequea si el est  instalado el hadrware y software
del raton si esta todo correcto devuelve en las variables Globales
mouse_status=-1 si no =0
number_of_buttons=numero de botones que dispone el raton
}

{ input ................ AX= 0
output................ AX= mouse status
BX= number of buttons}
begin
regs.AX:=0;
intr($33,regs);
mouse_status:=regs.AX;
number_of_buttons:=regs.BX;

end;

procedure show_cursor;
{ Este procedimiento activa el cursor del raton en la pantalla
input ................ AX= 1
output ............... none }
begin
regs.AX:= 1;
intr($33,regs);
end;
procedure hidden_cursor; {2}
{ Este procedimiento Oculta el cursor del raton de la pantalla
input ................ AX= 2
output ............... none }
begin
regs.AX:= 2;
intr($33,regs);
end;

procedure get_mouse_position_and_button_status; {3}
{ este procedimiento Devuelve en las variables globales
button_status = el boton o botones que se han pulsado
horizontal_cursor_position = la coordenada x del mouse
vertical_cursor_position = la coordenada y del mouse
}
{ this function report current mouse position & button status.
button down a bit is 1
button up a bit is 0 button 1 2 3
input ............... AX= 3 ± ± ±
output .............. BX= button status 1 4 2
.............. CX= horizontal cursor position
.............. DX= vertical cursor position

nota: si se pulsan varios botones a la vez el resultado
es la suma de ambos botones.
por ejemplo si se pulsa el boton 1+2 = 5
1+3 = 3
2+3 = 6
1+2+3= 7 }

begin
regs.AX:=3;
intr($33,regs);
button_status:=regs.BX;
horizontal_cursor_position:=regs.CX {div 8};
vertical_cursor_position:=regs.DX {div 8};
end;

procedure set_mouse_cursor_position(new_horizontal_cursor_position,new_vertical_cursor_position:integer);
{
this function sets cursor to a specified position on the screen.
input ............... AX = 4
............... CX = new horizontal cursor position
............... DX = new vertical cursor position
output............... none }

begin
regs.AX:= 4;
regs.CX:= new_horizontal_cursor_position ;
regs.DX:= new_vertical_cursor_position ;
intr($33,regs);
end;

procedure get_button_press_information (button:integer);
{
this function reports
1. curent button status.
2.a count of button press since the last call to function 5
3.horizontal and vertical position of the cursor,the button
was pressed last time.
input ............... AX = 5
............... BX = button ; BX =0 check left button
; BX =1 check right button
; BX =2 check middle button
output ........... AX=button status ; bit 0 left button
; bit 1 right button
; bit 2 middle button
BX= number of button presses
CX= horizontal cursor position at last press
DX= vertical cursor position at last press }


begin
regs.AX:=5;
regs.BX:=button;
intr($33,regs);
button_status:=regs.AX;
number_of_button_presses:=regs.BX;
horizontal_cursor_position_at_last_press:=regs.CX div 8;
vertical_cursor_position_at_last_press:=regs.DX div 8;
end;

procedure mouse_window(x1,y1,x2,y2:integer);
{ * establece las coordenadas minimas y maximas del mouse utiliza el mismo
sistema de coordenadas de abrir ventanas de window }

begin
minimo_x:=x1;
maximo_x:=x2;
minimo_y:=y1;
maximo_y:=y2;

regs.ax:=7; {n§ de la funcion }
regs.cx:=minimo_x shl 3 ;{nuevo minimo_x }
regs.dx:=maximo_x shl 3;{nuevo maximo_x }
intr($33,regs); {}

regs.ax:=8; {n§ de la funcion }
regs.cx:=minimo_y shl 3;{nuevo minimo_y }
regs.dx:=maximo_y shl 3;{nuevo maximo_y }
intr($33,regs); {}
end;
{***************************************************************************}
procedure cursor_off;
{ * apaga el cursor del BIOS (no mouse) }
begin
regs.AH:=01;
regs.CH:=$20;
regs.CL:=12;
intr($10,regs);
end;
procedure cursor_on;
{ * restablece el cursor por defecto BIOS }
begin
regs.AH:=01;
regs.CH:=11;
regs.CL:=12;
intr($10,regs);
end;
{***************************************************************************}

END.

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

RE:usar el mouse en pascal

Publicado por raimundo (1 intervención) el 03/09/2005 19:33:39
tengo un problema con esto..., cada ves que he tratado de usar el "uses windos" me alega que no encuentra el windos.tpu, que puedo hacer, como arreglo esto?!
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

RE:usar el mouse en pascal

Publicado por micropais (209 intervenciones) el 01/10/2005 13:51:13
Perdon por no responder antes pero he estado bastante ocupado y me he olvidado de los foros .

windos.tpu es una libreria de turbo pascal 7.0 se deberia encontrar en el subdirectorio UNITS como windos.tpu o en el subdirectorio SOURCE pero en este caso como windos.pas ,ejecutalo y aunque te de un error de que el fichero no es un ejecutable se creara el fichero de compilacion TPU.

En el caso de que ya poseas estos ficheros (que de echo deberian estar ahi)
y el compilador no los vea , deberia ser por un problema en la ruta PATH, configuralo bien , si no sabes o estas bajo XP copia el fichero al mismo directorio donde ejecutas el codigo fuente de tus ficheros .pas

si sigues teniendo dudas , te falta un fichero o cualquier otra cosa.
aqui estamos para eso.

saluDOS.

MICROPAIS
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

RE:usar el mouse en pascal

Publicado por micropais (209 intervenciones) el 01/10/2005 16:34:41
{
Micropais 1-10-2005
UNIDAD UMOUSE - libreria bastante sencilla para utilizar el raton en nuestros
programillas funciona tanto en modo texto como en algunos modos graficos, no
estan todas las funciones del raton , pero si las mas basicas.

* Nueva version especial para RAIMUNDO para no tener que usar la libreria WINDOS las instrucciones asemmbler se introducen directamente mediante ASM
hay algunos cambios como la variable HCPALP:word; en vez de
horizontal_cursor_position_at_last_press:word;
porque dentro de asm...end no funciona no se si por ser demasiado larga
o por exceso de giones.
* las siguientes intrucciones:
shl cx,3
shl dx,3
implementadas en algunos procedimientos te pueden dar un error 159:
"instrucciones 286/287 no estan activadas", en un ordenador antiguo...
si es asi activa esa opcion del compilador
o cambialas los SHL por un DIV osease una division entre 8.
}

UNIT UMOUSE;
{°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°}
INTERFACE {.......... * simbolos publicos *..........................}
{°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°}
{ * variables globales usado por las funciones y procedimientos del raton }
var

horizontal_cursor_position,vertical_cursor_position:integer;
button_status:integer;
button:integer;

number_of_button_presses:integer;
mouse_status,number_of_buttons:integer;

minimo_x:word;
minimo_y:word;
maximo_x:word;
maximo_y:word; { mouse_window }
x1:word;
x2:word;
y1:word;
y2:word; { mouse_window }


HCPALP:word; { horizontal_cursor_position_at_last_press:word;}
VCPATLP:word;{ vertical_cursor_position_at_last_press:word;}
{............................................................................}
procedure mouse_initialization;
procedure show_cursor;
procedure hidden_cursor;

procedure get_mouse_position_and_button_status;
procedure set_mouse_cursor_position(new_horizontal_cursor_position,new_vertical_cursor_position:integer);

procedure get_button_press_information(button:integer);
procedure mouse_window(x1,y1,x2,y2:word); {F7yF8}

procedure cursor_off;
procedure cursor_on;

{°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°}
IMPLEMENTATION {.......... * simbolos privados *......................... }
{°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°}

procedure mouse_initialization;assembler;
{ este procedimiento chequea si el est instalado el hadrware y software
del raton si esta todo correcto devuelve en las variables Globales
mouse_status=-1 si no =0
number_of_buttons=numero de botones que dispone el raton
}

{ input ................ AX= 0
output................ AX= mouse status
BX= number of buttons}
asm
mov AX,0
int 033h
mov mouse_status,AX
mov number_of_buttons,BX

end;

procedure show_cursor;assembler;
{ Este procedimiento activa el cursor del raton en la pantalla
input ................ AX= 1
output ............... none }
asm
mov AX,1
int 033h
end;
procedure hidden_cursor;assembler; {2}
{ Este procedimiento Oculta el cursor del raton de la pantalla
input ................ AX= 2
output ............... none }
asm
mov AX,2
int 033h
end;

procedure get_mouse_position_and_button_status;assembler; {3}
{ este procedimiento Devuelve en las variables globales
button_status = el boton o botones que se han pulsado
horizontal_cursor_position = la coordenada x del mouse
vertical_cursor_position = la coordenada y del mouse
}
{ this function report current mouse position & button status.
button down a bit is 1
button up a bit is 0 button 1 2 3
input ............... AX= 3 ± ± ±
output .............. BX= button status 1 4 2
.............. CX= horizontal cursor position
.............. DX= vertical cursor position

nota: si se pulsan varios botones a la vez el resultado
es la suma de ambos botones.
por ejemplo si se pulsa el boton 1+2 = 5
1+3 = 3
2+3 = 6
1+2+3= 7 }

asm
mov AX,3
int 033h
mov button_status,BX
mov horizontal_cursor_position,CX {div 8}
mov vertical_cursor_position,DX {div 8}
end;

procedure set_mouse_cursor_position(new_horizontal_cursor_position,new_vertical_cursor_position:integer);assembler;
{
this function sets cursor to a specified position on the screen.
input ............... AX = 4
............... CX = new horizontal cursor position
............... DX = new vertical cursor position
output............... none }

asm
mov AX,4
mov CX,new_horizontal_cursor_position
mov DX,new_vertical_cursor_position
int 033h
end;
{}
procedure get_button_press_information (button:integer);assembler;
{
this function reports
1. curent button status.
2.a count of button press since the last call to function 5
3.horizontal and vertical position of the cursor,the button
was pressed last time.
input ............... AX = 5
............... BX = button ; BX =0 check left button
; BX =1 check right button
; BX =2 check middle button
output ........... AX=button status ; bit 0 left button
; bit 1 right button
; bit 2 middle button
BX= number of button presses
CX= horizontal cursor position at last press
DX= vertical cursor position at last press }

asm
mov AX,5
mov BX,button
int 033h
mov button_status,AX
mov number_of_button_presses,BX
shl cx,3
shl dx,3

mov HCPALP,CX { horizontal_cursor_position_at_last_press:word;}
mov VCPATLP,DX { vertical_cursor_position_at_last_press:word;}
end;

procedure mouse_window(x1,y1,x2,y2:word);assembler;
{ * establece las coordenadas minimas y maximas del mouse utiliza el mismo
sistema de coordenadas de abrir ventanas de window }

asm
mov ax,minimo_x
mov x1,ax
mov ax,maximo_x
mov x2,ax
mov ax,minimo_y
mov y1,ax
mov ax,maximo_y
mov y2,ax

mov ax,7 {n§ de la funcion }
mov cx,minimo_x {nuevo minimo_x }
shl cx,3
mov dx,maximo_x
shl dx,3;{nuevo maximo_x }
int 033h {}

mov ax,8 {n§ de la funcion }
mov cx,minimo_y
shl cx,3;{nuevo minimo_y }
mov dx,maximo_y
shl dx,3;{nuevo maximo_y }
int 033h {}
end;
{***************************************************************************}
procedure cursor_off;assembler;
{ * apaga el cursor del BIOS (no mouse) }
asm
mov AH,01
mov CH,20h
mov CL,12
int 10h
end;
procedure cursor_on;assembler;
{ * restablece el cursor por defecto BIOS }
asm
mov AH,01
mov CH,11
mov CL,12
int 10h
end;
{***************************************************************************}

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
sin imagen de perfil

RE:usar el mouse en pascal

Publicado por Alejandro (15 intervenciones) el 25/10/2015 07:11:50
Hola que tal, funciona para free pascal?
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