FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ventanas y diálogos
Posts: 118
Joined: Fri Dec 20, 2013 10:39 AM
Ventanas y diálogos
Posted: Sun Feb 09, 2014 12:53 AM
Hola foro,
no tengo claro como hacer una cosa y llevo varios días probando.

Tengo mi programa con una ventana principal definida desde código de la siguiente forma:
Code (fw): Select all Collapse
         DEFINE WINDOW PRIN TITLE EMPRESAS[1]+"  "+alltrim(EMPRESAS[2])+" (Usuario "+USUARIO[1]+" "+alltrim(USUARIO[2])+")";
                MENU BUILDMENU(nLICENCIA) icon oIco  //COLOR "W+/RB"

         DEFINE BUTTONBAR oBar _3D SIZE 33, 33 OF PRIN
         if activ_menu(1,1)
            DEFINE BUTTON FILE "BMP\ICON32\ARTICULO32.bmp"  OF oBar ;
                ACTION articul() tooltip "Artículos" GROUP NOBORDER
         endif
......
         ACTIVATE WINDOW PRIN;
         ON RESIZE OBMPFndo:Center();
         MAXIMIZED;
         VALID FIN()



y luego cada vez que accedo desde ella con los botones o con el menú a otra parte del programa (clientes, ventas, ...) defino desde código cada una de esas partes de la siguiente forma:

Code (fw): Select all Collapse
         DEFINE DIALOG DAT_REM_V FROM 0, 0 TO 330, 500 OF PRIN TITLE "DATOS DE REMESA" PIXEL font ofontdlg
         @ 10, 10  SAY "Nombre acreedor" PIXEL SIZE 60,10
         @ 08, 75  GET oGet[1] VAR DAT[1] PIXEL SIZE 100,10;
                   COLOR CLR_AMARILLO,CLR_AZULETE
         oGet[1]:bLostFocus={||oGet[1]:SetColor(CLR_AMARILLO,CLR_AZULETE)}
         oGet[1]:bGotFocus={||oGet[1]:SetColor(CLR_AZULETE,CLR_AMARILLO)}
........
         ACTIVATE DIALOG DAT_REM_V CENTER


quisiera que este nuevo diálogo, por ejemplo este de datos de remesa, fuese un diálogo que se pudieses maximizar y que quedase "encajada" dentro de la ventana principal, como este ejmplo del editor de fuentes por ejemplo:

https://www.dropbox.com/s/t2295unvt1cb0sd/ejemplo.png

como veis, el documento abierto actualmente puede maximizarse y cerrarse.

Gracias. Un saludo.
Windows 10 + FWH 20.08 + BCC 7.4 + Harbour 3.2.0 + PSPad 5.0.3
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Ventanas y diálogos
Posted: Sun Feb 09, 2014 02:20 AM

Creo que lo que buscas con ventanas MDI, saludos... :shock:

IF oWnd == NIL

  DEFINE WINDOW oWnd ;
         TITLE "TU TITULO" ;
         BORDER SINGLE MDICHILD OF oWndPpal

  ACTIVATE WINDOW oWnd MAXIMIZED

ELSE
oWnd:Restore(); oWnd:SetFocus()

ENDIF

para maximizar un dialogo

ACTIVATE DIALOG oDlg ;
ON INIT oDlg:Maximize()

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 118
Joined: Fri Dec 20, 2013 10:39 AM
Re: Ventanas y diálogos
Posted: Sun Feb 09, 2014 08:59 PM
Hola. Ya había probado algo parecido antes , pero no consigo que me funcione. En este ejemplo que me mandas,si pongo que la ventana principal es oWndPpal y luego por ejemplo al entrar en "clientes" la ventana de clientes es oWnd, me sale este error:

Code (fw): Select all Collapse
Application
===========
   Path and name: C:\ges5.0\menu.exe (32 bits)
   Size: 4,414,464 bytes
   Compiler version: Harbour 3.2.0dev (r1307082134)
   FiveWin  Version: FWH 13.11
   Windows version: 6.1, Build 7601 Service Pack 1

   Time from start: 0 hours 0 mins 6 secs 
   Error occurred at: 09-02-2014, 21:53:28
   Error description: Error BASE/1004  Message not found: TWINDOW:OWNDCLIENT
   Args:
     [   1] = O   TWINDOW

Stack Calls
===========
   Called from:  => __ERRRT_SBASE( 0 )
   Called from: ../../../tobject.prg => TWINDOW:ERROR( 0 )
   Called from: ../../../tobject.prg => (b)HBOBJECT( 0 )
   Called from: ../../../tobject.prg => TWINDOW:MSGNOTFOUND( 0 )
   Called from: ../../../tobject.prg => TWINDOW:OWNDCLIENT( 0 )
   Called from: .\source\classes\MDICHILD.PRG => TMDICHILD:NEW( 150 )
   Called from: .\CLIENTES.PRG => CLIENTES( 45 )
   Called from: .\menu.PRG => (b)MAIN( 94 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 476 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 667 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1723 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 1470 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3236 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 1003 )
   Called from: .\menu.PRG => MAIN( 182 )


Debe ser que los botones que tengo en el diálogo y otros controles no son compatibles para estar en una ventana, sino que tienen que estar en un diálogo, por eso me he vuelto loco para poder hacer el cambio. ¿Alguna sugerencia? Gracias.
Windows 10 + FWH 20.08 + BCC 7.4 + Harbour 3.2.0 + PSPad 5.0.3
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Ventanas y diálogos
Posted: Sun Feb 09, 2014 09:56 PM

En tu prg de la ventana de clientes, mandale como parametro la wndppal o has wndppal una VAR publica en tu prg del MAIN, asi podras asignar las ventanas hijas( child) sin problema a la ventana principal, sino pon el prg donde defines clientes haber que tiene en la linea 45 o coloca esa linea...imagino debe ser donde difnes la ventana hija, saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 118
Joined: Fri Dec 20, 2013 10:39 AM
Re: Ventanas y diálogos
Posted: Sun Feb 09, 2014 10:56 PM
Hola. Efectivamente en la línea 45 tengo la definición de la ventana:
Code (fw): Select all Collapse
FUNCTION CLIENTES(prin)
         DEFINE WINDOW inicio_c ;
TITLE "TU TITULO" ;
BORDER SINGLE MDICHILD OF prin
.....
         ACTIVATE WINDOW inicio_c MAXIMIZED
         CLOSE ALL
RETURN NIL

Code (fw): Select all Collapse
#include "FiveWin.ch"

REQUEST HB_LANG_ESWIN // Para poner los PREVIEWS de listados y mensajes de error en español
REQUEST HB_CODEPAGE_ESWIN // Para poner los PREVIEWS de listados y mensajes de error en español

FUNCTION MAIN()
         local nLICENCIA
   
   HB_LANGSELECT( 'ESWIN' ) // Para poner los PREVIEWS de listados y mensajes de error en español
   HB_SETCODEPAGE( 'ESWIN' ) // Para poner los PREVIEWS de listados y mensajes de error en español
   
         SET EPOCH TO 1990
         SET DATE ITALIAN
         SET DELETED ON
         SET SCOREBOARD OFF
         SET CONFIRM ON
         SET WRAP ON
         SET CENTURY ON
         SETHANDLECOUNT(255)
         
         PUBLIC CLR_LETRAS:=14541662,CLR_FONDO:=0
         public prin
         DEFINE WINDOW PRIN TITLE EMPRESAS[1]+"  "+alltrim(EMPRESAS[2])+" (Usuario "+USUARIO[1]+" "+alltrim(USUARIO[2])+")";
                MENU BUILDMENU(nLICENCIA) icon oIco  //COLOR "W+/RB"
......
            DEFINE BUTTON FILE "BMP\ICON32\CLIENTES32.bmp"  OF oBar ;
                   ACTION CLIENTES(prin) tooltip "Clientes" NOBORDER
.......
         ACTIVATE WINDOW PRIN;
         ON RESIZE OBMPFndo:Center();
         MAXIMIZED;
         VALID FIN()
//         ON INIT USUARIO()
RETURN NIL

He probado a definir prin como public en el main y a pasarlo a la función de clientes como argumento pero sigue saliendo error:

Code (fw): Select all Collapse
Application
===========
   Path and name: C:\ges5.0\menu.exe (32 bits)
   Size: 4,414,464 bytes
   Compiler version: Harbour 3.2.0dev (r1307082134)
   FiveWin  Version: FWH 13.11
   Windows version: 6.1, Build 7601 Service Pack 1

   Time from start: 0 hours 0 mins 3 secs 
   Error occurred at: 09-02-2014, 23:53:58
   Error description: Error BASE/1004  No existe el método: OWNDCLIENT
   Args:
     [   1] = U   

Stack Calls
===========
   Called from:  => OWNDCLIENT( 0 )
   Called from: .\source\classes\MDICHILD.PRG => TMDICHILD:NEW( 150 )
   Called from: .\CLIENTES.PRG => CLIENTES( 45 )
   Called from: .\menu.PRG => (b)MAIN( 95 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 476 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 667 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1723 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 1470 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3236 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 1003 )
   Called from: .\menu.PRG => MAIN( 183 )


¡¿Hay que incluir algún .ch ? gracias.
Windows 10 + FWH 20.08 + BCC 7.4 + Harbour 3.2.0 + PSPad 5.0.3
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Ventanas y diálogos
Posted: Mon Feb 10, 2014 12:27 AM
Deberia funcionarte, el unico .ch que debes usar en todos tu PRG es #include "FiveWin.ch"
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Ventanas y diálogos
Posted: Mon Feb 10, 2014 12:48 AM

