Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Saber si el cursor esta fuera del form

Hola a todos por aqui....

Hace mucho que queria saber como hacer esto.....y aun no he encontrado una solucion....

Si alguien sabe como obtener esto pues se los agradeceria, ya que si lo he requerido algunas veces y pues lo he resuelto de formas que no me quedan bien...

Sin otra cosa que decir....

Gracias por su atención...
Responder Con Cita
  #2  
Antiguo 21-04-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Podría ser algo así:

Código Delphi [-]
if PtInRect(Self.BoundsRect, Mouse.CursorPos) then
  Edit1.Text := 'Dentro'
else
  Edit1.Text := 'Fuera';

// Saludos
Responder Con Cita
  #3  
Antiguo 21-04-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
Quizá te sirva este código un poco modificado a lo que necesites hacer en tu programa:

Código Delphi [-]
procedure TForm1.FormDeactivate(Sender: TObject) ;
begin
   ReleaseCapture;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  If GetCapture = 0 then
    SetCapture(Form1.Handle) ;
  If PtInRect(Rect(Form1.Left,Form1.Top,Form1.Left + Form1.Width,Form1.Top + Form1.Height),
    ClientToScreen(Point(x, y))) then
    Begin
      { Cosas a hacer si el puntero del mouse está dentro del formulario } 
    end
  else
     Begin
       { Cosas a hacer si el puntero del mouse está fuera del formulario }
     end;
end;

Fuente: http://delphi.about.com/cs/adptips20...ltip0800_5.htm

Última edición por ioco fecha: 21-04-2010 a las 19:35:02.
Responder Con Cita
  #4  
Antiguo 21-04-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Cita:
Empezado por roman Ver Mensaje

Código Delphi [-]
if PtInRect(Self.BoundsRect, Mouse.CursorPos) then...

bueno...primeramente gracias por sus respuestas...pero Roman...podrias decirme que hace la funcion PtInRect para devolver true?, y la propiedad boundsRect que indica de la forma(si es que es propiedad)?....
Responder Con Cita
  #5  
Antiguo 21-04-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
PtInRect indica si un punto está dentro de un rectángulo. En este caso, el punto es la posición del curosr del ratón y el rectángulo es el área que abarca el formulario, que es BoundsRect.

// Saludos
Responder Con Cita
  #6  
Antiguo 21-04-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Ahora si...

OK

Gracias...

PD. Y aparte de un hilo o timer en donde se puede poner este if-else??
Responder Con Cita
  #7  
Antiguo 22-04-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Bueno...otra forma de hacerlo es capturar los mensajes CM_MOUSEENTER y CM_MOUSELEAVE del formulario y utilizar el Procedimiento asociado del formulario(WindowProc).
Mas o menos asi:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
  ...
  ...
 private
    { Private declarations }
    AuxWndProc: TWndMethod;//Es un auxiliar para ejecutar los demas mensajes
  procedure MyWndProc(var Message: TMessage);{Procedimiento que captura 
todos los mensajes de la Ventana o formulario}
 ...
 ...
end;
La imprementación sería:
Código Delphi [-]
procedure TForm1.MyWndProc(var Message: TMessage);
begin
   case Message.Msg of
    CM_MOUSEENTER:ShowMessage('Entro el raton en el formulario');
    CM_MOUSELEAVE:ShowMessage('Salió el raton del formulario') ;
   else AuxWndProc(Message);//Hago que se ejecute los demas mensajes
  end;
end;
Por supuesto que tenemos que poner lo siguiente en el evento OnCreate del formulario:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
AuxWndProc:=Form1.WindowProc;
Form1.WindowProc:=MyWndProc;
end;
Claro está que se puede capturar directamente los mensaje CM_MOUSEENTER y CM_MOUSELEAVE sin utilizar el procedimiento asociado a la ventana o formulario, pero lo malo que le veo al hacerlo así es que no solamante se captura los mensajes que van al formualrio sino tambien los mensajes que van tambien a los controles que se encuentran en el formulario..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 22-04-2010 a las 01:23:40.
Responder Con Cita
  #8  
Antiguo 22-04-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Poder: 0
adeszeus Va por buen camino
Se que no es gran ayuda este codigo pero espero y te funcione :
Código Delphi [-]
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if (X<>0) and (y<>0) then
Edit1.Text := 'Dentro'
else
Edit1.Text := 'Fuera';
end;
Responder Con Cita
  #9  
Antiguo 22-04-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Poder: 0
adeszeus Va por buen camino
me acabo de dar cuenta que me falta cuando sale hacia la derecha e izquierda asi que solo implemente este codigo

Código Delphi [-]
if (x>(form1.Width-18)) or (y>(form1.Height-42)) then
//Edit1.Text := 'Fuera'
else if (X<>0) and (y<>0) then
Edit1.Text := 'Dentro'
else
Edit1.Text := 'Fuera';

donde los valores de 18 y 42 corresponden a los bordes y a la cabecera del formulario
Responder Con Cita
  #10  
Antiguo 22-04-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Cita:
Empezado por rgstuamigo Ver Mensaje
Bueno...otra forma de hacerlo es capturar los mensajes CM_MOUSEENTER y CM_MOUSELEAVE del formulario y utilizar el Procedimiento asociado del formulario(WindowProc).
...
Gracias por tu solucion.....
Pero este metodo como que tarda un poco en cambiar de estado al capturar los mensajes...
Responder Con Cita
  #11  
Antiguo 22-04-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Cita:
Empezado por adeszeus Ver Mensaje
Se que no es gran ayuda este codigo pero espero y te funcione :

Código Delphi [-]procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (X<>0) and (y<>0) then
Edit1.Text := 'Dentro'
else
Edit1.Text := 'Fuera';
end;

HOLA.. algo parecido hacia yo asi para obtener este resultado....pero cuando pasas muy rapido el cursor hacia afuera no cambia de estado...por eso yo quise saber como obtener una solucion más optima....

GRACIAS A TODOS POR SU TIEMPO Y CONOCIMIENTOS....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Saber si un form está activo si la aplicación se encuentra en segundo plano pjmedina Varios 2 09-01-2008 16:01:02
posicion del cursor dentro de un listview Avellas OOP 16 19-11-2007 17:16:10
saber en que form esta el foco gulder Varios 1 02-05-2007 02:08:03
¿Cómo saber si un Form está creado? nesetru Varios 5 09-02-2004 13:59:37
Saber índice de la línea en la que está el cursor en un Memo fortran OOP 2 06-08-2003 18:12:10


La franja horaria es GMT +2. Ahora son las 22:28:49.


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
Copyright 1996-2007 Club Delphi