Jump to content

Recommended Posts

Posted

Pessoal eu estou fazendo um programa para pegar o valor de x e y do mouse o codigo esta funcionando o problema e que eu nao estou conseguindo pegar o valor de x e y do mouse quando eu clico

eu estou fazendo apartir desse site abaixo

http://www.freepasca...se/index-5.html

segue o codigo

Program Pzim ;

Uses  mouse;

procedure botao;

 Var
 v1,v2:Integer;
 Event : TMouseEvent;
 Visible: Boolean;


begin

 InitMouse;
 ShowMouse;
 Visible:=True;

 Writeln('Presione o botao esquerdo do mouse para sair! ');
 Repeat
  GetMouseEvent(Event);

  With Event do
 If (Buttons=MouseLeftbutton) and
	(Action=MouseActionDown) then
   begin
   If Visible then
	 HideMouse
   else
	 ShowMouse;


			 Writeln('X',GetMouseX);



   Visible:=Not Visible;
   end;

 Until (Event.Buttons=MouseRightButton) and
	(Event.Action=MouseActionDown);

 DoneMouse;

end;

Begin

   botao;

End.
Posted

Não percebi bem a tua duvida...

Corri o teu código, e tirando o facto de só estares a escrever o X, e não o Y, o programa está a trabalhar nestes moldes:

Ao clicar no botão esquerdo do rato, ele escreve a posição

Ao clicar no botão direito do rato, o programa termina

O quê que notas a falhar em concreto?

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

Eu encontrei uma falha... no IDE/compilador.

Testei o programa compilado no Free Pascal 2.6.0, e funcionou perfeitamente - o valor da posição X aparece maravilhosamente bem. O Y só não aparece porque não há nada que busque esta posição e a escreva.

Testei o programa compilado no Dev-Pascal, e surgiu o problema referido: aparece sempre "X0", qualquer que seja a posição em que carreguemos.

Por isso, a solução é utilizar um compilador decente, e este é o FPC 2.6.0 - o Dev-Pascal usa uma versão super rudimentar de há mais de 10 anos atrás do FPC, pelo que não é, de todo, recomendado.

Knowledge is free!

Posted

OK, não testei no Dev.

Isso explica qualquer coisa! 😉

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

Eu usei algumas vezes o rato em programas meus, e nunca tive qualquer problema. Modo texto e modo gráfico.

De notar que uso o Borland Pascal 7... pode ser por aí...

Vou procurar as minhas rotinas do rato, se as encontrar direi mais qq coisa. 😉

Posted

Eu usei algumas vezes o rato em programas meus, e nunca tive qualquer problema. Modo texto e modo gráfico.

De notar que uso o Borland Pascal 7... pode ser por aí...

Vou procurar as minhas rotinas do rato, se as encontrar direi mais qq coisa. 😉

Passarito: O problema não é das rotinas é do compilador mesmo! 🙂 O Código do Sabing funciona bem no FreePascal. Não funciona é no DevPascal.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted (edited)

Bem, encontrei a unidade que usava para manipular o Rato.

Isto foi um colega meu que me deu, não fui nem eu, nem ele que desenvolveu portanto não sei se posso colocar aqui a unidade inteira.

Vou postar apenas até à INTERFACE. Um dos moderadores que diga se posso colocar o resto.

(******************************************************************************
*								  MouseLib								   *
*	second release, written by Loewy Ron, AUG 90				  *
*		   Third  release, TP6.0 asm support, LR Jan 91.					 *
*		   4TH release, added functions, LR FEB. 91.						 *
*		   5th release, added intercept & release functions				  *
******************************************************************************)
unit MouseLib;
interface
uses
dos
;
const
MOUSEINT = $33; {mouse driver interrupt}
LEFTBUTTON = 1; {bit 0}
RIGHTBUTTON = 2; {bit 1}
MIDDLEBUTTON = 4; {bit 2}
CURSOR_LOCATION_CHANGED = 1; {event mask bits}
LEFT_BUTTON_PRESSED = 2;
LEFT_BUTTON_RELEASED = 4;
RIGHT_BUTTON_PRESSED = 8;
RIGHT_BUTTON_RELEASED = 16;
MIDDLE_BUTTON_PRESSED = 32;
MIDDLE_BUTTON_RELEASED = 64;
type
mouseType = (twoButton,threeButton,another);
buttonState = (buttonDown,buttonUp);
direction = (moveRight,moveLeft,moveUp,moveDown,noMove);
grCursorType = record
 xH,yH : byte; {x,y Hot Point}
 data  : pointer;  {cursor look pointer}
end;
var
mouse_present : boolean;
mouse_buttons : mouseType;
eventX,eventY,eventButtons : word; {any event handler should update}
eventhappened : Boolean;	{these vars to use getLastEvent }
XMotions,YMotions : word;	{per 8 pixels}
mouseCursorLevel : integer;
{if > 0 mouse cursor is visiable, otherwise not, containes the level
 of showMouseCursor/hideMouseCursor}
