1. win32lib mouse question

------=_NextPart_000_0005_01BFF125.C47D6760
        charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi all.

I have a win32lib question that I know has been asked before.

Following an "onMouse" event, is there a simple way to receive another
mouse event (like a second mouse button click) from within the onMouse=20
procedure?

What I want to do is something simple like click at a point in the =
window
and draw a line from the first clicked point to whatever the current =
mouse
position is until the mouse is again clicked (or perhaps the button is
released).

I have achieved it by hacking at win32lib a bit (got a global to the MSG
structure and "fetched" the message) but is there a simpler way?

Also, my attempts at using getMousePos() results in the x,y being =
different
to the actual mouse position. I have a vague memory from the Amiga=20
regarding the difference between screen coords and logical coords and =
functions
to convert from one to the other. Is this the problem?

Many thanks in advance.

Mark

------=_NextPart_000_0005_01BFF125.C47D6760
        charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META content=3D"MSHTML 5.00.2314.1000" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT size=3D2>Hi all.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>I have a win32lib question that I know has been =
asked=20
before.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>Following an "onMouse" event, is there a simple way =
to receive=20
another</FONT></DIV>
<DIV><FONT size=3D2>mouse event (like a second mouse button click) from =
within the=20
onMouse </FONT></DIV>
<DIV><FONT size=3D2>procedure?</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>What I want to do is something simple like click at =
a point in=20
the window</FONT></DIV>
<DIV><FONT size=3D2>and draw a line from the first clicked point to =
whatever the=20
current mouse</FONT></DIV>
<DIV><FONT size=3D2>position is until the mouse is again clicked (or =
perhaps the=20
button is</FONT></DIV>
<DIV><FONT size=3D2>released).</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>I have achieved it by hacking at win32lib a bit (got =
a global=20
to the MSG</FONT></DIV>
<DIV><FONT size=3D2>structure and "fetched" the message) but is there a =
simpler=20
way?</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>Also, my attempts at using getMousePos() results in =
the x,y=20
being different</FONT></DIV>
<DIV><FONT size=3D2>to the actual mouse position. I have a vague memory =
from the=20
Amiga </FONT></DIV>
<DIV><FONT size=3D2>regarding the difference between screen coords and =
logical=20
coords and functions</FONT></DIV>
<DIV><FONT size=3D2>to convert from one to the other. Is this the=20
problem?</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>Many thanks in advance.</FONT></DIV>
<DIV>&nbsp;</DIV>

------=_NextPart_000_0005_01BFF125.C47D6760--

new topic     » topic index » view message » categorize

2. Re: win32lib mouse question

On Wed, 19 Jul 2000 02:05:10 +0930, Mark Brown wrote:

>Hi all.
>
>I have a win32lib question that I know has been asked before.
>
>Following an "onMouse" event, is there a simple way to receive another
>mouse event (like a second mouse button click) from within the onMouse
>procedure?

Your onMouse routine gets passed 4 variables: event, x, y, and shift.  You
can do different actions for different events (MouseMove, LeftDown,
RightDown, LeftUp, etc. see win32lib.htm for more info) by using if-then
statements.

For Example (warning: untested code):

-- global variables
integer startX, startY, endX, endY

procedure onMouse_Win( integer event, integer x, integer y, integer shift )
  if event = LeftDown then
    -- starting point of line is (x,y)
    startX = x
    startY = y
  elsif event = LeftUp then
    -- ending point of line is new (x,y)
    endX = x
    endY = y
    -- since we actually draw the line here we really don't need
    --   endX nor endY, you could just pass x and y to drawLine...
    -- but you might want the end coordinates for another routine
    drawLine( Win, startX, startY, endX, endY )
  end if
end procedure
onMouse[Win] = routine_id( "onMouse_Win" )

-- end example 1

if you wanted to use separate mouse clicks you could modify like so (again,
this is an untested example):

-- global variables
integer startX, startY, endX, endY, first_click

first_click = True

procedure onMouse_Win( integer event, integer x, integer y, integer shift )
  if event = LeftDown then
    if first_click then
      -- starting point of line is (x,y)
      first_click = False
      startX = x
      startY = y
    else
      -- ending point of line is new (x,y)
      first_click = True
      endX = x
      endY = y
      drawLine( Win, startX, startY, endX, endY )
    end if
  end if
end procedure
onMouse[Win] = routine_id( "onMouse_Win" )

-- end example 2


>Also, my attempts at using getMousePos() results in the x,y being different
>to the actual mouse position. I have a vague memory from the Amiga
>regarding the difference between screen coords and logical coords and
>functions to convert from one to the other. Is this the problem?

