FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Perder foco en Dialogo
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM
Perder foco en Dialogo
Posted: Fri Nov 13, 2009 11:45 AM

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.

Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Perder foco en Dialogo
Posted: Fri Nov 13, 2009 12:55 PM
Hola,

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

Code (fw): Select all Collapse
oDlg:bLostFocus:={||TuFuncion()}


Saludos.

Rolando
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM
Re: Perder foco en Dialogo
Posted: Fri Nov 13, 2009 01:01 PM

No funciona el bLostFocus, ya que tiene el NOWAIT

¿Sabeis otra posible solución?

Gracias por contestar.

Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Perder foco en Dialogo
Posted: Fri Nov 13, 2009 07:44 PM

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

Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM
Re: Perder foco en Dialogo
Posted: Wed Nov 18, 2009 04:32 PM

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.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Perder foco en Dialogo
Posted: Wed Nov 18, 2009 08:27 PM
Juan,

Aqui tienes un ejemplo funcionando:
Code (fw): Select all Collapse
#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
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: Perder foco en Dialogo
Posted: Thu Nov 19, 2009 06:26 PM
Hola,

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

Code (fw): Select all Collapse
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

Continue the discussion