"Começando" com GUI

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

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

"Começando" com GUI

Mensagem por JoséQuintas »

Anos atrás, antes de você começar com GTWVG fiz o seguinte comentário: dá uma geral primeiro nos fontes, melhore os fontes, melhore o conhecimento antes de complicar mais.
Tá fazendo falta isso.

Código: Selecionar todos

#include "inkey.ch"

PROCEDURE Main

   LOCAL codigo := 1, descricao := SPace(25), complemento := Space(25)
   LOCAL CST := 0, ncm := 0, cfop := 0, GetList := {}, nCont

   SETMODE(33,80)
   CLS
   FOR nCont = 0 TO 33
      @ nCont, 0 SAY Replicate("W", 80)
   NEXT
   SAVE SCREEN
   SetColor( "W/B,B/W,,,W/B")
   @ 8, 10 CLEAR TO 17, 50
   @ 8, 10 TO 17, 50 COLOR "G+/B"
   @ 9, 11 SAY Padc( "UMA JANELA", 39) COLOR "W/B"
   @ 10, 11 TO 10, 49 COLOR "G+/B"
   @ 11,11 SAY "Codigo:" GET codigo PICTURE "99999" VALID OkCodigo( @Codigo )
   @ 12,11 SAY "Descricao:" GET descricao PICTURE "@!"
   @ 13,11 SAY "Compl:" GET complemento PICTURE "@!"
   @ 14,11 SAY "CST:" GET cst PICTURE "9999999999" VALID OkCst( @Cst )
   @ 15,11 SAY "NCM:" GET ncm PICTURE "99999999"
   @ 16,11 SAY "CFOP:" GET cfop PICTURE "9999"
   READ
   RESTORE SCREEN
   RETURN

PROCEDURE HB_GTSYS

   REQUEST HB_GT_WVG_DEFAULT

   RETURN

FUNCTION OkCodigo( mCodigo )

   LOCAL oCrt, GetList := {}, oGT

   IF mCodigo != 0
      RETURN .T.
   ENDIF
   oGT := hb_gtSelect()
   oCrt := wvgCrt():New(,,{ 2, 2 }, { 20, 20 }, .T. )
   oCrt:Create()
   @ 2, 1 GET mCodigo
   READ
   oCrt:Destroy()
   hb_gtSelect( oGt )

   RETURN .F.

FUNCTION OkCst( mCst )

   RETURN mCst == mCst
Tá aí o wvgCrt.
Variável por referência, igual faria com console, igual pode fazer com HMG, igual pode fazer com HWGUI.
Esse é um conhecimento básico do Clipper, obrigatório nos dias atuais.
Continua deixando isso de lado, e tá fazendo falta.

hb_gtSelect() é o tal conjunto de tela/teclado/mouse a ser movido entre janelas.

Nem sequer uso isso, multithread não precisa disso, porque cada thread tem seu próprio conjunto de tela/teclado/mouse.

Mas não invente usar multithread agora..... vai ser outra complicação, que NINGUËM vai querer/poder te ensinar.
Ou tente... começando em reescrever todos os fontes existentes pra algo mais prático, antes de mexer com multithread.
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

"Começando" com GUI

Mensagem por JoséQuintas »

Faltou a imagem....

Qual a diferença de wvgCrt() ou apenas uma área da tela? apenas o título da janela no formato Windows?
teste.png
Nota:
Como dá pra ver no fonte, a segunda janela aparece ao digitar ZERO no código.
E ao alterar o valor e fechar a janela, o GET passa a ter o novo conteúdo da outra janela (wvgCrt).
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

JoséQuintas escreveu: PROCEDURE Main

LOCAL codigo := 1, descricao := SPace(25), complemento := Space(25)
LOCAL CST := 0, ncm := 0, cfop := 0, GetList := {}, nCont

SETMODE(33,80)
CLS
FOR nCont = 0 TO 33
@ nCont, 0 SAY Replicate("W", 80)
NEXT
SAVE SCREEN
SetColor( "W/B,B/W,,,W/B")
@ 8, 10 CLEAR TO 17, 50
@ 8, 10 TO 17, 50 COLOR "G+/B"
@ 9, 11 SAY Padc( "UMA JANELA", 39) COLOR "W/B"
@ 10, 11 TO 10, 49 COLOR "G+/B"
@ 11,11 SAY "Codigo:" GET codigo PICTURE "99999" VALID OkCodigo( @Codigo )
@ 12,11 SAY "Descricao:" GET descricao PICTURE "@!"
@ 13,11 SAY "Compl:" GET complemento PICTURE "@!"
@ 14,11 SAY "CST:" GET cst PICTURE "9999999999" VALID OkCst( @Cst )
@ 15,11 SAY "NCM:" GET ncm PICTURE "99999999"
@ 16,11 SAY "CFOP:" GET cfop PICTURE "9999"
READ
RESTORE SCREEN
RETURN
eu não quis postar todos os códigos completos pra não lhes cansar... mas o meu sistema é completo para a época do auge do clipper.
Esses detalhes todos do MAIN são grandes demais pra eu postar aqui e encher/poluir os olhos de quem quer que vá precisar dessas dicas/dúvidas que aqui postamos.
depois do módulo MAIN, onde são tratadas todas as variáveis LOCALs, PRIVATEs e PUBLICs são chamados os devidos módulos.
No meu caso, tenho 3 funcionando 100% em console HARBOUR, e, 2 em tentativas 100% HMG e este último em questão HÍBRIDO 50% GTWVG + 50% HMG, ou, no último caso, 100% em GTWVG.
vejam a telas do menu anterior e funcionando inclusive com MOUSE e botões gráficos numa tela 100% CONSOLE pela ajuda do próprio QUINTAS há alguns anos atrás - como o tempo é contra a gente:
menu orçamentos.png
Agora vejam a tela dos 3 orçamentos destacados funcionando em 100% CONSOLE, mas, com mensagens 100% gráficas da HMG ou GTWVG, não me lembro mais:
tela pci10001 - orçamento.png
tela pci10047 - orçamento simplificado.png
tela pci10010 - orçamento fdl.png
Bom, esta última tela, é que, estamos tentando transformar para 100% GUI.
Então, em 100% HMG, percebo que pra funcionar é necessário que apareçam 2 telas o tempo todo no sistema (pelo menos até agora, pra funcionar foi assim):
1 - modo console;
2 - modo GUI, com um form com tamanhos mínimos e invisível como FORM MAIN, pois quando for chamado um FORM 100% hmg, sejam CHILD ou MODAL, pois quando ele é fechado o FORM MAIN ainda continuará ativo.
JoséQuintas escreveu:PROCEDURE HB_GTSYS
30  
31    REQUEST HB_GT_WVG_DEFAULT
32  
33    RETURN
isso já tem no sistema. Só não mostrei pra não ficar repetindo coisas que já estão respondidas noutros tópicos, por vc mesmo QUINTAS.
JoséQuintas escreveu:oGT := hb_gtSelect()
agora essa linha eu ainda não sei, mas, talvez na minha cabeça, faça algum sentido. Não sei o conceito e sintax, mas, se for o que estou imaginando: "que ela retorna o controle à GT anterior - que é como se fosse o DEFINE WINDOW da HMG, fará mais sentido.
JoséQuintas escreveu:Tá aí o wvgCrt.
Variável por referência, igual faria com console, igual pode fazer com HMG, igual pode fazer com HWGUI.
Esse é um conhecimento básico do Clipper, obrigatório nos dias atuais.
Continua deixando isso de lado, e tá fazendo falta.
Quintas, as suas 2 telas oferecidas são semelhantes às que já uso. Observe que a TELA PDV postada por mim lá no início (que inclusive os códigos em HMG foram oferecidos 0800 pelo amigo MSDN), são 100% em GTWVG, e, para obtermos fontes de tamanhos definidos só é possível com o uso dos recursos gráficos da GTWVG usando o DRAWLABEL, etc...rsrsrs faltou ter um DRAWGET pra gente definir o tamanho dos fontes.
Então, essa tela, como é CONSOLE (não é WVGCRT), pelo que percebi, tudo que fizer de @SAY/GET diferente em RUNTIME, já atropela o que foi feito.
Então, veja a tela se eu chamar o BROWSEDB em cima dela... olha a emboleira, pois no lugar de usar o gráfico CRIABROWSE_WVG (poderia ser o modelo do MSDN adaptado para CRIABROWSE_HMG):

Código: Selecionar todos

CRIABROWSE_WVG (VARIAVEL,'PCI10048',NOME_ARQUIVO,CABEC_CAMPOS,TAM_MEMO,MASCARAS)
comentei-o e voltei ao CRIABROWSE 100% console

Código: Selecionar todos

          CRIABROWSE (VARIAVEL,'PCI10048',NOME_ARQUIVO,CABEC_CAMPOS,TAM_MEMO,MASCARAS)
...
e vejam na "emboleira" que causou, mas, que a variável VALOR retonar para o GET mCDPRODUTO ou qualquer que seja o GET o valor que realmente precisamos e já com o ENTER pra passar para o próximo campo GET:
tela pci10048 - orçamento GUI junto com o TBROWSEDB CONSOLE.png
Então, pra que a tela não fique toda "embolada" como apresentado acima, é que criamos o CRIABROWSE_WVG ou CRIABROWSE_HMG (adaptaão do código MSDN que é para HMG-E).
Talvez, eu não esteja conseguindo passar a informação para o fórum, mas, é isso, pois os códigos são outros.
Por @REFERÊNCIA também não retornou a variável VALOR para o GET mCDCODIGO (o básico de clipper que tem em muitos módulos e bastante linhas do meu sistema em 100% clipper/harbour).
Agora, esta função HB_GTSELECT(), vou ver se encontro alguma sintaxe, tutor, documentação no "google".
Ela pode ser a ligação entre a tela inicial do módulo com o WVGCRT e vice-versa sem que percam-se as informações!
boa tarde a todos!
"E, Ele nos vivificou estando nós mortos nos nossos delitos e pecados" - Efésios 2 - Bíblia Sagrada.
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

ah!
descobri este post https://groups.google.com/forum/#!topic ... tpo0TTJ6Fk onde vc Quintas, tenta explicar o uso do HB_GTSELECT()
rssrs
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

"Começando" com GUI

Mensagem por MSDN »

Fazer uma postagem enorme tentando explicar algo simples justamente para o Quintas, não é um sinal de que algo está errado ?
Tem tanto exemplo 100% GUI, usando HwGUI, HMG, HMGE, várias pessoas já te enviaram links, te explicaram, e pq ainda não deu resultado ?
Simples, vc não é programador, e como já havia dito antes, isso não é o problema, pq quando a gente não sabe, mas quer aprender de verdade, a gente é humilde e se esforça, por isso que nas artes marciais tem diferença de faixa !
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

"Começando" com GUI

Mensagem por asimoes »

Microvolution

Amiguinho porque você não tenta migrar 100% aos poucos as rotinas do seu sistema para HwGui? e por final a janela principal Main ?
HwGui ao meu ver é a mais fácil de fazer isto.

As opções do seu sistema podem ser janela modal

Exemplo de uma rotina simples para escolher/selecionar impressora para impressão, a janela foi construída com o design da HwGui
Misturar Console/Gui pode transforma o seu código em um monstrinho difícil de dar manutenção, ou é totalmente console ou é GUI, pensa nisso.

Código: Selecionar todos

#include "hwgui.ch"
#include "hbclass.ch"
#include "hbthread.ch"

#define HB_SYMBOL_UNUSED( symbol )  ( symbol := ( symbol ) )

THREAD STATIC aImpressorasSMF := {}
THREAD STATIC oThisformImp 

CREATE CLASS ClImpressoras_SMF

   PROTECTED :
   
   EXPORTED :   
  
   VAR cImpressora                AS STRING  INIT ""
   VAR lAbreTabelas               AS LOGICAL INIT .F.
   VAR lCarregaImpressoras        AS LOGICAL INIT .F. 
   VAR nListImp                   AS INTEGER INIT 1
   
   METHOD Impressoras_SMF()
   METHOD SelecionaImpSMF( cImpressora )
   METHOD CarregaImpressoras()
   
ENDCLASS

