Mostrar informação no rodapé do form

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Mostrar informação no rodapé do form

Mensagem por porter »

Olá JoseQuintas, obrigado por responder,
Encontrei os comandos no DEMOWVG, mas não estou conseguindo entender, em qual momento usá-los,
tentei antes de abrir um cadastro com o pGT := SetGT( 1, hb_gtSelect() ) e SetGT( 1, pGT ) ao fechar e
também antes de criar uma tela e fechar, tentei também antes de criar o StatusBar e depois de criado o StatusBar, mas não está dando certo,
o StatusBar continua sumindo sempre que expando a tela.

Rotinas que encontrei no DEMOWVG

Código: Selecionar todos

pGT := SetGT( 1, hb_gtSelect() )  <--- Em que momento usar
SetGT( 1, pGT )                           <--- Em que momento usar

FUNCTION SetGT( nIndex, pGT )
    LOCAL oldGT
    STATIC s_pGT_ := { NIL, NIL, NIL }
    oldGT := s_pGT_[ nIndex ]
    IF PCount() == 2
       s_pGT_[ nIndex ] := pGT
    ENDIF
    RETURN oldGT
Tentei fazer assim:

Código: Selecionar todos

FUNCTION ExpandirTela(linhas,colunas)
        pGT := SetGT( 1, hb_gtSelect() )
        Hb_gtReload( "WVG" )   // CRIA UMA NOVA JANELA
  	SETMODE(linhas, colunas)
  	SETCOLOR("W/B, N/W,,,W+/G+B")
  	screenWidth := HB_GTINFO( HB_GTI_DESKTOPWIDTH  )
  	screenHeight:= HB_GTINFO( HB_GTI_DESKTOPHEIGHT )
  	wvt_SetFont( "courier new"   , Round(( screenHeight / MaxRow() ),0)-4, Round(( screenWidth / MaxCol() ),0), 0 )
  	WVT_MAXIMIZE()
  	HB_GtInfo( HB_GTI_RESIZABLE, .F. )
        HB_GtInfo( HB_GTI_WINTITLE, "Usu rio: " + nomeusuario)  // APARECE Nome do usuario no topo da tela		
	SetGT( 1, pGT )
  	RETURN
e assim também

Código: Selecionar todos

FUNCTION StatusBar
LOCAL oStatusBar, oPanel, pGT
pGT := SetGT( 1, hb_gtSelect() )
oStatusBar := wvgStatusBar():New( wvgSetAppWindow() ):Create( , , , , , .T. )
oPanel := oStatusBar:GetItem(1)
oPanel:Caption := "[F2] HP  [F3] NF  [F5] MP-4200"
oPanel1 := oStatusBar:addItem()
oPanel1:caption := wpa_cx + " " + NetName() + " 26D03"
oPanel2 := oStatusBar:addItem()
oPanel2:caption := "Data: "+DTOC(Date())
SetGT( 1, pGT )
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

Mostrar informação no rodapé do form

Mensagem por JoséQuintas »

porter escreveu:o StatusBar continua sumindo sempre que expando a tela.
Novamente:
Não está expandindo, está criando nova janela.
A Status não está sumindo, está na outra janela.


Precisa decidir:
se quer criar nova janela, wvgCrt() é pra isso.
Se quer expandir a janela, não tem que usar hb_gtReload()

Qualquer outra coisa vai precisar criar rotinas especiais, usando hb_gtSelect() e outras coisas 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

Mostrar informação no rodapé do form

Mensagem por JoséQuintas »

Vixe....
Fiz testes aqui, alterar tamanho de janela da GTWVG parece ser impossível, a janela fica doidinha.

Parece que meu modo de uso é somente meu, e deu certo pra mim.
Qualquer outro modo é fazer testes, pra ver se funciona, e pra ver se vale a pena.

Código: Selecionar todos

#include "hbgtinfo.ch"
#include "inkey.ch"

