Página 1 de 1

Creacion Menu segun ejemplo de Jose Quintas

Enviado: 07 Jul 2020 21:53
por Ruben Dario
Saludos al Forum

De acuerdo a este codigo funciona bien, como hago para maximizar o sea full pantalla y no tener que estirar la ventana.
Segun codigo

Código: Selecionar todos


FUNCTION MainMenu12( lWindows )  
   LOCAL mOpc    := 1
   LOCAL mTecla
   LOCAL mCont, mLenTot, mDife, mEspEntre, mEspFora, mColIni, aMouseMenu, mMenuOpt
   HarbourInit()
   mMenuOpt := MenuCria() 
   HB_GtReload( hb_GTInfo( HB_GTI_VERSION ) )
   HB_GtInfo( HB_GTI_ICONRES, "AppIcon" )
   HB_GtInfo( HB_GTI_WINTITLE, "Samples" )  
   CLS
   IF lWindows
#ifdef GTWVG
      MenuWvg( mMenuOpt )
      RETURN NIL
#endif
   ENDIF
   // Center options
   mLenTot := 0
   FOR mCont = 1 TO Len( mMenuOpt )
      mLenTot += Len( mMenuOpt[ mCont, 1 ] )
   NEXT
   mDife     := Max( MaxCol() + 1 - mLenTot, 0 )
   IF mDife < (Len( mMenuOpt ) + 1 )
      IF mDife >= ( Len( mMenuOpt ) - 1 )
         mEspEntre := 1
      ELSE
         mEspEntre := 0
      ENDIF
      mEspFora  := 0
   ELSE
      mEspEntre := int( mDife / ( Len( mMenuOpt ) + 1 ) )
      mEspFora  := int( ( mDife - ( mEspEntre * ( Len( mMenuOpt ) + 1 ) ) ) / 2 ) + mEspEntre
   ENDIF
   mColIni   := { mEspFora }
   FOR mCont = 2 TO Len( mMenuOpt )
      AAdd( mColIni, mColIni[ mCont - 1 ] + Len( mMenuOpt[ mCont - 1, 1 ] ) + mEspEntre )
   NEXT

   *---------- Faz o menu ----------*

   aMouseMenu := {}
   FOR mCont = 1 TO Len( mMenuOpt )
      AAdd( aMouseMenu, { 1, mColIni[ mCont ], mColIni[ mCont ] - 1 + Len( mMenuOpt[ mCont, 1 ] ), 48 + mCont + Iif( mCont > 10, 1, 0 ), 0 } )
   NEXT
   Mensagem( "Selecione e tecle <ENTER>, <ESC> Sai" )
   DO WHILE .T.
      SetColor( SetColorNormal() )
      Scroll( 1, 0, 1, MaxCol(), 0 )
      FOR mCont = 1 TO Len( mMenuOpt )
         @ 1, mColIni[ mCont ] SAY mMenuOpt[ mCont, 1 ] COLOR iif( mCont == mOpc, SetColorFocus(), SetColorNormal() )
      NEXT
      BoxMenu( 3, mColIni[ mOpc ] - 20 + Int( Len( mMenuOpt[ mOpc, 1 ] ) / 2 ), mMenuOpt[ mOpc, 2 ], 1,, .T., .T., aMouseMenu, 1 )
      mTecla := Inkey(0)
      DO CASE
      CASE mTecla == K_ESC // ESC
         EXIT
      CASE mTecla == 4 // seta direita
         mOpc := iif( mOpc == Len( mMenuOpt ), 1, mOpc + 1 )
      CASE mTecla == 19 // seta esquerda
         mOpc := iif( mOpc == 1, Len( mMenuOpt ), mOpc - 1 )
      CASE mTecla > 48 .AND. mTecla < 49 + Len( mMenuOpt ) + iif( Len( mMenuOpt ) > 10, 1, 0 )
         mOpc   := Abs( mTecla ) - 48
         mOpc   := Iif( mOpc > 10, mOpc - 1, mOpc )
      ENDCASE
   ENDDO
   Mensagem()
   RETURN NIL
*----------------------------------------------------------------

Creacion Menu segun ejemplo de Jose Quintas

Enviado: 08 Jul 2020 10:00
por JoséQuintas
Eu prefiro deixar por conta do usuário: do jeito que ele ajustar é como fica
Uso uma chamada pra esta rotina no início e no final do aplicativo.
Ajuste o nome "JPA Tecnologia" para sua preferência, assim como a fonte "Lucida Console".

Código: Selecionar todos

#include "hbgtinfo.ch"

FUNCTION GtSetupFont( lSave )

   STATIC sFontSize := 0, sFontWidth := 0, sFontWeight := 0
   LOCAL  nFontSize, nFontWidth, nFontWeight, cRootKey

   hb_Default( @lSave, .F. )

   cRootKey := "HKCU\Software\JPA Tecnologia\"

   IF lSave
      nFontSize   := hb_gtInfo( HB_GTI_FONTSIZE )
      nFontWidth  := hb_gtInfo( HB_GTI_FONTWIDTH )
      nFontWeight := hb_gtInfo( HB_GTI_FONTWEIGHT )
      IF nFontSize != sFontSize .OR. nFontWidth != sFontWidth .OR. nFontWeight != sFontWeight
         sFontSize   := nFontSize
         sFontWidth  := nFontWidth
         sFontWeight := nFontweight
         Win_RegWrite( cRootKey + "FontSize",   LTrim( Str( sFontSize ) ) )
         Win_RegWrite( cRootKey + "FontWidth",  LTrim( Str( sFontWidth ) ) )
         Win_RegWrite( cRootKey + "FontWeight", LTrim( Str( sFontWeight ) ) )
      ENDIF
   ELSE
      //AddExtraFonts()
      hb_GtInfo( HB_GTI_FONTNAME, "Lucida Console" )
      IF Win_RegRead( cRootKey + "FontSize" ) != NIL
         sFontSize   := Val( Win_RegRead( cRootKey + "FontSize" ) )
         sFontWidth  := Val( Win_RegRead( cRootKey + "FontWidth" ) )
         sFontWeight := Val( Win_RegRead( cRootKey + "FontWeight" ) )
         IF sFontSize > 0 .AND. sFontWidth > 0 .AND. sFontWeight > 0
            hb_gtInfo( HB_GTI_FONTSIZE,   sFontSize )
            hb_gtInfo( HB_GTI_FONTWIDTH,  sFontWidth )
            hb_gtInfo( HB_GTI_FONTWEIGHT, sFontWeight )
         ENDIF
      ENDIF
   ENDIF

   RETURN NIL
Mas no fórum, muitos maximizam, então eles podem dizer o que usam. wvt_Maximize() talvez, ou hb_gtInfo() - verifique hbgtinfo.ch sobre a constante de maximizar.

Creacion Menu segun ejemplo de Jose Quintas

Enviado: 08 Jul 2020 21:45
por Ruben Dario
Gracias Jose.

Que hace cRootKey := "HKCU\Software\JPA Tecnologia\" que contiene
donde se colocaria GtSetupFont( lSave )

FUNCTION BuildMenu( oMenu, acMenu )
LOCAL nCont, oSubMenu
MEMVAR m_Prog
GtSetupFont( lSave )
lSave? Es numerico o caracter
..
..

Gracias y Saludos

Creacion Menu segun ejemplo de Jose Quintas

Enviado: 09 Jul 2020 09:09
por JoséQuintas
Ruben Dario escreveu:Que hace cRootKey := "HKCU\Software\JPA Tecnologia\" que contiene
É a chave do Windows pra software, cada máquina vai ter sua configuração no registro do Windows.
JPA Tecnologia é o nome da minha empresa.
Ruben Dario escreveu:donde se colocaria GtSetupFont( lSave )

Código: Selecionar todos

PROCEDURE Main

   SetMode( 40, 100 )
   CLS
   gtSetFont()
...
gtSetupFont(.t.)
RETURN

Creacion Menu segun ejemplo de Jose Quintas

Enviado: 19 Jul 2020 11:17
por Ruben Dario
Saludos
Para Jose Quintas.

Con el codigo de menu de tu ejemplo ya lo implemente.
solamente hay un problema. cuando coloco una cortina o imagen como fondo, el SaveScreen() y RestScreen no funcionan. para este caso. Pinta cuando navego con el menu pero si me devuelvo al submenu anterior es el problema
creo que el problema esta en wSave()

Código: Selecionar todos

FUNCTION WSave()
   Aadd( AppSaveScreen, SaveScreen() )
   RETURN NIL

FUNCTION WRestore()
   IF Len( AppSaveScreen ) > 0
      RestScreen( ,,,,ATail( AppSaveScreen ) )
      aSize( AppSaveScreen, Len( AppSaveScreen ) - 1 )
   ENDIF
   RETURN NIL

FUNCTION WOpen( nUp, nLeft, nRight, nDown, cTitle )
   wSave()
   @ nUp, nLeft TO nRight, nDown
   @ nUp+1, nLeft+1 CLEAR TO nRight-1, nDown-1
   @ nUp, nLeft + 1 SAY Pad( cTitle, nRight - nLeft - 1 )
   RETURN NIL



https://www.4shared.com/photo/U9KMTMNsiq/pantax.html

Creacion Menu segun ejemplo de Jose Quintas

Enviado: 19 Jul 2020 17:12
por JoséQuintas
Já falei sobre isso:
Usando GT, a imagem de fundo é o texto.
Se volta o texto, a imagem de fundo fica só com o texto.

Talvez seja possível criar rotina pra restaurar somente a parte de texto útil, mas acho que vai ser muito trabalho, pra pouca coisa.
E talvez fique lento, porque vai ser ser texto apagando imagem, e imagem apagando texto, o tempo todo.

Creacion Menu segun ejemplo de Jose Quintas

Enviado: 20 Jul 2020 23:11
por Ruben Dario
Saludos

Es posible desarrollar una función para desvanecido de colores.