Perder foco en Dialogo

Post Reply
softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Perder foco en Dialogo

Post by softruz »

Muy buenas, ¿alguien me podría decir como puedo saber cuando dejo de pasar el raton por encima de un DIALOG NOWAIT, es decir, cuando se sale del dialogo?

uN sALUDO.
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Perder foco en Dialogo

Post by rolando »

Hola,

Si no entendí mal, creo que lo que necesitas es:

Code: Select all | Expand

oDlg:bLostFocus:={||TuFuncion()}


Saludos.

Rolando
softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Perder foco en Dialogo

Post by softruz »

No funciona el bLostFocus, ya que tiene el NOWAIT

¿Sabeis otra posible solución?

Gracias por contestar.
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Perder foco en Dialogo

Post by rolando »

Hola,

En realidad no entiendo bién lo que quieres hacer. Tengo un sistema hecho con todos dialogos nowait.

Por ejemplo, cuando desde la dialog a paso, mediante un botón, al dialog b, siempre le envío como dato el oDlg actual cosa de poder "manipularlo" en el otro dialog (dentro de una función, por supuesto). De este modo puedo hacer que al salir del dialog b, el dialog a sea quién tome el foco ó pasarle el foco a otro dialog, etc..

Quizás si explicaras mejor lo que pretendes, podría ayudarte.

Saludos

Rolando :D
softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Perder foco en Dialogo

Post by softruz »

Muy buenas lo que quiero hacer es crear un dialogo del tipo de outlook cuando vienen mensajes nuevos que aparezca semi-transparente y cuando pase el ratón por lo alto se pongo sin transparencia y cuando quite el ratón de lo alto se vuelva semi-transparente.

Un Saludo.
User avatar
Antonio Linares
Site Admin
Posts: 42520
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 75 times
Contact:

Re: Perder foco en Dialogo

Post by Antonio Linares »

Juan,

Aqui tienes un ejemplo funcionando:

Code: Select all | Expand

#include "FiveWin.ch"

#define TME_LEAVE        2
#define WM_MOUSELEAVE  675

function Main()

   local oWnd

   DEFINE WINDOW oWnd

   ACTIVATE WINDOW oWnd ;
      ON INIT DialogNoModal()

return nil

function DialogNoModal()

   local oDlg := TMyDialog():New()

   oDlg:bMMoved = { || TrackMouseEvent( oDlg:hWnd, TME_LEAVE ) }

   ACTIVATE DIALOG oDlg NOWAIT CENTER

return nil

CLASS TMyDialog FROM TDialog

   METHOD HandleEvent( nMsg, nWParam, nLParam )
   
   METHOD MouseLeave( nRow, nCol, nFlags )    
   
ENDCLASS

METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TMyDialog

   if nMsg == WM_MOUSELEAVE
      return ::MouseLeave( nHiWord( nLParam ), nLoWord( nLParam ), nWParam )
   endif
   
return Super:HandleEvent( nMsg, nWParam, nLParam )

METHOD MouseLeave( nRow, nCol, nFlags ) CLASS TMyDialog

   MsgBeep()
   
return nil        
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
antolin
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Perder foco en Dialogo

Post by antolin »

Hola,

Otra forma quisá sería comprobar que cuando cualquiera de los controles pierda el foco los demás controles tampoco tienen foco:

Code: Select all | Expand

DEFINE DIALOG oDlg ...
   REDEFINE ...
   REDEFINE ...
   ...
   AEVAL( oDlg:aControls, { |oCtrl| oCtrl:bLostFocus := VerFoco(oDlg) } )
   ...
ACTIVATE DIALOG oDlg NOWAIT ...

Function VerFoco(oDlg)
   LOCAL nFoco := ASCAN( oDlg:aControls , { | oCtrl | oCtrl:lFocused } )
   IF nFoco = 0
       MSGALERT("NINGUN CONTROL TIENE FOCO")   // AQUI SABES QUE HAS SALIDO DEL DIALOGO
   ENDIF
RETURN NIL
...

Claro que para que esto funcione alguno de los controles del dialogo tiene que haber tomado el foco. Lo que hace, es que cuando ese control pierde el foco comprueba que ningún otro tiene foco.

Espero que te sirva
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
Post Reply