Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda Delphi!! (https://www.clubdelphi.com/foros/showthread.php?t=83632)

Caroso 09-07-2013 18:24:12

Ayuda Delphi!!
 
Hola muchachos soy nuevo en el FORO!!, lo eh observado con frecuencia y me ah sido de mucha utilidad... en esta oportunidad me dispongo a preguntar si alguien me podría ayudar...
El tema es el siguiente:

1) Necesitaría saber como hacer para que, al llevar el cursor (mouse) fuera de mi aplicación, fuera de mi form, la misma se cierre... eh estado probando con el evento OnMouseLeave, pero al colocar un botón en el mismo e intentar posicionarme sobre él, el formulario llama al evento OnMouseLeave y lo cierra.

Desde ya muchas gracias!! PD:\ eh estado leyendo muchos hilos en este foro... pero ninguno se ajusta a mis necesidades.

Casimiro Noteví 09-07-2013 18:35:28

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Y no olvides poner títulos descriptivos a tus preguntas, gracias ;)

oscarac 09-07-2013 18:35:52

coloca tu codigo a ver q tienes

Casimiro Noteví 09-07-2013 18:50:02

Y recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Caroso 09-07-2013 18:51:56

Este es mi codigo...
 
Cita:

Empezado por oscarac (Mensaje 463511)
coloca tu codigo a ver q tienes

Hola oscarac gracias por tu pronta respuesta... te muestro lo que tengo hasta ahora... este codigo lo obtube de este mismo foro...

esto lo ubique en el evento OnDesactivate del formulario...
Código Delphi [-]
procedure TForm1.FormDeactivate(Sender: TObject);
begin
  ReleaseCapture;
end;

y esto otro en el evento OnMouseLeave...

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

el codigo anda... pero al sacar el mouse del formulario muy rapidamente el mismo permanece abierto... :(

Muchas Gracias

ecfisa 09-07-2013 18:56:43

Hola Caroso.

Código Delphi [-]
...
type
  TMainForm = class(TForm)
    ...
  private
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
  end;

...

implementation

procedure TMainForm.CMMouseLeave(var Msg: TMessage);
begin
  Close;
end;
...

Saludos. :)

Edito: Disculpas, no leí lo del boton... :o

oscarac 09-07-2013 18:59:06

Creo que el problema esta en el

Form1.Close

no deberia ser

frmLateralDerecho.Close

Caroso 09-07-2013 19:10:11

Respuesta a ecfisa
 
Cita:

Empezado por ecfisa (Mensaje 463516)
Hola Caroso.

Código Delphi [-]
...
type
  TMainForm = class(TForm)
    ...
  private
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
  end;

...

implementation

procedure TMainForm.CMMouseLeave(var Msg: TMessage);
begin
  Close;
end;
...

Saludos. :)

Edito: Disculpas, no leí lo del boton... :o

jeje no hay problema ecfisa! jeje a cualquiera le puede pasar... este codigo lo eh probado anteriormente... y realmente funciona pero al intentar posicionarme sobre un elemento dentro de el form se cierra...

Desde ya muchas gracias por tu tiempo :)

ecfisa 09-07-2013 19:10:30

Hola.

Como edité en el mensaje anterior, se me pasó tu comentario sobre el TButton, así que rectifico el código anterior:
Código Delphi [-]
...
type
  TMainForm = class(TForm)
    ...
  private
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
  end;

...

implementation

procedure TMainForm.CMMouseLeave(var Msg: TMessage);
begin
  if FindVCLWindow(Mouse.CursorPos) = nil then
    Close;
end;
...

Saludos. :)

Caroso 09-07-2013 19:12:30

Cita:

Empezado por oscarac (Mensaje 463517)
Creo que el problema esta en el

Form1.Close

no deberia ser

frmLateralDerecho.Close

mil disculpas oscarac! tienes razon... lo corrigire... pero aun continuo con el problema de al intentar posicionarme sobre un elemento dentro del form este se cierra :(

Caroso 09-07-2013 19:22:57

gracias por tomarte el tiempo para responder ecfisa!!

Pero con la reforma del código el form cuesta cerrar... me explico mejor... al incorporar la reforma, debo intentar varias veces salir hasta que toma el evento y cierra el form... :(

Nuevamente muchas gracias por tu tiempo

ecfisa 09-07-2013 19:29:07

Hola.

Que extraño, en la prueba funciona de modo correcto. Es más, para salir de toda duda lo incorporé al form principal de un sistema (MDI) con varias ventanas abiertas y también cierra ni bién el cursor deja el form principal. Uso Delphi 7, tal vez se comporte diferente en otra versión...

Saludos. :)

Caroso 09-07-2013 19:31:26

Cita:

Empezado por ecfisa (Mensaje 463527)
Hola.

Que extraño, en la prueba funciona de modo correcto. Es más, para salir de toda duda lo incorporé al form principal de un sistema (MDI) con varias ventanas abiertas y también cierra ni bién el cursor deja el form principal. Uso Delphi 7, tal vez se comporte diferente en otra versión...

Saludos. :)

ahhh puede ser por eso... ahora lo pruebo en Delphi 7... yo lo estaba trabajando en Delphi 2010... pruebo y te comento ecfisa :)

Saludos

ecfisa 09-07-2013 19:35:01

Hola Caroso.

Ya que estoy te adjunto los fuentes de la prueba para que puedas controlar sobre ella.

Saludos. :)

Caroso 09-07-2013 19:51:44

gracias por el codigo fuente caroso... por ahi tengo un problema de configuracion de la pc... pero si te sirve eh grabado un video el cual muestra el proyecto que tu me enviaste... en el mismo posiciono el mouse sobre los controles dentro del form y anda esplendido... pero al intentar salir no se cierra automaticamente... el interesado me envia un mensaje privado pues no puedo colocar link... desde ya gracias a todos por su colaboracion :)

Caroso 09-07-2013 20:36:01

Nuevamente yo amigos del Foro... eh encontrado la solucion a mi problema... esta en este enlace... :)

Cita:

delphi.about.com/cs/adptips2000/a/bltip0800_5.htm
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
     Form1.Caption := 'Mouse is over form' else
     Form1.Caption := 'Mouse is outside of form';
end;


Muchisimas gracias a todos los que colaboraron conmigo... es de suma importancia para mi poder agradecer su tiempo y dedicacion... :)

Atte: Caroso...

PD:\ TEMA CERRADO :)

ecfisa 10-07-2013 17:40:26

Hola.

Me alegra que lo hayas solucionado :)

A modo de comentario, ese código se puede reducir:
Código Delphi [-]
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  If GetCapture = 0 then
    SetCapture(Handle) ;
  if not PtInRect(BoundsRect, Mouse.CursorPos) then
    Close;
end;

Saludos. :)


La franja horaria es GMT +2. Ahora son las 04:51:23.

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