FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Dialogos dentro de una ventana
Posts: 230
Joined: Sat Apr 19, 2008 10:28 PM
Re: Dialogos dentro de una ventana
Posted: Mon Dec 22, 2025 01:57 PM

Buenas tardes,

He actualizado recientemente a FWH2512 64 bits desde FWH2310 64 bits y funciona todo perfectamente salvo esto,

ACTIVATE DIALOG oDlg AS MDICHILD

Antes se podía crear una mdichild a partir de un dialog en .rc, como decía Mr. Rao más arriba en este hilo. Pero parece que ya no. ¿es así?

Un saludo
Alvaro

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Dialogos dentro de una ventana
Posted: Tue Dec 23, 2025 06:16 AM

Estimado Alvaro,

Acabo de probar el ejemplo samples\ui\dialogs\mdidlg.prg (ojo que mdidlg.rc está en una carpeta equivocada y hay que moverlo a la misma de mdidlg.prg) y ha funcionado correctamente en 32 y 64 bits.

Por favor pruébalo, gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 230
Joined: Sat Apr 19, 2008 10:28 PM
Re: Dialogos dentro de una ventana
Posted: Wed Dec 24, 2025 09:22 AM

Buenos días Antonio,

Efectivamente el ejemplo que mencionas funciona. Ya he encontrado lo que pasaba. Como sabes estoy modificando las clases para que el programa funcione bien con "DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2" y no se vea borroso en monitores 4k donde se ha activado el escalado de windows. En la clase mdichild.prg:

METHOD New( nTop, nLeft, nBottom, nRight, cTitle, nStyle, oMenu, oWnd,;
      oIcon, lVScroll, nClrFore, nClrBack, oCursor, oBrush,;
      lPixel, lHScroll, nHelpId, cBorder, lSysMenu, lCaption,;
      lMin, lMax, nMenuInfo, lUnicode ) CLASS TMdiChild

   local lMaximize   := .f.

   DEFAULT oWnd     := GetWndFrame(),;
      cTitle   := "MDI Child " + AllTrim( Str( Len( oWnd:oWndClient:aWnd ) + 1 ) ),;
      lVScroll := .f., lHScroll := .f.,;
      nClrFore := oWnd:oWndClient:nClrText,;
      nClrBack := oWnd:oWndClient:nClrPane,;
      nStyle   := 0,;
      cBorder  := "SINGLE", lSysMenu := .t., lCaption := .t.,;
      lMin     := .t., lMax := .t., lPixel := .f., ;
      lUnicode := FW_SetUnicode()

   ?nTop, nLeft, nBottom, nRight // DpiAwareness AQ ------

Cuando la ventana se crea por código llegan unos valores en pixeles reales para nTop, nLeft, nBottom y nRight, que yo trato para escalarlos. Sin embargo cuando la ventana se crea a partir de un diálogo con "ACTIVATE DIALOG oDlg AS MDICHILD", los valores que llegan de nTop y nLeft son muy altos, 2147483648, que lógicamente se salen de la pantalla, por lo que la ventana no se muestra.

Ya lo he corregido y funciona. Muchas gracias.

Alvaro

Continue the discussion