Como fazer um TGet que posiciona nele mesmo | Ti Responde 043

No vídeo de hoje vamos demonstrar em como fazer um TGet posicionar nele mesmo (ideal para telas com leitura de código de barra).

Essa dúvida foi de um aluno, o grande Rafael, onde ele queria fazer uma tela com leitura de código de barras.

Ai como ele poderia fazer com que o TGet (ou MSGET), posicionasse nele mesmo? Então demonstramos isso, criando um segundo TGet que reposiciona o foco.

E abaixo o código fonte desenvolvido para exemplificar:

//Bibliotecas
#Include 'TOTVS.ch'
 
/*/{Protheus.doc} User Function zVid0043
Funcao com tela customizada usando a classe TDialog que foi gerado pelo PDialogMaker
@type  Function
@author Atilio
@since 28/07/2022 
@see https://atiliosistemas.com/portfolio/pdialogmaker/
@obs Obrigado por usar um aplicativo da Atilio Sistemas
/*/
 
User Function zVid0043()
    Local aArea         := FWGetArea()
    Local nCorFundo     := RGB(204, 255, 204)
    Local nJanAltura    := 118
    Local nJanLargur    := 221 
    Local cJanTitulo    := 'Teste TGet'
    Local lDimPixels    := .T. 
    Local lCentraliz    := .T. 
    Local nObjLinha     := 0
    Local nObjColun     := 0
    Local nObjLargu     := 0
    Local nObjAltur     := 0
    Private cFontNome   := 'Tahoma'
    Private oFontPadrao := TFont():New(cFontNome, , -12)
    Private oDialogPvt 
    Private bBlocoIni   := {|| /*fSuaFuncao()*/ } //Aqui voce pode acionar funcoes customizadas que irao ser acionadas ao abrir a dialog 
    //objeto0 
    Private oGetObj0 
    Private xGetObj0    := Space(10) //Se o get for data para inicilizar use dToS(''), se for numerico inicie com 0  
    //objeto1 
    Private oSayObj1 
    Private cSayObj1    := '' 
    //objeto2 
    Private oGetObj2 
    Private xGetObj2    := Space(10) //Se o get for data para inicilizar use dToS(''), se for numerico inicie com 0  
    //objeto3 
    Private oBtnObj3 
    Private cBtnObj3    := 'Fechar' 
    Private bBtnObj3    := {|| oDialogPvt:End()}  
     
    //Cria a dialog
    oDialogPvt := TDialog():New(0, 0, nJanAltura, nJanLargur, cJanTitulo, , , , , , nCorFundo, , , lDimPixels)
     
        //objeto0 - usando a classe TGet
        nObjLinha := 5
        nObjColun := 5
        nObjLargu := 100
        nObjAltur := 10
        oGetObj0  := TGet():New(nObjLinha, nObjColun, {|u| Iif(PCount() > 0 , xGetObj0 := u, xGetObj0)}, oDialogPvt, nObjLargu, nObjAltur, /*cPict*/, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontPadrao, , , lDimPixels)
        oGetObj0:bValid := {|| fVldGet()}
 
        //objeto1 - usando a classe TSay
        nObjLinha := 18
        nObjColun := 5
        nObjLargu := 100
        nObjAltur := 6
        oSayObj1  := TSay():New(nObjLinha, nObjColun, {|| cSayObj1}, oDialogPvt, /*cPicture*/, oFontPadrao, , , , lDimPixels, /*nClrText*/, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)
 
        //objeto2 - usando a classe TGet
        nObjLinha := 84
        nObjColun := 70
        nObjLargu := 1
        nObjAltur := 1
        oGetObj2  := TGet():New(nObjLinha, nObjColun, {|u| Iif(PCount() > 0 , xGetObj2 := u, xGetObj2)}, oDialogPvt, nObjLargu, nObjAltur, /*cPict*/, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontPadrao, , , lDimPixels)
        oGetObj2:bGotFocus:={|| oGetObj0:SetFocus()}
 
        //objeto3 - usando a classe TButton
        nObjLinha := 40
        nObjColun := 5
        nObjLargu := 50
        nObjAltur := 15
        oBtnObj3  := TButton():New(nObjLinha, nObjColun, cBtnObj3, oDialogPvt, bBtnObj3, nObjLargu, nObjAltur, , oFontPadrao, , lDimPixels)
 
     
    //Ativa e exibe a janela
    oDialogPvt:Activate(, , , lCentraliz, , , bBlocoIni)
     
    FWRestArea(aArea)
Return
 
Static Function fVldGet()
    Local lRet := .T.
 
    cSayObj1 := "Texto lido: '" + xGetObj0 + "'"
Return lRet

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação