PDA

Ver la Versión Completa : Delimitar área de trabajo del ratón


Casimiro Notevi
19-10-2005, 14:26:54
Hola, no sé exactamente en qué foro poner esta consulta, de momento la dejo aquí.

Con Delphi, necesito delimitar el campo de acción del ratón a un área determinada de la pantalla.

Sé hacerlo en lenguaje C, en ensamblador y en pascal, pero no encuentro la forma de hacerlo desde Delphi, siempre salta un error de "violación de memoria" al llamar a la interrupción 33 y no tengo idea por qué ocurre.

¿Alguna sugerencia?

Saludos.

epuigdef
19-10-2005, 15:20:37
Lo que quieres es que el cursor no salga de un cuadrado? Entonces codifica el onmousemove del form y ponle algo tal que así:



var p : TPoint;



if Mouse.CursorPos.X < 100 then
begin
p.X := 100;
p.Y := Mouse.CursorPos.Y;
Mouse.CursorPos := p;
end;

if Mouse.CursorPos.X > 400 then
begin
p.X := 400;
p.Y := Mouse.CursorPos.Y;
Mouse.CursorPos := p;
end;

// y lo mismo con la Y.


Un saludo

Edu

Casimiro Notevi
19-10-2005, 15:25:13
Sí, gracias, epuigdef, lo tengo hecho así, es que quería hacerlo con el ensamblador en línea de delphi, tal y como lo hago en otros programas en lenguaje C y no sé por qué no funciona.

Pero, sí, lo dejaré así, igual a como tú has indicado.

Gracias, de nuevo.

Saludos.

roman
19-10-2005, 16:27:59
¿No te sirve usar la función ClipRect? Por ejemplo, para confinar el cursor a un rectángulo dentro de tu formulario:



var
R: TRect;

begin
R := BoundsRect;
InflateRect(R, -20, -20);
ClipCursor(@R);
end;


Para liberarlo pones:



ClipRect(nil);


// Saludos

Casimiro Notevi
19-10-2005, 20:25:22
Roman, he probado con el código que has escrito y no hace nada, ¿puede que sea porque ejecuto windows "virtualmente" en linux con vmware?

Lo que quiero conseguir, exactamente, es que no pueda salir el cursor del ratón de un rectángulo que yo le asigne, por ejemplo, uno que esté centrado en la pantalla y tenga 300 pixels de ancho y 100 pixels de alto. El resto de la pantalla no debe poder ser accesible por el ratón, como si no existiera.

Saludos

roman
19-10-2005, 20:32:38
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.



Esto es lo que dice la ayuda y es el resultado que obtuve en la prueba que hice previa a mi mensaje anterior.

Así que muy posiblemente sí se deba al vmware.

// Saludos

Casimiro Notevi
19-10-2005, 21:10:39
Gracias por la aclaración, la probaré mañana en el trabajo que tengo un pc con win-xp "verdadero" :)

Casimiro Notevi
20-10-2005, 09:33:12
Funciona perfectamente, muchas gracias a todos.