getMousePos returns the screen coordinates for the mouse cursor (the
position on your desktop, not the window).  The x and y passed to your
onMouse routine are the coordinates relative to your window...

For a tested example, check out the 'Scribble.exw' demo included with
Win32Lib.  (Scribble is an example used to demonstrate David's IDE.)



-- Brian

new topic     » goto parent     » topic index » view message » categorize

3. Re: win32lib mouse question

------=_NextPart_000_000B_01BFF197.802928C0
        charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Many thanks Brian (and David).

I think I understand how I should be using these events now.
I busy looped my second mouse click. I guess that is a=20
no-no ! It looks so simple when someone does it for you.

Mark
  ----- Original Message -----=20
  From: Brian Broker=20
  To: EUPHORIA at LISTSERV.MUOHIO.EDU=20
  Sent: Thursday, July 20, 2000 11:17
  Subject: Re: win32lib mouse question


  On Wed, 19 Jul 2000 02:05:10 +0930, Mark Brown wrote:

  >Hi all.
  >
  >I have a win32lib question that I know has been asked before.
  >
  >Following an "onMouse" event, is there a simple way to receive =
another
  >mouse event (like a second mouse button click) from within the =
onMouse
  >procedure?

  Your onMouse routine gets passed 4 variables: event, x, y, and shift.  =
You
  can do different actions for different events (MouseMove, LeftDown,
  RightDown, LeftUp, etc. see win32lib.htm for more info) by using =
if-then
  statements.

  For Example (warning: untested code):

  -- global variables
  integer startX, startY, endX, endY

  procedure onMouse_Win( integer event, integer x, integer y, integer =
shift )
    if event =3D LeftDown then
      -- starting point of line is (x,y)
      startX =3D x
      startY =3D y
    elsif event =3D LeftUp then
      -- ending point of line is new (x,y)
      endX =3D x
      endY =3D y
      -- since we actually draw the line here we really don't need
      --   endX nor endY, you could just pass x and y to drawLine...
      -- but you might want the end coordinates for another routine
      drawLine( Win, startX, startY, endX, endY )
    end if
  end procedure
  onMouse[Win] =3D routine_id( "onMouse_Win" )

  -- end example 1

  if you wanted to use separate mouse clicks you could modify like so =
(again,
  this is an untested example):

  -- global variables
  integer startX, startY, endX, endY, first_click

  first_click =3D True

  procedure onMouse_Win( integer event, integer x, integer y, integer =
shift )
    if event =3D LeftDown then
      if first_click then
        -- starting point of line is (x,y)
        first_click =3D False
        startX =3D x
        startY =3D y
      else
        -- ending point of line is new (x,y)
        first_click =3D True
        endX =3D x
        endY =3D y
        drawLine( Win, startX, startY, endX, endY )
      end if
    end if
  end procedure
  onMouse[Win] =3D routine_id( "onMouse_Win" )

  -- end example 2


  >Also, my attempts at using getMousePos() results in the x,y being =
different
  >to the actual mouse position. I have a vague memory from the Amiga
  >regarding the difference between screen coords and logical coords and
  >functions to convert from one to the other. Is this the problem?

  getMousePos returns the screen coordinates for the mouse cursor (the
  position on your desktop, not the window).  The x and y passed to your
  onMouse routine are the coordinates relative to your window...

  For a tested example, check out the 'Scribble.exw' demo included with
  Win32Lib.  (Scribble is an example used to demonstrate David's IDE.)



  -- Brian

------=_NextPart_000_000B_01BFF197.802928C0
        charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META content=3D"MSHTML 5.00.2314.1000" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT size=3D2>Many thanks Brian (and David).</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>I think I understand how I should be using these =
events=20
now.</FONT></DIV>
<DIV><FONT size=3D2>I busy looped my second mouse click. I guess that is =
a=20
</FONT></DIV>
<DIV><FONT size=3D2>no-no ! It looks so simple when someone does it for=20
you.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>Mark</FONT></DIV>
<BLOCKQUOTE=20
style=3D"BORDER-LEFT: #000000 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: =
0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px">
  <DIV style=3D"FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV=20
  style=3D"BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: =
black"><B>From:</B>=20
  <A href=3D"mailto:bkb at CNW.COM" title=3Dbkb at CNW.COM>Brian Broker</A> =
</DIV>
  <DIV style=3D"FONT: 10pt arial"><B>To:</B> <A=20
  href=3D"mailto:EUPHORIA at LISTSERV.MUOHIO.EDU"=20
  title=3DEUPHORIA at LISTSERV.MUOHIO.EDU>EUPHORIA at LISTSERV.MUOHIO.EDU</A> =
</DIV>
  <DIV style=3D"FONT: 10pt arial"><B>Sent:</B> Thursday, July 20, 2000 =
11:17</DIV>
  <DIV style=3D"FONT: 10pt arial"><B>Subject:</B> Re: win32lib mouse=20
question</DIV>
  <DIV><BR></DIV>On Wed, 19 Jul 2000 02:05:10 +0930, Mark Brown=20
  wrote:<BR><BR>&gt;Hi all.<BR>&gt;<BR>&gt;I have a win32lib question =
that I=20
  know has been asked before.<BR>&gt;<BR>&gt;Following an "onMouse" =
event, is=20
  there a simple way to receive another<BR>&gt;mouse event (like a =
second mouse=20
  button click) from within the onMouse<BR>&gt;procedure?<BR><BR>Your =
onMouse=20
  routine gets passed 4 variables: event, x, y, and shift.&nbsp; =
You<BR>can do=20
  different actions for different events (MouseMove, =
LeftDown,<BR>RightDown,=20
  LeftUp, etc. see win32lib.htm for more info) by using=20
  if-then<BR>statements.<BR><BR>For Example (warning: untested =
code):<BR><BR>--=20
  global variables<BR>integer startX, startY, endX, =
endY<BR><BR>procedure=20
  onMouse_Win( integer event, integer x, integer y, integer shift =
)<BR>&nbsp; if=20
  event =3D LeftDown then<BR>&nbsp;&nbsp;&nbsp; -- starting point of =
line is=20
  (x,y)<BR>&nbsp;&nbsp;&nbsp; startX =3D x<BR>&nbsp;&nbsp;&nbsp; startY =
=3D=20
  y<BR>&nbsp; elsif event =3D LeftUp then<BR>&nbsp;&nbsp;&nbsp; -- =
ending point of=20
  line is new (x,y)<BR>&nbsp;&nbsp;&nbsp; endX =3D =
x<BR>&nbsp;&nbsp;&nbsp; endY =3D=20
  y<BR>&nbsp;&nbsp;&nbsp; -- since we actually draw the line here we =
really=20
  don't need<BR>&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp; endX nor endY, you =
could just=20
  pass x and y to drawLine...<BR>&nbsp;&nbsp;&nbsp; -- but you might =
want the=20
  end coordinates for another routine<BR>&nbsp;&nbsp;&nbsp; drawLine( =
Win,=20
  startX, startY, endX, endY )<BR>&nbsp; end if<BR>end =
procedure<BR>onMouse[Win]=20
  =3D routine_id( "onMouse_Win" )<BR><BR>-- end example 1<BR><BR>if you =
wanted to=20
  use separate mouse clicks you could modify like so (again,<BR>this is =
an=20
  untested example):<BR><BR>-- global variables<BR>integer startX, =
startY, endX,=20
  endY, first_click<BR><BR>first_click =3D True<BR><BR>procedure =
onMouse_Win(=20
  integer event, integer x, integer y, integer shift )<BR>&nbsp; if =
event =3D=20
  LeftDown then<BR>&nbsp;&nbsp;&nbsp; if first_click=20
  then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- starting point of line is=20
  (x,y)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; first_click =3D=20
  False<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startX =3D=20
  x<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startY =3D y<BR>&nbsp;&nbsp;&nbsp; =

  else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- ending point of line is new=20
  (x,y)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; first_click =3D=20
  True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endX =3D=20
  x<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endY =3D =
y<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
  drawLine( Win, startX, startY, endX, endY )<BR>&nbsp;&nbsp;&nbsp; end=20
  if<BR>&nbsp; end if<BR>end procedure<BR>onMouse[Win] =3D routine_id(=20
  "onMouse_Win" )<BR><BR>-- end example 2<BR><BR><BR>&gt;Also, my =
attempts at=20
  using getMousePos() results in the x,y being different<BR>&gt;to the =
actual=20
  mouse position. I have a vague memory from the Amiga<BR>&gt;regarding =
the=20
  difference between screen coords and logical coords =
and<BR>&gt;functions to=20
  convert from one to the other. Is this the problem?<BR><BR>getMousePos =
returns=20
  the screen coordinates for the mouse cursor (the<BR>position on your =
desktop,=20
  not the window).&nbsp; The x and y passed to your<BR>onMouse routine =
are the=20
  coordinates relative to your window...<BR><BR>For a tested example, =
check out=20
  the 'Scribble.exw' demo included with<BR>Win32Lib.&nbsp; (Scribble is =
an=20
  example used to demonstrate David's IDE.)<BR><BR><BR><BR>--=20

------=_NextPart_000_000B_01BFF197.802928C0--

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu