Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Cursor.Clip (limitar cursor en pantalla) (https://www.clubdelphi.com/foros/showthread.php?t=75951)

gluglu 29-09-2011 19:39:41

Cursor.Clip (limitar cursor en pantalla)
 
Hola !

Estoy investigando cómo podría limitar la posición del cursor en pantalla, desde el propio Delphi.

He encontrado la clase Cursor del propio Windows y su propiedad Clip, pero no sé cómo aplicarla desde el propio Delphi.

Lo que quiero es limitar que el cursor de windows, al mover el ratón, no pueda subir por encima de una determinada posición en un momento dado.

Gracias por vuestra ayuda !

ecfisa 29-09-2011 20:10:14

Hola gluglu.

Fijar area pantalla:
Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
var
  R: TRect;
begin
  R.Left:= Left;
  R.Top:= Top;
  R.Right:= Left + Width;
  R.Bottom:= Top + Height;
  ClipCursor(@R);
end;

Restaurar:
Código Delphi [-]
procedure TForm1.RestaurarClick(Sender: TObject);
begin
  ClipCursor(nil);
end;

Si queres excluir la barra de título en el area definida, tendrías que considerar el alto.
Lo podés obtener:
Código Delphi [-]
  GetSystemMetrics(SM_CYMENU) + 8;

Un saludo.

gluglu 29-09-2011 21:06:28

Gracias !

No supe buscar por ClipCursor, sino estuve buscando en el foro y en internet información como Cursor.Clip.

;)

ecfisa 29-09-2011 22:16:45

Hola gluglu.

Para limitar el movimiento del mouse al area cliente del form:
Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
var
  R: TRect;
begin
  R.Left:= Left + GetSystemMetrics(SM_CXSIZEFRAME);
  R.Top:= Top + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CXFRAME);
  R.Right:= Left + Width - GetSystemMetrics(SM_CXSIZEFRAME);
  R.Bottom:= Top + Height - GetSystemMetrics(SM_CXSIZEFRAME) ;
  ClipCursor(@R);
end;
(Así no dejo los deberes a medio hacer ;) )


Saludos. :)

gluglu 29-09-2011 23:02:14

Gracias de nuevo !

Me sirvió mucho tu ayuda. Era justo lo que buscaba.

No intentaba limitar el movimiento del cursor al Form sino a una determinada franja de la pantalla.

Resulta que trabajo con el StringGrid de TMS, y al querer hacer una operación de selección con el ratón pulsado, si muevo el ratón por encima de la prímera línea del StringGrid o por debajo de la última, me ejecuta automáticamente un scroll vertical (hacia arriba o abajo) que necesitaba evitar e ignorar.

Pues no he encontrado la manera de limitar ese scroll vertical del StringGrid de otra manera que delimitando el área concreto en el que el cursor se puede mover. De esta manera he impedido que suba o baje fuera de los límites de la primera y última línea, y así evitar el scroll automático.

Gracias una vez más ! ;)

escafandra 29-09-2011 23:17:36

Cita:

Empezado por ecfisa (Mensaje 414046)
...Para limitar el movimiento del mouse al area cliente del form: ....

¿Que tal de esta forma?
Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
var
  R: TRect;
begin
  R:= GetClientRect;
  MapWindowPoints(Handle, 0, R, 2);
  ClipCursor(@R);
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 03:28:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi