Alguien sabe alguna forma fácil de hacer que el ratón no pueda salir de los límites de un diálogo. Supongo que deberá utilizarse SetCapture() pero no he conseguido implementar nada que funciona.
Gracias
Rafael
Capturar ratón sobre un diálogo
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Antonio:
¿Hay alguna función que permita mover el cursor a una posición determinada (he probado MouseTo() pero no me resuelve el problema)
Si fuera así, supongo que sería tan fácil como en bMMove hacer algo así:
y así para los cuatro lados del diálogo.
Otra solución quizás podría ser utilizar la funcion ClipCursor(aRect) del API de Windows, pero la verdad es que no sé como llamarla. Me puedes dar un ejemplo, por favor?
Rafael
[/code]
¿Hay alguna función que permita mover el cursor a una posición determinada (he probado MouseTo() pero no me resuelve el problema)
Si fuera así, supongo que sería tan fácil como en bMMove hacer algo así:
Code: Select all
IF r <= 0
MoverCursorA(0,c)
ENDIF
IF c <= 0
MoverCursorA(r,0)
ENDIF
Otra solución quizás podría ser utilizar la funcion ClipCursor(aRect) del API de Windows, pero la verdad es que no sé como llamarla. Me puedes dar un ejemplo, por favor?
Rafael
[/code]
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Rafael,
Sí existe la función
The ClipCursor function confines the cursor to a rectangular area on the screen. If a subsequent cursor position (set by the SetCursorPos function or the mouse) lies outside the rectangle, Windows automatically adjusts the position to keep the cursor inside the rectangular area.
BOOL ClipCursor(
CONST RECT *lpRect // pointer to structure with rectangle
);
Parameters
lprc
Points to the RECT structure that contains the screen coordinates of the upper-left and lower-right corners of the confining rectangle. If this parameter is NULL, the cursor is free to move anywhere on the screen.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks
The cursor is a shared resource. If an application confines the cursor, it must release the cursor by using ClipCursor before relinquishing control to another application.
Sí existe la función
The ClipCursor function confines the cursor to a rectangular area on the screen. If a subsequent cursor position (set by the SetCursorPos function or the mouse) lies outside the rectangle, Windows automatically adjusts the position to keep the cursor inside the rectangular area.
BOOL ClipCursor(
CONST RECT *lpRect // pointer to structure with rectangle
);
Parameters
lprc
Points to the RECT structure that contains the screen coordinates of the upper-left and lower-right corners of the confining rectangle. If this parameter is NULL, the cursor is free to move anywhere on the screen.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks
The cursor is a shared resource. If an application confines the cursor, it must release the cursor by using ClipCursor before relinquishing control to another application.
Olá Rafael,
Compile e teste este exemplo.
Saludos,
Rossine.
Compile e teste este exemplo.
Code: Select all
#include "fivewin.ch"
*************
function MAIN
*************
local oDlg
define dialog oDlg from 0, 0 to 400, 600 pixel
* Posiciona o cursor do mouse
@10, 10 button "Posicionar" of oDlg action setcursorpos( 200, 300 ) pixel
* Mostra o Mouse na Tela
@30, 10 button "Mostar" of oDlg action SHOW_MOUSE() pixel
* Esconde o Mouse nesta Dialog
@50, 10 button "Esconder" of oDlg action HIDE_MOUSE() pixel
* Confina o Mouse em uma certa posicao da tela
@70, 10 button "Confinar" of oDlg action clipcursor( 10, 10, 10, 10 ) pixel
* Confina o Mouse em uma certa posicao da tela
@90, 10 button "Sair Confinamento" of oDlg ;
action ( clipcursor( 0, 0, 800, 600 ), setcursorpos( 400, 300 ) ) pixel
activate dialog oDlg centered
return NIL
*******************
function HIDE_MOUSE
*******************
local ST_CUR
do while .T.
ST_CUR := ShowCursor( 0 )
if ST_CUR < 0 && Enquanto o Status do ponteiro nao for Menor que Zero
exit
endif
enddo
return NIL
*******************
function SHOW_MOUSE
*******************
local ST_CUR
do while .T.
ST_CUR := ShowCursor( 1 )
if ST_CUR >= 0 && Enquanto o Status do ponteiro for Maior ou igual a Zero
exit
endif
enddo
return NIL
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
HB_FUNC( CLIPCURSOR )
{
RECT rct;
rct.left = hb_parnl( 1 );
rct.top = hb_parnl( 2 );
rct.right = hb_parnl( 3 );
rct.bottom = hb_parnl( 4 );
hb_retl( ClipCursor( &rct ) );
}
#pragma ENDDUMP
Rossine.
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain