Nesse vídeo demonstraremos a utilização da classe FWWizardControl, que serve para criar uma navegação com passos em uma dialog.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe258
Classe para criar uma uma navegação de Wizard (com opção de avançar ou retroceder)
@type Function
@author Atilio
@since 21/02/2023
@see https://tdn.totvs.com/display/public/framework/FWWizardControl
@obs
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe258()
Local aArea := FWGetArea()
Local nCorFundo := RGB(238, 238, 238)
Local nJanAltura := 400
Local nJanLargur := 600
Local cJanTitulo := 'Exemplo FWWizardControl'
Local lCentraliz := .T.
Private lDimPixels := .T.
Private nObjLinha := 0
Private nObjColun := 0
Private nObjLargu := 0
Private 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
//objeto1
Private oSayInsira
Private cSayInsira := 'Insira o Texto:'
//objeto2
Private oGetTexto
Private cGetTexto := "https://terminaldeinformacao.com" + Space(200)
//objeto3
Private oQrCode
//objeto4
Private oSayFim
Private cSayFim := 'Wizard concluído!'
//Objetos do Wizard
Private oPanelGer
Private oWizard
//Cria a dialog
oDialogPvt := TDialog():New(0, 0, nJanAltura, nJanLargur, cJanTitulo, , , , , , nCorFundo, , , lDimPixels)
//Cria um painel geral
oPanelGer := TPanel():New(001, 001, "", oDialogPvt, , , , RGB(000,000,000), RGB(254,254,254), (nJanLargur/2)-1, (nJanAltura/2)-3)
//Instancia o Wizard
oWizard := FWWizardControl():New(oPanelGer)
oWizard:ActiveUISteps()
//Página 1 do Wizard (terá um campo para o usuário digitar)
oNewPag := oWizard:AddStep("1")
oNewPag:SetStepDescription("Definição para usar o QRCode")
oNewPag:SetConstruction({|oPanel| fCriaPag1(oPanel)})
oNewPag:SetNextAction({|| fValidPag1()})
oNewPag:SetCancelAction({|| fEncerra()})
//Página 2 do Wizard
oNewPag := oWizard:AddStep("2", {|oPanel| fCriaPag2(oPanel)})
oNewPag:SetStepDescription("QRCode Gerado")
oNewPag:SetNextAction({|| .T.})
oNewPag:SetPrevAction({|| .T.})
oNewPag:SetCancelAction({|| fEncerra()})
//Página 3 do Wizard
oNewPag := oWizard:AddStep("3", {|oPanel| fCriaPag3(oPanel)})
oNewPag:SetStepDescription("Teste concluído")
oNewPag:SetNextAction({|| fEncerra()})
oNewPag:SetPrevAction({|| .T.})
oNewPag:SetCancelAction({|| fEncerra()})
//Ativa o Wizard para visualização
oWizard:Activate()
//Ativa e exibe a janela
oDialogPvt:Activate(, , , lCentraliz, , , bBlocoIni)
FWRestArea(aArea)
Return
Static Function fEncerra()
oDialogPvt:End()
Return .T.
Static Function fValidPag1()
Local lRet := .T.
//Se não houver texto para montar o QRCode, não permite prosseguir
If Empty(cGetTexto)
FWAlertError("Preencha algo no campo antes de prosseguir!", "Atenção")
lRet := .F.
Else
//Se o QRCode já tiver sido criado, atualiza ele
If ValType(oQrCode) == "O"
oQrCode:SetCodeBar(cGetTexto)
oQrCode:Refresh()
EndIf
EndIf
Return lRet
Static Function fCriaPag1(oPanel)
//objeto1 - usando a classe TSay
nObjLinha := 4
nObjColun := 4
nObjLargu := 70
nObjAltur := 6
oSayInsira := TSay():New(nObjLinha, nObjColun, {|| cSayInsira}, oPanel, /*cPicture*/, oFontPadrao, , , , lDimPixels, /*nClrText*/, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)
//objeto2 - usando a classe TGet
nObjLinha := 3
nObjColun := 64
nObjLargu := 110
nObjAltur := 10
oGetTexto := TGet():New(nObjLinha, nObjColun, {|u| Iif(PCount() > 0 , cGetTexto := u, cGetTexto)}, oPanel, nObjLargu, nObjAltur, /*cPict*/, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontPadrao, , , lDimPixels)
Return
Static Function fCriaPag2(oPanel)
//objeto3 - usando a classe FWQRCode
nObjLinha := 4
nObjColun := 110
nObjLargu := 160
nObjAltur := 160
oQrCode := FwQrCode():New({nObjLinha, nObjColun, nObjLargu, nObjAltur}, oPanel, cGetTexto)
Return
Static Function fCriaPag3(oPanel)
//objeto4 - usando a classe TSay
nObjLinha := 4
nObjColun := 4
nObjLargu := 200
nObjAltur := 6
oSayFim := TSay():New(nObjLinha, nObjColun, {|| cSayFim}, oPanel, /*cPicture*/, oFontPadrao, , , , lDimPixels, /*nClrText*/, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.