TGet bLostFocus yWHEN no entiendo bien la lógica[SOLUCIONADO

Re: TGet bLostFocus y WHEN no entiendo bien la lógica...

Postby VictorCasajuana » Mon Oct 24, 2022 5:20 pm

He revisado el código con los botones y si a los controles del botón le añades el bLostFocus, el resultado es el mismo.

código:
Code: Select all  Expand view  RUN
#include 'fivewin.ch'

static clogfile := 'log.txt'

Function Main()

    Local oDlg  := Nil
    Local oFld  := Nil
    Local oGet1a := Nil
    Local oGet1b := Nil
    Local oGet2a := Nil
    Local oGet2b := Nil
    Local oBt1, oBt2
    Local cVar1a := 'XXXXXXXXXX'
    Local cVar1b := 'XXXXXXXXXX'
    Local cVar2a := 'XXXXXXXXXX'
    Local cVar2b := 'XXXXXXXXXX'
   
    ferase( cLogFile )

    TGet():lClrFocus := .T.

    DEFINE DIALOG oDlg TITLE "Test bLostFocus in Folder" ;
        FROM 5, 5 TO 20, 49

    @ 0.5, 1 FOLDER oFld PROMPT "one", "Two" ;
        OF oDlg SIZE 160, 90
    @ 3,1 BUTTON oBt1 PROMPT "OK" OF oFld:aDialogs[1]              
                 oBt1:bLostFocus := {|| Write('FOLDER 1 BOTON 1')}

    @ 1, 1 GET oGet1a VAR cVar1a OF oFld:aDialogs[1] PICTURE '@S20' SIZE 40,10
               oGet1a:bLostFocus := {|| Write('FOLDER 1 GET 1')}

    @ 2, 1 GET oGet1b VAR cVar1b OF oFld:aDialogs[1] PICTURE '@S20' SIZE 40,10
               oGet1b:bLostFocus := {|| Write('FOLDER 1 GET 2')}
   
    @ 3,1 BUTTON oBt2 PROMPT "OK" OF oFld:aDialogs[2]  
                 oBt2:bLostFocus := {|| Write('FOLDER 1 BOTON 2')}

    @ 1, 1 GET oGet2a VAR cVar2a OF oFld:aDialogs[2] PICTURE '@S20' SIZE 40,10
               oGet2a:bLostFocus := {|| Write('FOLDER 2 GET 1')}

    @ 2, 1 GET oGet2b VAR cVar2b OF oFld:aDialogs[2] PICTURE '@S20' SIZE 40,10
               oGet2b:bLostFocus := {|| Write('FOLDER 2 GET 2')}
             

    ACTIVATE DIALOG oDlg CENTERED ON INIT oBt1:SetFocus()

Return ( Nil )

Static Function Write( cText )

    hb_MemoWrit( cLogFile, hb_MemoRead( cLogFile ) + hb_eol() + Time() + ' ' + cText)

Return ( Nil )
 


resultado del log:
Code: Select all  Expand view  RUN


19:18:26 FOLDER 1 BOTON 1
19:18:26 FOLDER 1 BOTON 1
19:18:26 FOLDER 1 BOTON 2
19:18:26 FOLDER 1 BOTON 2
19:18:31 FOLDER 1 BOTON 1
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: TGet bLostFocus y WHEN no entiendo bien la lógica...

Postby VictorCasajuana » Tue Oct 25, 2022 7:04 am

continuando con las pruebas, con TFolderEx el comportamiento es el mismo ( creo que es erróneo ) ya que ejecuta "algunos" bLostFocus cuando crea el diálogo. Bajo mi parecer, creo que primero crea los diálogos, en cada diálogo se asigna el foco en el primer control, luego crea el control del folder y "sale" de cada control de los diálogos ejecutando el bLostFocus correspondiente.

He realizado la prueba con un diálogo sin folders para salir de dudas y funciona correctamente:
Code: Select all  Expand view  RUN
#include 'fivewin.ch'

static clogfile := 'log.txt'

Function Main()

    Local oDlg  := Nil
    Local oGet1a := Nil
    Local oGet1b := Nil
    Local cVar1a := 'XXXXXXXXXX'
    Local cVar1b := 'XXXXXXXXXX'
   
    ferase( cLogFile )

    TGet():lClrFocus := .T.

    DEFINE DIALOG oDlg TITLE "Test bLostFocus in Folder" ;
        FROM 5, 5 TO 20, 49

    @ 1, 1 GET oGet1a VAR cVar1a OF oDlg PICTURE '@S20' SIZE 40,10
               oGet1a:bLostFocus := {|| Write('FOLDER 1 GET 1')}

    @ 2, 1 GET oGet1b VAR cVar1b OF oDlg PICTURE '@S20' SIZE 40,10
               oGet1b:bLostFocus := {|| Write('FOLDER 1 GET 2')}
   
    ACTIVATE DIALOG oDlg CENTERED

Return ( Nil )

Static Function Write( cText )

    hb_MemoWrit( cLogFile, hb_MemoRead( cLogFile ) + hb_eol() + Time() + ' ' + cText)

Return ( Nil )
 


En este caso, si no se pulsa nada, no aparece nada en el log.

Hay alguna forma ( sin tener que dar muchos rodeos ) de evitar que se ejecuten los blosfocus de los controles cuando se monta un diálogo con Folders?

Gracias y salud!
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: TGet bLostFocus y WHEN no entiendo bien la lógica...

Postby Antonio Linares » Tue Oct 25, 2022 7:09 am

Estimado Victor,

Has probado a asignar los bLostFocus desde la claúsula ON INIT del diálogo principal ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: TGet bLostFocus y WHEN no entiendo bien la lógica...

Postby VictorCasajuana » Tue Oct 25, 2022 7:38 am

Antonio Linares wrote:Estimado Victor,

Has probado a asignar los bLostFocus desde la claúsula ON INIT del diálogo principal ?


Hola Antonio.
He probado en el INIT y con bStart.

El resultado del INIT con este código:
Code: Select all  Expand view  RUN
#include 'fivewin.ch'

static clogfile := 'log.txt'

Function Main()

    Local oDlg  := Nil
    Local oFld  := Nil
    Local oGet:=Array(4)
    Local cVar1a := 'XXXXXXXXXX'
    Local cVar1b := 'XXXXXXXXXX'
    Local cVar2a := 'XXXXXXXXXX'
    Local cVar2b := 'XXXXXXXXXX'
   
    ferase( cLogFile )

    TGet():lClrFocus := .T.

    DEFINE DIALOG oDlg TITLE "Test bLostFocus in Folder" ;
        FROM 5, 5 TO 20, 49

    @ 0.5, 1 FOLDER oFld PROMPT "one", "Two" ;
        OF oDlg SIZE 160, 90

    @ 1, 1 GET oGet[1] VAR cVar1a OF oFld:aDialogs[1] PICTURE '@S20' SIZE 40,10

    @ 2, 1 GET oGet[2] VAR cVar1b OF oFld:aDialogs[1] PICTURE '@S20' SIZE 40,10
   
    @ 1, 1 GET oGet[3] VAR cVar2a OF oFld:aDialogs[2] PICTURE '@S20' SIZE 40,10

    @ 2, 1 GET oGet[4] VAR cVar2b OF oFld:aDialogs[2] PICTURE '@S20' SIZE 40,10

    ACTIVATE DIALOG oDlg CENTERED ON INIT Start(oGet)

Return ( Nil )

Static Function Start(oGet)

    oGet[1]:bLostFocus := {|| Write('FOLDER 1 GET 1')}
    oGet[2]:bLostFocus := {|| Write('FOLDER 1 GET 2')}
    oGet[3]:bLostFocus := {|| Write('FOLDER 2 GET 1')}
    oGet[4]:bLostFocus := {|| Write('FOLDER 2 GET 2')}

Return ( Nil )

Static Function Write( cText )

    hb_MemoWrit( cLogFile, hb_MemoRead( cLogFile ) + hb_eol() + Time() + ' ' + cText)

Return ( Nil )
 


es este:
Code: Select all  Expand view  RUN
09:29:55 FOLDER 2 GET 1


por lo que deduzco que después de montar el segundo diálogo del folder, se queda el foco en el primer get que se monta del diálogo 2 y cuando muestra la ventana se sitúa en el primer diálogo y entonces ejecuta el blostfocus

en cambio con el bStart el comportamiento es correcto. Con este código:
Code: Select all  Expand view  RUN
#include 'fivewin.ch'

static clogfile := 'log.txt'

Function Main()

    Local oDlg  := Nil
    Local oFld  := Nil
    Local oGet:=Array(4)
    Local cVar1a := 'XXXXXXXXXX'
    Local cVar1b := 'XXXXXXXXXX'
    Local cVar2a := 'XXXXXXXXXX'
    Local cVar2b := 'XXXXXXXXXX'
   
    ferase( cLogFile )

    TGet():lClrFocus := .T.

    DEFINE DIALOG oDlg TITLE "Test bLostFocus in Folder" ;
        FROM 5, 5 TO 20, 49

    @ 0.5, 1 FOLDER oFld PROMPT "one", "Two" ;
        OF oDlg SIZE 160, 90

    @ 1, 1 GET oGet[1] VAR cVar1a OF oFld:aDialogs[1] PICTURE '@S20' SIZE 40,10

    @ 2, 1 GET oGet[2] VAR cVar1b OF oFld:aDialogs[1] PICTURE '@S20' SIZE 40,10
   
    @ 1, 1 GET oGet[3] VAR cVar2a OF oFld:aDialogs[2] PICTURE '@S20' SIZE 40,10

    @ 2, 1 GET oGet[4] VAR cVar2b OF oFld:aDialogs[2] PICTURE '@S20' SIZE 40,10

    oDlg:bStart:={||Start(oGet)}

    ACTIVATE DIALOG oDlg CENTERED

Return ( Nil )

Static Function Start(oGet)

    oGet[1]:bLostFocus := {|| Write('FOLDER 1 GET 1')}
    oGet[2]:bLostFocus := {|| Write('FOLDER 1 GET 2')}
    oGet[3]:bLostFocus := {|| Write('FOLDER 2 GET 1')}
    oGet[4]:bLostFocus := {|| Write('FOLDER 2 GET 2')}

Return ( Nil )

Static Function Write( cText )

    hb_MemoWrit( cLogFile, hb_MemoRead( cLogFile ) + hb_eol() + Time() + ' ' + cText)

Return ( Nil )
 


no se ejecuta ningún blostfocus salvo que se salga por el usuario.

Pero es un poco engorroso configurarlo así, ya que separas la definición del get con la asignación del codelblock

Gracias por tu tiempo.
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: TGet bLostFocus y WHEN no entiendo bien la lógica...

Postby Antonio Linares » Tue Oct 25, 2022 9:41 am

Estimado Victor,

Es que las páginas del folder se van construyendo una a una y es normal que se evaluen los bLostFocus

En cambio desde bStart como muy bien has comprobado, el problema queda resuelto

Se que es engorroso pero no creo que haya otra solución
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: TGet bLostFocus y WHEN no entiendo bien la lógica...

Postby VictorCasajuana » Tue Oct 25, 2022 10:04 am

Antonio Linares wrote:Estimado Victor,

Es que las páginas del folder se van construyendo una a una y es normal que se evaluen los bLostFocus

En cambio desde bStart como muy bien has comprobado, el problema queda resuelto

Se que es engorroso pero no creo que haya otra solución


Gracias Antonio por tu respuesta, como dices no es lo más correcto pero al menos está detectado y vemos una forma limpia de solventarlo por si otro usuario llega por aquí.
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 43 guests