Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por alaminojunior »

É isso meus caros.
Tenho uma 1ª dialog que possui dois get´s, vdesconto e vrecebido;
ao teclar ENTER no valor recebido, eu abro uma 2ª dialog com browse para escolher a forma de pagamento;
escolhido a forma, eu fecho a 2ª dialog e volto à 1ª dos get´s e fica assim até fechar o valor total da compra;
neste retornar para a 1ª dialog, eu preciso exibir nela o valor recebido e sua respectiva forma de pagamento, porém não consigo exibir.
O foco volta para o get de valor recebido, e não exibe nada.
Se não conseguir fazer isso, tentarei colocar o browse na mesma dialog.

Código: Selecionar todos

#include "hwgui.ch"

FUNCTION recebimento( p1, p2, p3, p4 )
REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )
use cdfrm001
index on FrmFrm tag indfrm01 to indfrs.cdx
set index to indfrs
Private vEdit1 := 0, vEdit2 := 0, vEdit3 := 250, vEdit4 := 0, vEdit5:= 250, tot:= 0
Private oEdit1, oEdit2, oLabel2, oLabel3, oLabel1, oLabel4, oLabel9, oGroup1, linha:= 95 ;
       , oEdit3, oLabel5, oEdit4, oLabel6, oEdit5

  INIT DIALOG oDlg TITLE "Tela de Recebimento" ;
    AT 389,144 SIZE 527,412 ;
        FONT HFont():Add( 'Verdana',0,-13,400,,,) CLIPPER  NOEXIT  ;
        STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX+DS_CENTER 
        Thisform := oDlg
   SetColorInFocus(.t.)
	SetToolTipBalloon(.t.)
   @ 175,12 SAY oLabel1 CAPTION "Recebimento"  SIZE 159,29 ;
        STYLE SS_CENTER    ;
        FONT HFont():Add( 'Verdana',0,-21,700,,255,)
   @  15,45 GROUPBOX oGroup1 CAPTION "" SIZE 500,355
	@ 190,20 GROUPBOX oGroup1 CAPTION " Valor - Forma " OF oGroup1 SIZE 290,240    
	
   @ 29,115 SAY oLabel2 CAPTION "Desconto" SIZE 80,19   
   @ 29,275 SAY oLabel3 CAPTION "Recebido" SIZE 80,19   
   @ 29, 55 SAY oLabel4 CAPTION "Total" SIZE 80,19   
   @ 29,335 SAY oLabel5 CAPTION "Falta" SIZE 80,19   
	@ 29,175 SAY oLabel6 CAPTION "Líquido" SIZE 80,19

   @ 29,75 GET oEdit3 VAR vEdit3 SIZE 150,35 ;
        STYLE ES_RIGHT +WS_DLGFRAME +WS_DISABLED PICTURE '@e 999,999.99'     ;
        FONT HFont():Add( '',0,-19,400,,,)

   @ 29,135 GET oEdit1 VAR vEdit1 SIZE 150,35 ;
        STYLE ES_RIGHT +WS_DLGFRAME MAXLENGTH 10   ;
        PICTURE '@e 999,999.99' ;
        VALID {|| desconto()};
        FONT HFont():Add( '',0,-19,400,,,); 
        TOOLTIP 'Digite o valor do desconto'

   @ 29,195 GET oEdit5 VAR vEdit5 SIZE 150,35 ;
        STYLE ES_RIGHT +WS_DLGFRAME +WS_DISABLED MAXLENGTH 10   ;
        PICTURE '@e 999,999.99' ;
        FONT HFont():Add( '',0,-19,400,,,); 
        TOOLTIP 'Valor líquido'
        
   @ 29,355 GET oEdit4 VAR vEdit4 SIZE 150,35 ;
        STYLE ES_RIGHT +WS_DLGFRAME +WS_DISABLED ;
        BACKCOLOR 8421631 PICTURE '@e 999,999.99' MAXLENGTH 10   ;
        FONT HFont():Add( '',0,-19,400,,,); 
        TOOLTIP 'Valor restante para finalizar pagamento'
        
   @ 29,295 GET oEdit2 VAR vEdit2 SIZE 150,35 ;
        STYLE ES_RIGHT +WS_DLGFRAME MAXLENGTH 10   ;
        PICTURE '@e 999,999.99' ;
        VALID {|| calcu()};
        FONT HFont():Add( '',0,-19,400,,,); 
        TOOLTIP 'Digite o valor recebido'
	ACTIVATE DIALOG oDlg 
RETURN oDlg:lresult       

Function desconto
vEdit5 = vEdit3-vEdit1 // liquido = total-desconto
vEdit4 = vEdit5-tot    // resta   = liquido-armazenado
oEdit5:refresh()
oEdit4:refresh()
return .t.

Function calcu
if vEdit2 <= 0
   return .f.
else
    browseformas()
    @ 220,linha SAY oLabel6 CAPTION "R$ "+tran(vEdit2,"@e 999,999.99") +" - "+ cdfrm001->frmfor TRANSPARENT SIZE 250,19 COLOR 16711680   ;
        FONT HFont():Add( 'Lucida Console',0,-16,400,,,) // aqui precisaria exibir na 1ª dialog, mas não exibe !
    oEdit2:setfocus()
endif
linha = linha + 20
tot = tot + vEdit2           // armazenado = armazenado+digitado
vEdit4 = vEdit5-tot          // resta = (liquido-armazenado)
vEdit2 = 0
oEdit2:refresh()
oEdit4:refresh()
return .t.   

Código: Selecionar todos

#include "hwgui.ch"

FUNCTION browseformas
Local nRECNO:=0
private b1:= select()
select cdfrm001
ordsetfocus("indfrm01")
_browse()
select(b1)
return .t.  

FUNCTION _browse
PRIVATE oBrowse1

   INIT DIALOG oDlg2 TITLE " Escolha a forma de pagamento" ;
   AT 445,141 SIZE 280,240 ;
   FONT HFont():Add( 'Arial',0,-13,400,,,) CLIPPER  NOEXIT  ;
   STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX+DS_CENTER

   @ 15,15 BROWSE oBrowse1 DATABASE SIZE 250,210 ;
   STYLE WS_VSCROLL + WS_HSCROLL;
   ON CLICK {|o,key| EndDialog() } ;
   ON POSCHANGE {|| oBrowse1:Refresh() } 

     oBrowse1:bKeyDown := {|o,key| encontrou(o, key ) } 

     oBrowse1:AddColumn( HColumn():New( "Cód.", FieldBlock(Fieldname(1)),"N",02,00) )
     oBrowse1:AddColumn( HColumn():New( "Forma" , FieldBlock(Fieldname(2)),"C",15,00) )

     oBrowse1:aColumns[1]:length := 02
     oBrowse1:aColumns[2]:length := 15

     oBrowse1:aColumns[1]:nJusHead := DT_CENTER
     oBrowse1:aColumns[2]:nJusHead := DT_CENTER

   ACTIVATE DIALOG oDlg2

RETURN(oBrowse1:nCurrent)

STATIC FUNCTION encontrou( oBrowse, key )
TECLA:= VAL(ALLTRIM(VALTOPRG(KEY)))
DO CASE
   CASE KEY = VK_RETURN
        EndDialog()
   CASE KEY = 1 
        EndDialog()
   CASE TECLA > 47 .AND. TECLA < 58 
        dbseek(val(chr(tecla)))
		  oBrowse1:Refresh() 
		  EndDialog()   
   otherwise
ENDCASE
Return .T.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por esbasso »

Aqui

Código: Selecionar todos

@ 220,linha SAY oLabel6 CAPTION "R$ "+tran(vEdit2,"@e 999,999.99") +" - "+ cdfrm001->frmfor TRANSPARENT SIZE 250,19 COLOR 16711680   ;
            FONT HFont():Add( 'Lucida Console',0,-16,400,,,) // aqui precisaria exibir na 1ª dialog, mas não exibe !

Ficara

Código: Selecionar todos

      oLabel6:CAPTION := "R$ "+tran(vEdit2,"@e 999,999.99") +" - "+ cdfrm001->frmfor 
ou se for usar ao lado do Label6 é necessario criar o Label7 la em cima no Dialog

Código: Selecionar todos

    #include "hwgui.ch"

    FUNCTION browseformas
    Local nRECNO:=0
    private b1:= select()
    select cdfrm001
    ordsetfocus("indfrm01")
    _browse()
    select(b1)
    return .t. 

    FUNCTION _browse
    PRIVATE oBrowse1

       INIT DIALOG oDlg2 TITLE " Escolha a forma de pagamento" ;
       AT 445,141 SIZE 280,240 ;
       FONT HFont():Add( 'Arial',0,-13,400,,,) CLIPPER  NOEXIT  ;
       STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX+DS_CENTER

       @ 15,15 BROWSE oBrowse1 DATABASE SIZE 250,210 ;
       STYLE WS_VSCROLL + WS_HSCROLL;
       ON CLICK {|o,key| EndDialog() } 
       //REMOVER ISSO ON POSCHANGE {|| oBrowse1:Refresh() }

         oBrowse1:bKeyDown := {|o,key| encontrou(o, key ) }

         oBrowse1:AddColumn( HColumn():New( "Cód.", FieldBlock(Fieldname(1)),"N",02,00) )
         oBrowse1:AddColumn( HColumn():New( "Forma" , FieldBlock(Fieldname(2)),"C",15,00) )

         oBrowse1:aColumns[1]:length := 02
         oBrowse1:aColumns[2]:length := 15

         oBrowse1:aColumns[1]:nJusHead := DT_CENTER
         oBrowse1:aColumns[2]:nJusHead := DT_CENTER

       ACTIVATE DIALOG oDlg2
RETURN(oBrowse1:nCurrent)

    STATIC FUNCTION encontrou( oBrowse, key )
    TECLA:= VAL(ALLTRIM(VALTOPRG(KEY)))  // ISSO AQUI NÃO TEM SENTIDO
    DO CASE
       CASE KEY = VK_RETURN
            EndDialog()
       CASE KEY = 1
            EndDialog()
       CASE TECLA > 47 .AND. TECLA < 58
            dbseek(val(chr(tecla)))
            oBrowse1:Refresh()
            EndDialog()   
       otherwise
    ENDCASE
    Return .T.
Como voce esta usando um browse de tabela voce pode retonar o valor direto da tabela , do campo que quiser, pois o browse estara posicionado no registro corrrente

RETURN(oBrowse1:nCurrent)
Editado pela última vez por Toledo em 06 Jun 2010 09:07, em um total de 1 vez.
Razão: Mensagem editada para formatação de texto em letras minúsculas. Evite postar mensagens com texto em LETRAS MAIÚSCULAS.<br>Veja as Regras do Fórum:<br>7 - Mensagens em letras MAIÚSCULAS poderão ser editadas sem aviso prévio.
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por alaminojunior »

//REMOVER ISSO ON POSCHANGE {|| oBrowse1:Refresh() }
Verdade. É que são tantas emoções ...
STATIC FUNCTION encontrou( oBrowse, key )
TECLA:= VAL(ALLTRIM(VALTOPRG(KEY))) // ISSO AQUI NÃO TEM SENTIDO
DO CASE
...
CASE TECLA > 47 .AND. TECLA < 58
dbseek(val(chr(tecla)))
oBrowse1:Refresh()
EndDialog()
...
Tirando o Alltrim() até entendo, mas é que o usuário pode teclar direto o índice da forma de pagto., ao invéz de clicar com o mouse ou teclar ENTER, tornando mais rápido e prático o processo. Ou desculpe, não entendí onde quis chegar.

Sobre colocar um oLabel7, ficaria meio tensa a situação pois eu eventualmente precisaria colocar n label´s, pois o cliente pode resolver pagar com n formas de pagamento. À menos que eu possa mudar o valor da linha de oLabel6, algo do tipo

Código: Selecionar todos

oLabel6:top(nnn)
que eu nem sei se existe.
Neste caso específico eu preciso ir mostrando os valores recebidos e suas respectivas formas, uma abaixo da outra à medida em que forem digitadas. Como no Scroll().

Fazendo a mudança que o colega sugeriu

Código: Selecionar todos

oLabel6:CAPTION := "R$ "+tran(vEdit2,"@e 999,999.99") +" - "+ cdfrm001->frmfor
ainda não conseguí o resultado.

Mas eu sou brasileiro e não desisto nunca.
Muito obrigado Basso pela boa vontade em ajudar.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por alaminojunior »

Voltando...sobre o:

Código: Selecionar todos

@ 220,linha SAY oLabel9 CAPTION "R$ "+tran(vEdit2,"@e 999,999.99") +" - "+ cdfrm001->frmfor TRANSPARENT SIZE 250,19 COLOR 16711680   ;
            FONT HFont():Add( 'Lucida Console',0,-16,400,,,)   
Conseguí fazer funcionar com a dica do Basso, aliado a minha descoberta de que estava usando um label já utilizado por outra coisa. Troquei por oLabel9.
Mas preciso descobrir uma maneira de fazer um scroll antes deste label, pois ele é mostrado sempre no mesmo lugar.
Estamos quase.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por alaminojunior »

Isso aqui tá ficando o máximo.
Já conseguí mudar o label de posição.

Código: Selecionar todos

oLabel9:ntop := linha+20
oLabel9:move()
Mas surgiu outro pepino: o anterior se apaga :'(
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por esbasso »

TECLA:= VAL(ALLTRIM(VALTOPRG(KEY)))

porque key = tecla
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por alaminojunior »

esbasso escreveu:TECLA:= VAL(ALLTRIM(VALTOPRG(KEY)))
porque key = tecla
De fato.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por alaminojunior »

Ainda sobre a questão de ir mostrando um texto na dialog...
Consultando alguns tópicos, conseguí fazer o objeto oLabel9 mudar de posição, como em:

Código: Selecionar todos

oLabel9:ntop := linha+20
oLabel9:move()
Mas sem querer exigir demais, eu preciso mudar o número da linha para exibição do oLabel9, exibir numa linha mais abaixo, sem apagar o que foi escrito na linha anterior.
Tentei também o @ ... SAY ... SIZE ... mas também não funcionou.

Alguma dica ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por esbasso »

esta forma de programação que voce tenta é do modelo antigo procedurai e do antigo clipper

voce tem de programar (adicionar) todos os objetos na criação da tela
DEPOIS VOCE PODERA mover,esconder mostrar

objeto:move()
objeto:hide()
objeto:show()

não existe voce ir dando @say como se fosse no clipper
cada SAY é um objeto e voce poderá alterar seu conteudo a qualquer hora
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Depois de fechar 2ª dialog, não consigo exibir na 1ª.

Mensagem por alaminojunior »

Entendí.
Aos poucos eu chego lá.
É que eu tenho visto em alguns exemplos da HwGui, comandos @ ... say ... SIZE ... e achei que podería fazer uso.
O jeito vai ser inicializar uma matriz com um número pré-definido de oLabel´s e limitar. Fazer o quê né !?
Mais uma vez...meus agradecimentos.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Responder