FUNCTION Main()

   LOCAL nOpc := 0, oStatusbar

   SetMode( 25, 80 )
   CLS
   oStatusbar := Statusbar()
   DO WHILE .T.
      wvgSetAppWindow():InvalidateRect()
      wvgSetAppWindow():Refresh()
      CLS
      @ 5, 0
      @ Row() + 1, 10 PROMPT "1 - Mostra Statusbar"
      @ Row() + 1, 10 PROMPT "2 - Esconde Statusbar"
      @ Row() + 1, 10 PROMPT "3 - Janela 40 x 100"
      @ Row() + 1, 10 PROMPT "4 - Janela 25 x 80"
      @ Row() + 1, 10 PROMPT "5 - Maximizar"
      @ Row() + 1, 10 PROMPT "6 - Sair"
      MENU TO nOpc

      DO CASE
      CASE nOpc == 6 .OR. LastKey() == K_ESC ; EXIT
      CASE nOpc == 1 ; oStatusbar:Show()
      CASE nOpc == 2 ; oStatusbar:Hide()
      CASE nOpc == 3 ; SetMode( 40, 100 ) //; oStatusbar:Show()
      CASE nOpc == 4 ; SetMode( 25, 80 ) // ; oStatusbar:Show()
      CASE nOpc == 5 ; Maximizar()
      ENDCASE
   ENDDO

   RETURN NIL

FUNCTION StatusBar

   LOCAL oStatusBar, oPanel, oPanel1, oPanel2

   oStatusBar := wvgStatusBar():New( wvgSetAppWindow() ):Create( , , , , , .T. )
   oPanel := oStatusBar:GetItem(1)
   oPanel:Caption := "[F2] HP [F3] NF [F5] MP-4200"
   oPanel1 := oStatusBar:addItem()
   oPanel1:caption := "Teste 26D03"
   oPanel2 := oStatusBar:addItem()
   oPanel2:caption := "Data: " + DTOC( Date() )

   RETURN oStatusbar

FUNCTION Maximizar()

   LOCAL nWidth, nHeight

   nWidth  := HB_GTINFO( HB_GTI_DESKTOPWIDTH )
   nHeight := HB_GTINFO( HB_GTI_DESKTOPHEIGHT )
   wvt_SetFont( "courier new" , Round( ( nHeight / MaxRow() ),0)-4, Round(( nWidth / MaxCol() ),0), 0 )
   WVT_MAXIMIZE()
   HB_GtInfo( HB_GTI_RESIZABLE, .F. )
   hb_gtInfo( HB_GTI_WINTITLE, "Teste" )

  RETURN NIL
Nota: Ao redimensionar janela, a barra de status continua na posição anterior, o que é ruim.
wvg.png
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

Mostrar informação no rodapé do form

Mensagem por JoséQuintas »

Parece brincadeira mas... não sei usar GTWVG do jeito normal.
Só fazendo testes mesmo.

Note que parece que a statusbar sumiu, mas na verdade é outra janela.
Peça a opção 2 algumas vezes e depois mova as janelas.
Como é criada uma encima da outra, parece uma só.
E a Main() é diferente, acaba sumindo.

Código: Selecionar todos

#include "hbgtinfo.ch"
#include "inkey.ch"

FUNCTION Main()

   LOCAL nOpc := 0

   SetMode( 25, 80 )
   CLS
   Statusbar()
   DO WHILE .T.
      CLS
      @ 5, 0
      @ Row() + 1, 10 PROMPT "Abre janela 2"
      @ Row() + 1, 10 PROMPT "Sair"
      MENU TO nOpc

      DO CASE
      CASE nOpc == 2 .OR. LastKey() == K_ESC ; EXIT
      CASE nOpc == 1 ; NovaJanela()
      ENDCASE
   ENDDO

   RETURN NIL

FUNCTION StatusBar

   LOCAL oStatusBar, oPanel, oPanel1, oPanel2

   oStatusBar := wvgStatusBar():New()
   oStatusbar:Create( , , , , , .T. )
   oPanel := oStatusBar:GetItem(1)
   oPanel:Caption := "[F2] HP [F3] NF [F5] MP-4200"
   oPanel1 := oStatusBar:addItem()
   oPanel1:caption := "Teste 26D03"
   oPanel2 := oStatusBar:addItem()
   oPanel2:caption := "Data: " + DTOC( Date() )

   RETURN oStatusbar

