Menu não aparece

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Menu não aparece

Mensagem por JoséQuintas »

fwmenu.png
No dlgauto deu certinho, aqui não.

Código: Selecionar todos

/*
ze_fwMenu
*/

#include "fivewin.ch"
#include "frm_Class.ch"

FUNCTION ze_FWMenu( aList )

   LOCAL oDlg, oMenu

   DEFINE DIALOG oDlg FROM 0, 0 TO AppHeight(), AppWidth() PIXEL ;
      TITLE "JPA " + AppVersaoEXE() ICON "AppIcon"
   oDlg:bInit := { || BuildFWMenu( @oMenu, aList, .T., @oDlg ) }
   ACTIVATE DIALOG oDlg CENTER

   RETURN NIL

FUNCTION BuildFWMenu( oMenu, aList, lBegin, oDlg )

   LOCAL oElement, cbCode, xFrmNameTxt, xFrmName, oFont

   IF lBegin
      DEFINE FONT oFont NAME APP_FONTNAME SIZE 0, -APP_FONTSIZE_NORMAL WEIGHT 300
      MENU oMenu OF oDlg FONT oFont
   ENDIF

   FOR EACH oElement IN aList
      IF Len( oElement[ 2 ] ) == 0
         xFrmName := oElement[ 3 ]
         IF ValType( xFrmName ) == "C"
            xFrmNameTxt := AppEmpresaApelido() + " (" + AppUserName() + ") (" + xFrmName + ") " + Upper( oElement[ 1 ] )
            cbCode     := [{ || RunModule( "] + xFrmName + [", "] + xFrmNameTxt + [" ) }]
            MENUITEM oElement[ 1 ] ACTION ( ( oMenuItem ), &( cbCode ) )
         ELSE
            MENUITEM oElement[ 1 ] ACTION ( ( oMenuItem ), oElement[ 3 ] )
         ENDIF
      ELSE
         MENUITEM oElement[1]
         MENU
         BuildFWMenu( @oMenu, oElement[ 2 ], .F., @oDlg )
         ENDMENU
      ENDIF
   NEXT

   IF lBegin
      oDlg:SetMenu( oMenu )
   ENDIF

   RETURN NIL
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Menu não aparece

Mensagem por JoséQuintas »

Resolvido.
Não formatei no dlgauto direito, que foi o que usei como ponto de partida.
Faltou o ENDMENU principal.

Código: Selecionar todos

IF  lBegin
   ENDMENU
   oDlg:SetMenu( oMenu )
ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Menu não aparece

Mensagem por JoséQuintas »

Depois eram as execuções que não apareciam.

Mais outra situação onde o próprio fivewin causa limitação, ao usar comandos traduzidos por CH dele mesmo.

Alterei aqui:

Código: Selecionar todos

            bCode := &(bCode)
            FWMenuItem( oElement[1], bCode )
Criei aqui

Código: Selecionar todos

STATIC FUNCTION FWMenuItem( cText, bCode )

   MenuItem cText ACTION ( ( oMenuItem ), Eval( bCode ) )

   RETURN Nil
Até procurei pra usar função ou classe, mas é tanto parâmetro, que só complicaria.
Pensando bem, simplificar mais.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Menu não aparece

Mensagem por JoséQuintas »

Já que tem função separada, fonte mais legível assim.
E o principal, fivewin faz direito.
Também eliminei a necessidade do Eval().

Código: Selecionar todos

         IF ValType( xFrmName ) == "C"
            FWMenuItem( oElement[ 1 ], xFrmName )
         ELSE
...
STATIC FUNCTION FWMenuItem( cCaption, cName )

   LOCAL cText

   cText := AppEmpresaApelido() + " (" + AppUserName() + ") (" + ;
      cName + ") " + Upper( cCaption )

   MenuItem cCaption ACTION ( ( oMenuItem ), RunModule( cName, cText ) )

   RETURN Nil
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder