Creacion Menu segun ejemplo de Jose Quintas

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Creacion Menu segun ejemplo de Jose Quintas

Mensagem 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
*----------------------------------------------------------------
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Creacion Menu segun ejemplo de Jose Quintas

Mensagem 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.
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/
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Creacion Menu segun ejemplo de Jose Quintas

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Creacion Menu segun ejemplo de Jose Quintas

Mensagem 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
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/
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Creacion Menu segun ejemplo de Jose Quintas

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Creacion Menu segun ejemplo de Jose Quintas

Mensagem 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.
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/
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Creacion Menu segun ejemplo de Jose Quintas

Mensagem por Ruben Dario »

Saludos

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