FUNCTION NovaJanela()

   LOCAL oCrt

   oCrt := wvgCrt():New()
   oCrt:Create( , , { 1, 1 }, { 25, 80 } )
   @ 2, 0 SAY "teste"
   Inkey(0)

   RETURN NIL
wvg.png
Infelizmente é ir fazendo testes e tentando descobrir.
Aqui sempre usei com multithread e janela Main() escondida.
Definitivamente, inventei meu jeito de usar GTWVG, e não percebi que é diferente da GTWVG normal.
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

Mostrar informação no rodapé do form

Mensagem por JoséQuintas »

Uma forma resumida do jeito que eu uso, mas precisa compilar usando multithread -mt
Lembrando que multithread tem necessidades especiais, aqui é só um exemplo básico.
Execute e brinque com cada janela aberta.

Código: Selecionar todos

#include "hbgtinfo.ch"
#include "inkey.ch"

FUNCTION Main()

   hb_ThreadStart( { || tela1() } )
   hb_ThreadStart( { || tela2() } )
   hb_ThreadStart( { || tela3() } )
   hb_ThreadWaitForAll()

   RETURN NIL

FUNCTION Tela1()

   LOCAL mTela1 := Space(10), GetList := {}

   hb_gtReload( "WVG" )
   SetMode( 35, 85 )
   CLS
   @ 1, 0 SAY "Tela1" GET mTela1
   READ

   RETURN NIL

FUNCTION Tela2()

   LOCAL mTela2 := Space(10), GetList := {}

   hb_gtReload( "WVG" )
   SetMode( 30, 80 )
   CLS
   @ 1, 0 SAY "Tela2" GET mTela2
   READ

   RETURN NIL
wvg.png
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

Mostrar informação no rodapé do form

Mensagem por JoséQuintas »

Veja se ajuda:

A Statusbar() dependeria de uma janela DIALOG pra ser atualizada, não serve a janela comum da GTWVG, teria que usar como GUI.
Mas temos o pushbutton, não é quase a mesma coisa?
button.png

Código: Selecionar todos

#include "hbgtinfo.ch"
#include "inkey.ch"

FUNCTION Main()

   hb_ThreadStart( { || tela1() } )
   hb_ThreadStart( { || tela2() } )
   hb_ThreadStart( { || tela3() } )
   hb_ThreadWaitForAll()

   RETURN NIL

FUNCTION Tela1()

   LOCAL mTela1 := Space(10), GetList := {}

   hb_gtReload( "WVG" )
   SetMode( 35, 85 )
   CLS
   Statusbar2()
   @ 1, 0 SAY "Tela1" GET mTela1
   READ

   RETURN NIL

FUNCTION Tela2()

   LOCAL mTela2 := Space(10), GetList := {}

   hb_gtReload( "WVG" )
   SetMode( 30, 80 )
   CLS
   Statusbar2()
   @ 1, 0 SAY "Tela2" GET mTela2
   READ

   RETURN NIL

FUNCTION Tela3()

   LOCAL mTela3 := Space(10), GetList := {}

   hb_gtReload( "WVG" )
   SetMode( 25, 75 )
   CLS
   Statusbar2()
   @ 1, 0 SAY "Tela3" GET mTela3
   READ

   RETURN NIL

STATIC FUNCTION Statusbar2()

   LOCAL oThisButton

   oThisButton := wvgPushbutton():New()
   oThisButton:Caption := "Teste usando button"
   oThisButton:Create( ,, { -MaxRow(), 0 }, { -1, -MaxCol() } )

   RETURN NIL
Importante:
Teria que usar o oThisButton:PointerFocus := .F.
Isso é pra não tirar o foco da janela normal.
E eu usei MaxCol(), deveria ser MaxCol() + 1.
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/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Mostrar informação no rodapé do form

Mensagem por porter »

Olá JoséQuintas,
Dessa forma está dando certo, agora ficou fácil de entender com o exemplo que você fez,
mas irei fazer alguns testes dessa última forma também, obrigado.

oStatusbar:Show()
oStatusbar:Hide()
Responder