Page 1 of 1

MDICHILD y :Hide() -- Problema en FWH 25.06

Posted: Sat Aug 16, 2025 6:07 pm
by FiveWiDi
Buenas tardes Antonio,

He cambiado de la versión FWH 25.01 a la 25.06 y me encuentro con este problema (me afecta poco).

Defino una MDICHILD así:

Code: Select all | Expand

DEFINE WINDOW oWndTimer MDICHILD FROM 0,0 TO 1,1 TITLE ;
        " " COLORS J02CLRTEXTO,J02CLRWND OF ;
        AMPAarra[1][1][2][1][1] NOZOOM PIXEL 
Defino un Timer así:

Code: Select all | Expand

DEFINE TIMER oTimer1 OF oWndTimer INTERVAL 60000 ACTION hb_threadStart( { || ;
		                                                        ( oTimer1:Deactivate(), ;
									  WarningDemo( .T., .F. ), ;
									  oTimer1:Activate() ) } )
Activo la MDICHILD así:

Code: Select all | Expand

ACTIVATE WINDOW oWndTimer ;   //   MAXIMIZED ;   ON INIT oLBmnda:Set( AMPAarra[1][2][5][3] ) ;
                VALID ( If( AMPAarra[4][1], oTimer1:End(), Nil ), AMPAarra[4][1] ) ;
                ON INIT oWndTimer:Hide()
Pués resulta que el "ON INIT oWndTimer:Hide()" del ACTIVATE ha dejado de no funcionar.

Para resolverlo, lo he elimindado del "ON INIT" y lo he puesto después así (desvinculado del ACTIVATE):

Code: Select all | Expand

SysRefresh()    // Por si acaso.
oWndTimer:Hide()
Es un mal menor dependiendo de cuantos :Hide() de MDICHILD se tengan en la aplicación.

Ya dirás,

Re: MDICHILD y :Hide() -- Problema en FWH 25.06

Posted: Sat Aug 16, 2025 8:13 pm
by ertan
Hi Carlos,

You don't need call :Hide() method for TWindow() or TMDIFrame() or TMDiChild()
After window define, auto call oWnd:Hide() from TWindow() in :New() method
oWnd and aControls not showed until ACTIVATE WINDOW oWnd.

This changes build in FWH 25.04

Re: MDICHILD y :Hide() -- Problema en FWH 25.06

Posted: Sat Aug 16, 2025 8:29 pm
by ertan
Hi again,

We need to use this method( autohide ) for TDialog.

::bInit executed before oWnd:Activate and we need new variable ::bStart for executed after oWnd:Activate

in progress. Build in next FWH release.

Re: MDICHILD y :Hide() -- Problema en FWH 25.06

Posted: Sun Aug 17, 2025 7:16 am
by Antonio Linares
Estimado Carlos,

Este ejemplo creo que sirve para entender lo que comentas:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWnd, oWndChild

   DEFINE WINDOW oWnd MDI 

   DEFINE WINDOW oWndChild MDICHILD NOZOOM 

   // ACTIVATE WINDOW oWndChild ON INIT oWndChild:Hide()

   oWndChild:Hide()

   ACTIVATE WINDOW oWnd 

return nil
Vamos a revisar por que el ON INIT desde ACTIVATE de la ventana child no se ejecuta

Re: MDICHILD y :Hide() -- Problema en FWH 25.06

Posted: Sun Aug 17, 2025 7:25 am
by Antonio Linares
Si revisas Class TWindow Method Activate() verás que bInit se evalúa ANTES de que se muestre la ventana.

Se puede comprobar así:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWnd, oWndChild

   DEFINE WINDOW oWnd MDI 

   DEFINE WINDOW oWndChild MDICHILD NOZOOM 

   ACTIVATE WINDOW oWndChild ON INIT MsgInfo( IsWindowVisible( oWndChild:hWnd ) )
   
   ACTIVATE WINDOW oWnd 

return nil
Por lo que tiene sentido que el mensaje Hide() no funcione ya que la ventana aún no está visible.

Lo que no entiendo es por que te funcionaba antes...

Re: MDICHILD y :Hide() -- Problema en FWH 25.06

Posted: Sun Aug 17, 2025 10:25 am
by FiveWiDi
Antonio Linares wrote: Sun Aug 17, 2025 7:16 am Estimado Carlos,

Este ejemplo creo que sirve para entender lo que comentas:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWnd, oWndChild

   DEFINE WINDOW oWnd MDI 

   DEFINE WINDOW oWndChild MDICHILD NOZOOM 

   // ACTIVATE WINDOW oWndChild ON INIT oWndChild:Hide()

   oWndChild:Hide()

   ACTIVATE WINDOW oWnd 

return nil
Vamos a revisar por que el ON INIT desde ACTIVATE de la ventana child no se ejecuta
No exactamente.

El "ON INIT" se ejecuta (tengo otras acciones en el "ON INIT" que sí se realizan), pero el :Hide() no oculta la MDICHILD.

De momento lo tengo resuelto así:

Code: Select all | Expand

   DEFINE WINDOW oWnd MDI 

   DEFINE WINDOW oWndChild MDICHILD NOZOOM 

   //ACTIVATE WINDOW oWndChild ON INIT oWndChild:Hide()

   //oWndChild:Hide()

   ACTIVATE WINDOW oWnd 

   oWndChild:Hide()

Re: MDICHILD y :Hide() -- Problema en FWH 25.06

Posted: Mon Aug 18, 2025 9:47 am
by Antonio Linares

Re: MDICHILD y :Hide() -- Problema en FWH 25.06

Posted: Mon Aug 18, 2025 1:09 pm
by FiveWiDi
Antonio Linares wrote: Mon Aug 18, 2025 9:47 am viewtopic.php?p=281055#p281055
Gracias Antonio,

No abía caído en mirar el código de la Window.