const LastMask : word = 0;
lastHandler : pointer = Nil;
{when changing the interrupt handler temporarily, save BEFORE the
 change these to variables, and restore them when neccessary}
lastCursor : grCursorType = (
 xH : 0;
 yH : 0;
 data : nil );
{when changing graphic cursor temporarily, save these values BEFORE
 the change, and restore when neccessary}
const
click_repeat  = 10; { Recommended value for waitForRelease timeOut }
procedure initMouse; {when replacing mouse mode do that..!}
procedure showMouseCursor;
procedure hideMouseCursor;
function getMouseX : word;
function getMouseY : word;
function getButton(Button : Byte) : buttonState;
function buttonPressed : boolean;
procedure setMouseCursor(x,y : word);
function LastXPress(Button : Byte) : word;
function LastYPress(Button : Byte) : word;
function ButtonPresses(Button : Byte) : word; {from last last check}
function LastXRelease(Button : Byte) : word;
function LastYRelease(Button : Byte) : word;
function ButtonReleases(Button : Byte) : word; {from last last check}
procedure mouseBox(left,top,right,bottom : word); {limit mouse rectangle}
procedure graphicMouseCursor(xHotPoint,yHotPoint : byte; dataOfs : pointer);
procedure HardwareTextCursor(fromLine,toLine : byte);
procedure softwareTextCursor(screenMask,cursorMask : word);
function recentXmovement : direction;
function recentYmovement : direction;
procedure setArrowCursor;
procedure setWatchCursor;
procedure setUpArrowCursor;
procedure setLeftArrowCursor;
procedure setCheckMarkCursor;
procedure setPointingHandCursor;
procedure setDiagonalCrossCursor;
procedure setRectangularCrossCursor;
procedure setHourGlassCursor;
procedure setNewWatchCursor;
procedure setcaralhoPointingCursor;
procedure setEventHandler(mask : word; handler : pointer);
function GetLastEvent(var x,y : word;
var left_button,right_button,middle_button : buttonState) : boolean;
procedure setDefaultHandler(mask : word);
procedure enableLightPenEmulation;
procedure disableLightPenEmulation;
procedure defineSensetivity(x,y : word);
procedure setHideCursorBox(left,top,right,bottom : word);
procedure defineDoubleSpeedTreshHold(treshHold : word);
procedure disableTreshHold;
procedure defaultTreshHold;
procedure setMouseGraph;
procedure resetMouseGraph;
procedure waitForRelease(timeOut : word);
procedure swapEventHandler(mask : word; handler : pointer);
{ return old in lastMask and lastHandler }
function getMouseSaveStateSize : word;
procedure interceptMouse; { get mouse from interrupted program, and stop it .. }
procedure restoreMouse;
(*	mouseLib	 -	  Release 2				   *)
(*									*)
(* because of quirks in hercules graphic mode that is not detectable	*)
(*  by the mouse driver we have to know when we initMouse if we want	*)
(*  to check for graphic mode or not, if we do we must perform a	 *)
(*  setMouseGraph before initGraph, to initGraph in text mode we must *)
(*  resetMouseGraph before.. , if these calling conventions are not  *)
(*  taken we might have problems in hercules cards!		 *)
(*									*)
(* each call to hideMouseCursor must be balanced by a matching call  *)
(*  to showMouseCursor, 2 calls to hideMou.. and only 1 to showM..  *)
(*  will not show the mouse cursor on the screen!			*)

implementation
.....
Edited by passarito
Posted

Isto foi um colega meu que me deu, não fui nem eu, nem ele que desenvolveu portanto não sei se posso colocar aqui a unidade inteira.

Vou postar apenas até à INTERFACE. Um dos moderadores que diga se posso colocar o resto.

De facto esta situação é particular. Não sabem que foi o autor original?

De qualquer das formas, vou analisar a situação junto do Staff. 😉

Knowledge is free!

Posted (edited)

De facto esta situação é particular. Não sabem que foi o autor original?

Sim, sei. Está logo no inicio. O Autor e o mês/ano. mas não o conheço!!!!

* second release, written by Loewy Ron, AUG 90 *

Edited:

Calma....

Está lá na 2ª, 3ª e 4ª release que foi o Loewy Ron, provavelmente também foi ele que fez a 1ª, mas não tenho a certeza, no entanto descobri isto na net

http://www.megalextoria.com/usenet-archive/news141f1/b226/comp/binaries/ibm/pc/d/00015126.html

O que pode indicar que é livre....

Edited by passarito
Posted

Sendo a licença shareware, a publicação da unit no P@P não é permitida.

Lamento. Seria uma excelente unit, mas não pode ser. Agradecemos, no entanto, a tua ponderação antes de ter publicado. 😉

Knowledge is free!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.