METHOD Impressoras_SMF()
LOCAL oElemento, oDlg, oIconPrint, oLabel1, oButtonex1

   oIconPrint := HIcon():AddFile("P:\GERAL\HARBOUR\IPRINTER2.ICO", 24, 24)

   INIT DIALOG oDlg TITLE "Seleção das Impressoras" ;
              AT 0, 0 ;
              SIZE 643,330 ;
              FONT HFont():Add( 'Tahoma',0,-13,400,1252,,) ;
              ICON oIconPrint ;
              CLIPPER ;
              NOEXIT ;
              NOCLOSABLE ;
              STYLE WS_POPUP + WS_CAPTION + WS_SYSMENU + DS_CENTER ;
              ON INIT {|| oListImp:SetFocus()}
    
   oThisformImp := oDlg

   * SET KEY 0,VK_ESCAPE TO hwg_EndDialog()
   
   @ 014,017 SAY oLabel1 CAPTION "Impressoras Instaladas (Informe a impressora para imprimir)"  SIZE oDlg:nWidth,18 
  
   @ 012,042 GET LISTBOX oListImp ;
             VAR ::nListImp ;
             ITEMS aImpressorasSMF ;
             SIZE 618,228 ;
             ON DBLCLICK {|| ::SelecionaImpSMF( @::cImpressora ), oDlg:Close() } ;
   
   @ 014,280 BUTTONEX oButtonex1 ;
             CAPTION "Imprimir" ;
             SIZE 110,40 ;
             ICON     oIconPrint:handle ;
             STYLE BS_CENTER + WS_TABSTOP ;
             ON CLICK {|| ::SelecionaImpSMF( @::cImpressora ), oDlg:Close() }
   
   @ 137,287 SAY oLabel2 CAPTION "Impressora padrão:"  SIZE 116,18  
   
   @ 258,287 SAY  oLabel3 CAPTION Win_PrinterGetDefault() ;
             SIZE oDlg:nWidth,18
             
   ACTIVATE DIALOG oDlg ON ACTIVATE { || ::CarregaImpressoras()} 

   oIconPrint:Release()
   
   IF Empty( ::cImpressora )
      ::cImpressora := Win_PrinterGetDefault()
   ENDIF

   IF ! Hb_FileExists( hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
      hwg_WriteIni( 'MAIN'        , 'Descricao'    , 'IniPrint',  hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
      hwg_WriteIni( 'MAIN'        , 'Versao'       , "1.0",       hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
      hwg_WriteIni( 'CONFIGURACAO', 'Impressora'   , ::cImpressora, hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )   
   ELSE
      hwg_WriteIni( 'CONFIGURACAO', 'Impressora'   , ::cImpressora, hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
   ENDIF 
 
RETURN ::cImpressora

METHOD SelecionaImpSMF( cImpressora )
LOCAL nPos

   nPos := oThisformImp:oListImp:Value
   
   cImpressora := oThisformImp:oListImp:aItems[nPos]
   
RETURN cImpressora

METHOD CarregaImpressoras()
LOCAL oElemento, aPrn, oBarProgress 

   IF ! ::lCarregaImpressoras
      IF hb_FileExists( hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
         ::cImpressora := hwg_GetIni( 'CONFIGURACAO', 'Impressora' , '', hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
      ENDIF
      *
      IF Len( aImpressorasSMF ) = 0
         oThisformImp:oListImp:Clear()
         oBarProgress := HProgressBar():NewBox( "Aguarde...", , , , , 100 )
         FOR EACH oElemento IN aPrn := Win_PrinterList(.T., .F.)
            oBarProgress:Step()
            oBarProgress:SetLabel( hb_NtoS( oElemento:__enumIndex() ) + "/" + hb_NtoS( Len( aPrn ) ) )
            IF Empty( ::cImpressora )
               IF oElemento[1] = Win_PrinterGetDefault()
                  ::nListImp := oElemento:__enumIndex() 
               ENDIF
            ELSE
               IF oElemento[1] = ::cImpressora
                  ::nListImp := oElemento:__enumIndex()
               ENDIF
            ENDIF
            aAdd( aImpressorasSMF,  oElemento[1] )
            oThisformImp:oListImp:AddItems( oElemento[1] )
            hwg_DoEvents()
         NEXT
         oBarProgress:Close()
         oThisformImp:oListImp:Refresh()
      ELSE
         FOR EACH oElemento IN aImpressorasSMF
            IF oElemento = ::cImpressora
               ::nListImp := oElemento:__enumIndex()
            ENDIF
         NEXT 
      ENDIF
      *   
      IF ! Empty( ::cImpressora )
         IF hb_aScan( aImpressorasSMF, ::cImpressora ) = 0
            ::nListImp := hb_aScan( aImpressorasSMF, Win_PrinterGetDefault() )
         ENDIF
      ENDIF
      ::lCarregaImpressoras := .T.
   ENDIF
   
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

consegui fazer a devolução da variável VALOR que está numa janela TBROWSEDB (WVGCRT) para a janela anterior, ou seja, o GET que chamou a PESQUISA.
Antes do :DESTROY() acrescentei a seguinte linha:

Código: Selecionar todos

VARIAVEL := VALOR
Pois como dissemos anteriormente (o Quintas e euzinho):
- GUIxGUI (mesma LIB) conversam naturalmente.
- GUI x CONSOLE não conversam.
- HARBOUR x HARBOUR conversam.
Então, já que as variáveis são harbour, fiz o teste e deu certo.
mas, é atirando pedras ao vento.
Agora, por exemplo, pesquisei no google e grupos da gtwvg e não vi nenhum exemplo do próximo passo.

O próximo passo é:
em tempo de execução, como uma informação para o DRAWLABEL(), que fora criado no início sem valor algum, ou como incluir um novo DRAWLABEL e e a cada GET ele ser substiduído.
Ou seja, o DRAWLABEL na GTWVG é o mesmo que o LABEL da HMG/HMG-E. Só que na HMG a gente consegue em RUN-TIME ir trocando a propriedade VALUE.
E, aqui como fazer isso acontecer?
Por exemplo. No iníco os valores são assim (antes de abrir a pesquisa):

Código: Selecionar todos

   AAdd( aPaint, { "Label8", {|| Wvt_DrawLabel( 01, 01, "NENHUM PRODUTO AINDA")	, 00, 00, RGB( 255, 255, 255 )	, RGB( 063, 096, 150 ), "Arial"			, 32, , , , , .f., .f., .f. ) }, 		{ WVT_BLOCK_LABEL, 01, 01, 03, 50 } } )
Quando a pesquisa é satisfeita SEKK no GET, a descrição do produto é transferida.
É possível isso?

Código: Selecionar todos

		  aPaint[14] := { "Label8", {|| Wvt_DrawLabel( 01, 01, mDSPRODUTO	, 00, 00, RGB( 255, 255, 255 )	, RGB( 063, 096, 150 ), "Arial"			, 32, , , , , .f., .f., .f. ) }, 		{ WVT_BLOCK_LABEL, 01, 01, 03, 50 } }
O apaint[14] é o que contém o anterior.
asimoes escreveu:HwGui ao meu ver é a mais fácil de fazer isto.
já tá difícil compreender GTWVG e HMG, quanto mais mais uma... é dar com o burro nas águas.
HWGUI terei que aprender tudo do zero.
ASIMOES, vc sempre tem me ajudado, e, me sinto honrado por isso, mas, como já estou usando a IDE/HMG pra compilar, e, a HMG já vem com a GTWVG nativa, penso que me confundirei ainda mais...
ademais, já me acostumei com o visual das 2... e preciso aprender elas...
Mas, não fica descartada a hipótese...
abraços!
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

"Começando" com GUI

Mensagem por syslink »

microvolution escreveu:Quando a pesquisa é satisfeita SEKK no GET, a descrição do produto é transferida.
É possível isso?
tente assim:
mantenha a sua EXECFORM() como está e duplique-a para: EXECFORM1(), com as linhas:

Código: Selecionar todos

STATIC FUNCTION ExecForm1( aPaint )
   LOCAL cColor    := SetColor() , aPnt
   aPnt := Wvg_SetPaint( aPaint )
   SetColor( "N/W" ) // cores básicas da tela
   CLS
   SetColor( cColor )
   Wvg_SetPaint( aPnt )
RETURN NIL
acrescente as linhas que chamam a função EXECFORM1() após o mVR_UNITAR:

Código: Selecionar todos

AAdd( aPaint, { "Label8_descricao_produto"	, {|| Wvt_DrawLabel( 01, 01, mDSPRODUTO	, 00, 00, RGB( 255, 255, 255 )	, RGB( 063, 096, 150 ), "Arial"			, 36, , , , , .f., .f., .f. ) }, 		{ WVT_BLOCK_LABEL, 01, 01, 01, 50 } } )
ExecForm1( aPaint )
É um paliativo até conseguir algo mais dinâmico, mas, irá funcionar toda vez que o GET mCDPRODUTO for validado.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

"Começando" com GUI

Mensagem por JoséQuintas »

já tá difícil compreender GTWVG e HMG, quanto mais mais uma...
Na prática é difícil entender o Microevolution.

Diz que vai usar HMG, mas fica perguntando sobre GTWVG.
Quer fazer coisas impossíveis com GTWVG.
Ao ter resposta, simplesmente ignora e parte pra outra coisa.
Não tem sequência no trabalho.

Tá deixando tudo em aberto, parece que está vomitando problemas sem parar, sem interesse em respostas ou soluções.

Volte quando estiver realmente interessado em resolver alguma coisa.
Já não se trata de começando em GUI, mas porrilhões de dúvidas sem interesse.
Está mais pra bate papo delirante do que algo que ajude alguém.
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

bom dia a todos!
JoséQuintas escreveu:oGT := hb_gtSelect()
isso não funcionou, deu na mesma.
gosto da GTWVG pela simplicidade de poder obter pequenos resultados gráficos sem muita alteração nos códigos.
HMG 3.4.4 uso-a principalmente, pois já vem com a gtwvg e por entender q é mais prático usar a IDE para compilação e edição dos .PRGs.
JoséQuintas escreveu:hb_gtSelect( oGt )
não deu certo (nem no início e nem no final, não transferiu os valores para o GET que chamou a pesquisa).
syslink escreveu:EXECFORM1()
deu certo apenas pra acrescentar em RUN-TIME apenas a DESCRIÇÃO DO PRODUTO que agora a cada GET já está aparecendo, mas, o VALOR UNITÁRIO não aparece. Talvez terei que fazer uma outra EXECFORM2() pra que ela apareça.
O problema que encontro é que no clipper tenho materiais à disposição e livros que adquiri ao longo dos 31 anos de aprendizado.
Mas, em se tratando de LIB GRÁFICA, pelo que vi até agora no google, só tem materiais/tutoriais/etc para XAILER, FIVEWIN.
Pra HMG, GTWVG, GTWVW, etc... só temos exemplos, e, não a explicação de como cada função funciona.
Então pra mim que estou começando em GUI, fico testando sem compreensão da coisa.
Mas, tá bom demais.
A gente vai se construindo aos poucos até chegar o fim "combatendo o bom combate" e "seguindo a Paz com todos"!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

"Começando" com GUI

Mensagem por JoséQuintas »

não deu certo (nem no início e nem no final, não transferiu os valores para o GET que chamou a pesquisa).
E quem disse que isso é pra transferir valores para GET?
Isso é pra uma janela assumir o controle, ou devolver o controle.
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

"Começando" com GUI

Mensagem por JoséQuintas »

não deu certo (nem no início e nem no final, não transferiu os valores para o GET que chamou a pesquisa).
Mas espere aí... já não tinha resolvido isso?
onsegui fazer a devolução da variável VALOR que está numa janela TBROWSEDB (WVGCRT) para a janela anterior, ou seja, o GET que chamou a PESQUISA.
Antes do : DESTROY() acrescentei a seguinte linha:
VARIAVEL := VALOR
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

ah! uma correção obvia:

Código: Selecionar todos

	 &VARIAVEL. := VALOR
se no início da função CRIABROWSE_WVG (que usa o WVGCRT) recebe o GET que chamou a pesquisa como VARIAVEL, então o conteúdo dela muda a cada GET.
Neste caso, o GET chama-se "MCDPRODUTO" e o conteúdo de VARIAVEL nada mais é que "MCDPRODUTO".
então se deixar como foi acrescentado anteriormente:

Código: Selecionar todos

VARIAVEL := VALOR
Teremos o resultado errôneo de:
VARIAVEL := 17
e não é o correto.
o correto é:
&VARIAVEL := 17, ou seja MCDPRODUTO := 17
... :{
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

"Começando" com GUI

Mensagem por asimoes »

Quintas, olha o açúcar, rs esse tópico tá sinistro.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

"Começando" com GUI

Mensagem por MSDN »

Eu sei que é jogar gasolina pra apagar o fogo, mas...
Mas, em se tratando de LIB GRÁFICA, pelo que vi até agora no google, só tem materiais/tutoriais/etc para XAILER, FIVEWIN.
Pra HMG, GTWVG, GTWVW, etc... só temos exemplos, e, não a explicação de como cada função funciona.
Então pra mim que estou começando em GUI, fico testando sem compreensão da coisa.
é o que venho falando, um programador de formação, quando vê algo que não conhece, vai em frente e acha uma forma de assimilar as mudanças e segue em frente, todo mundo aqui no fórum fez isso, todo mundo era Clippeiro, veio do DOS, etc, a questão, é que vc muitos anos atrás, usou um software para construir sistemas ( Sculptor ), comprou livros de Clipper, e por realmente ser uma linguagem muito simples de aprender, conseguiu fazer um sistema, porém, isso não quer dizer que vc seja um programador, o que fica bem evidente na falta de coerência do que fala, do que faz, do que deseja, nem vc sabe o que quer, e quando reclama da falta de literatura, passa recibo em cartório de que realmente nada sabe !
Quer livros aos montes, exemplos saindo pelo ladrão, fóruns e mais fóruns falando sobre linguagem, vai pro Delphi, pelo menos pra fazer as telas vai ser fácil !
Responder