Eloy, la ventana principal tiene la definicion MDI?, para que el resto sean MDICHILD
Mirate los ejemplos testmdi*.prg de samples
Un saludo
Pd.: yo hace tiempo que evito no usar Public

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Ventanas y diálogos
Posted: Mon Feb 10, 2014 12:58 AM

En base a lo que dice el colega Navarro, deberias tener tu definicion de ventana prin asi...

DEFINE WINDOW PRIN TITLE EMPRESAS[1]+" "+alltrim(EMPRESAS[2])+" (Usuario "+USUARIO[1]+" "+alltrim(USUARIO[2])+")";
MENU BUILDMENU(nLICENCIA) icon oIco MDI //COLOR "W+/RB"

prueba y comenta, saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 118
Joined: Fri Dec 20, 2013 10:39 AM
Re: Ventanas y diálogos
Posted: Mon Feb 10, 2014 12:59 AM
OK, faltaba eso. Ahora ya genero las ventanas como quería, pero al tener todos los controles definidos desde código, ahora me sale todo en pequeñito:

https://www.dropbox.com/s/nml8it806cppq3a/ventanasmdi.jpg

pero bueno, ya puedo seguir pensando en cambiar a recursos o redefinir las coordenadas. El browse de "clientes" ahora sale vacío, investigaré porqué.

Gracias a todos. Un saludo.
Windows 10 + FWH 20.08 + BCC 7.4 + Harbour 3.2.0 + PSPad 5.0.3
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Ventanas y diálogos
Posted: Mon Feb 10, 2014 01:07 AM
informaticaeloy wrote:OK, faltaba eso. Ahora ya genero las ventanas como quería, pero al tener todos los controles definidos desde código, ahora me sale todo en pequeñito:

https://www.dropbox.com/s/nml8it806cppq3a/ventanasmdi.jpg

pero bueno, ya puedo seguir pensando en cambiar a recursos o redefinir las coordenadas. El browse de "clientes" ahora sale vacío, investigaré porqué.

Gracias a todos. Un saludo.


Creo lo mejor e usar recursos y luego los redefine, es mas comodo y hacer tu ID al usuario, yo en particular uso PELLES C, primero diseno, luego creo las tablas y por ultimo uno todo con codigo, estamos a la orden, en este foro siempre tendras respuestas para mejorar, saludos... :-)
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Ventanas y diálogos
Posted: Mon Feb 10, 2014 10:18 AM
Hace un tiempo estuve haciendo pruebas para rellenar automáticamente la ventana con el browse sin preocuparme por las coordenadas.
Hecha un vistazo al hilo : http://forums.fivetechsupport.com/viewtopic.php?f=6&t=20865&p=110807#p110807
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Ventanas y diálogos
Posted: Mon Feb 10, 2014 12:11 PM
informaticaeloy wrote:OK, faltaba eso. Ahora ya genero las ventanas como quería, pero al tener todos los controles definidos desde código, ahora me sale todo en pequeñito:

https://www.dropbox.com/s/nml8it806cppq3a/ventanasmdi.jpg

pero bueno, ya puedo seguir pensando en cambiar a recursos o redefinir las coordenadas. El browse de "clientes" ahora sale vacío, investigaré porqué.


Utiliza unas variables para que, en función de la resolucion que estés utilizando, te haga los controles/diálogos más o menos grandes

Algo asi como estas funciones, es una idea:

Code (fw): Select all Collapse
Function TipoMonitor()
local nAncho
      nAncho := GetSysMetrics( 0 )
      Do Case
      Case nAncho <= 1400   // 1366
           nTipoMonitor := 0
      Case nAncho > 1400 .and. nAncho < 1700   // 1600
           nTipoMonitor := 1
      Case nAncho >= 1700   //1920
           nTipoMonitor := 2
      EndCase
Return nTipoMonitor

Function CalculaRes( nTp )  // nTp -> 0 Ancho   nTp -> 1 Alto
local nAncho
local nAlto
local nPorcAnc
local nPorcAlt
DEFAULT nTp   := 0
      nAncho  := GetSysMetrics( 0 )      //ScreenWidth()  //GetSysmetrics( 4 )
      nAlto   := GetSysMetrics( 1 )       //ScreenHeight() //GetSysmetrics( 3 )
      if Empty( nTp )
         nPorcAnc := Round( ( nAncho/1366 ) , 4 )
      else
         nPorcAlt := Round( ( nAlto/768 ) , 4 )
      endif
     //    1920    1058      1920            1080               17                  17            22
     // ? nAncho, nAlto , GetSysmetrics(0), GetSysmetrics(1), GetSysmetrics(2),GetSysmetrics(3),GetSysmetrics(4)

Return IF( Empty( nTp ), nPorcAnc, nPorcAlt )
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces

Continue the discussion