Nesse vídeo demonstraremos a utilização das classes FWDefSize e FWLayer, que servem para criar camadas com dimensões dentro de uma dialog, assim facilitando a criação de objetos.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe214
Exemplo de função que cria uma tela com dimensionamentos responsivos
@type Function
@author Atilio
@since 20/02/2023
@see https://tdn.totvs.com/display/public/framework/FWDefSize e https://tdn.totvs.com/display/public/framework/FWLayer
@obs
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe214()
Local aArea := FWGetArea()
If FWAlertYesNo("Você deseja ver o exemplo com FWLayer (sim) ou com FWDefSize (não)?", "Continua?")
fExemplo1()
Else
fExemplo2()
EndIf
FWRestArea(aArea)
Return
Static Function fExemplo1()
Local nLargBtn := 50
Local nLinhaObj := 0
Local nLargPanel := 0
//Objetos e componentes gerais
Private oDlgExemp
Private oFwLayer
Private oPanTitulo
Private oPanGrid
Private oPanCheck
Private oPanTotal
Private cMascara := "@E 999,999,999,999,999.99"
//Cabeçalho
Private oSayModulo, cSayModulo := 'TST'
Private oSayTitulo, cSayTitulo := 'Exemplo de Tela com
Private oSaySubTit, cSaySubTit := 'Objetos gráficos usando FWLayer'
//Tamanho da janela
Private aSize := MsAdvSize(.F.)
Private nJanLarg := aSize[5]
Private nJanAltu := aSize[6]
//Fontes
Private cFontUti := "Tahoma"
Private oFontMod := TFont():New(cFontUti, , -38)
Private oFontSub := TFont():New(cFontUti, , -20)
Private oFontSubN := TFont():New(cFontUti, , -20, , .T.)
Private oFontBtn := TFont():New(cFontUti, , -14)
Private oFontSay := TFont():New(cFontUti, , -12)
//Grid
Private aCampos := {}
Private cAliasTmp := "TST_" + RetCodUsr()
Private aColunas := {}
Private oMarkBrowse
//Componentes da segunda coluna
Private oSayChkDes
Private oSayChkPer
Private oSayChkVlr
Private oCheck01, lCheck01 := .F., oGetPerc01, nGetPerc01 := 0, oGetTot01, nGetTot01 := 0
Private oCheck02, lCheck02 := .F., oGetPerc02, nGetPerc02 := 0, oGetTot02, nGetTot02 := 0
Private oCheck03, lCheck03 := .F., oGetPerc03, nGetPerc03 := 0, oGetTot03, nGetTot03 := 0
Private oCheck04, lCheck04 := .F., oGetPerc04, nGetPerc04 := 0, oGetTot04, nGetTot04 := 0
Private oCheck05, lCheck05 := .F., oGetPerc05, nGetPerc05 := 0, oGetTot05, nGetTot05 := 0
//Componentes da terceira coluna
Private oSayTot, cSayTot := "Total marcado:", oGetTot, nGetTot := 0
Private oSayApu, cSayApu := "% Apurado:", oGetApu, nGetApu := 0
Private oSayPro, cSayPro := "Total que será processado:", oGetPro, nGetPro := 0
Private oBtnProc, oBtnPrev
//Adiciona as colunas que serão criadas na temporária
aAdd(aCampos, { "OK" , "C", 2 , 0 })
aAdd(aCampos, { "CONTA" , "C", 10 , 0 })
aAdd(aCampos, { "VALOR" , "N", 18 , 2 })
//Cria a tabela temporária
oTempTable:= FWTemporaryTable():New(cAliasTmp)
oTempTable:SetFields( aCampos )
oTempTable:Create()
//Busca as colunas do browse
aColunas := fCriaCols()
//Popula a tabela temporária
Processa({|| fPopula()}, "Processando...")
//Cria a janela
DEFINE MSDIALOG oDlgExemp TITLE "Exemplo de Tela com Objetos gráficos usando FWLayer" FROM 0, 0 TO nJanAltu, nJanLarg PIXEL
//Criando a camada
oFwLayer := FwLayer():New()
oFwLayer:init(oDlgExemp,.F.)
//Adicionando 3 linhas, a de título, a do corpo e a inferior
oFWLayer:addLine("TITULO", 010, .F.)
oFWLayer:addLine("CORPO", 088, .F.)
oFWLayer:addLine("RODAPE", 002, .F.)
//Adicionando as colunas das linhas
oFWLayer:addCollumn("HEADERTEXT", 050, .T., "TITULO")
oFWLayer:addCollumn("BLANKBTN", 040, .T., "TITULO")
oFWLayer:addCollumn("BTNSAIR", 010, .T., "TITULO")
oFWLayer:addCollumn("BLANKANTES", 001, .T., "CORPO")
oFWLayer:addCollumn("COLGRID", 039, .T., "CORPO")
oFWLayer:addCollumn("COLCHECK", 040, .T., "CORPO")
oFWLayer:addCollumn("COLTOTAL", 019, .T., "CORPO")
oFWLayer:addCollumn("BLANKDEPOIS", 001, .T., "CORPO")
//Criando os paineis
oPanHeader := oFWLayer:GetColPanel("HEADERTEXT", "TITULO")
oPanSair := oFWLayer:GetColPanel("BTNSAIR", "TITULO")
oPanGrid := oFWLayer:GetColPanel("COLGRID", "CORPO")
oPanCheck := oFWLayer:GetColPanel("COLCHECK", "CORPO")
oPanTotal := oFWLayer:GetColPanel("COLTOTAL", "CORPO")
//Títulos e SubTítulos
oSayModulo := TSay():New(004, 003, {|| cSayModulo}, oPanHeader, "", oFontMod, , , , .T., RGB(149, 179, 215), , 200, 30, , , , , , .F., , )
oSayTitulo := TSay():New(004, 045, {|| cSayTitulo}, oPanHeader, "", oFontSub, , , , .T., RGB(031, 073, 125), , 200, 30, , , , , , .F., , )
oSaySubTit := TSay():New(014, 045, {|| cSaySubTit}, oPanHeader, "", oFontSubN, , , , .T., RGB(031, 073, 125), , 300, 30, , , , , , .F., , )
//Criando os botões
oBtnSair := TButton():New(006, 001, "Fechar", oPanSair, {|| oDlgExemp:End()}, nLargBtn, 018, , oFontBtn, , .T., , , , , , )
//Cria a grid
oMarkBrowse := FWMarkBrowse():New()
oMarkBrowse:SetAlias(cAliasTmp)
oMarkBrowse:DisableFilter()
oMarkBrowse:DisableConfig()
oMarkBrowse:DisableReport()
oMarkBrowse:DisableSeek()
oMarkBrowse:DisableSaveConfig()
oMarkBrowse:SetFontBrowse(oFontSay)
oMarkBrowse:SetFieldMark('OK')
oMarkBrowse:SetTemporary(.T.)
oMarkBrowse:SetColumns(aColunas)
oMarkBrowse:SetOwner(oPanGrid)
oMarkBrowse:Activate()
//Cria os componentes da segunda coluna
@ 001, 001 SCROLLBOX oScroll VERTICAL HORIZONTAL SIZE oPanCheck:nHeight / 2, oPanCheck:nWidth / 2 OF oPanCheck
nLinhaObj := 1
nLargPanel := (oPanCheck:nWidth) / 2
nTotEspCol := (nLargPanel/3)
nTotCol01 := 003 + nTotEspCol * 0
nTotCol02 := 003 + nTotEspCol * 1
nTotCol03 := 003 + nTotEspCol * 2
oSayChkDes := TSay():New(nLinhaObj, 001 + nTotCol01, {|| "Descrição"}, oScroll, "", oFontSay, , , , .T., RGB(031, 073, 125), , nTotEspCol, 10, , , , , , .F., , )
oSayChkPer := TSay():New(nLinhaObj, 001 + nTotCol02, {|| "%"}, oScroll, "", oFontSay, , , , .T., RGB(031, 073, 125), , nTotEspCol, 10, , , , , , .F., , )
oSayChkVlr := TSay():New(nLinhaObj, 001 + nTotCol03, {|| "Valor"}, oScroll, "", oFontSay, , , , .T., RGB(031, 073, 125), , nTotEspCol, 10, , , , , , .F., , )
nLinhaObj += 25
oCheck01 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 01", {|u| Iif(PCount() > 0 , lCheck01 := u, lCheck01)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc01 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc01 := u, nGetPerc01)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot01 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot01 := u, nGetTot01)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot01:lActive := .F.
nLinhaObj += 15
oCheck02 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 02", {|u| Iif(PCount() > 0 , lCheck02 := u, lCheck02)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc02 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc02 := u, nGetPerc02)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot02 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot02 := u, nGetTot02)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot02:lActive := .F.
nLinhaObj += 15
oCheck03 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 03", {|u| Iif(PCount() > 0 , lCheck03 := u, lCheck03)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc03 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc03 := u, nGetPerc03)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot03 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot03 := u, nGetTot03)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot03:lActive := .F.
nLinhaObj += 15
oCheck04 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 04", {|u| Iif(PCount() > 0 , lCheck04 := u, lCheck04)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc04 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc04 := u, nGetPerc04)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot04 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot04 := u, nGetTot04)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot04:lActive := .F.
nLinhaObj += 15
oCheck05 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 05", {|u| Iif(PCount() > 0 , lCheck05 := u, lCheck05)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc05 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc05 := u, nGetPerc05)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot05 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot05 := u, nGetTot05)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot05:lActive := .F.
//Cria os componentes da terceira coluna
nLargPanel := (oPanTotal:nWidth) / 2
nLinhaObj := 30
oSayTot := TSay():New(nLinhaObj, 003, {|| cSayTot}, oPanTotal, "", oFontSay, , , , .T., RGB(031, 073, 125), , 200, 10, , , , , , .F., , )
nLinhaObj += 10
oGetTot := TGet():New(nLinhaObj, 013, {|u| Iif(PCount() > 0 , nGetTot := u, nGetTot)}, oPanTotal, nLargPanel - 25, 15, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot:lReadOnly := .T.
nLinhaObj += 25
oSayApu := TSay():New(nLinhaObj, 003, {|| cSayApu}, oPanTotal, "", oFontSay, , , , .T., RGB(031, 073, 125), , 200, 10, , , , , , .F., , )
nLinhaObj += 10
oGetApu := TGet():New(nLinhaObj, 013, {|u| Iif(PCount() > 0 , nGetApu := u, nGetApu)}, oPanTotal, nLargPanel - 25, 15, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetApu:lReadOnly := .T.
nLinhaObj += 25
oSayPro := TSay():New(nLinhaObj, 003, {|| cSayPro}, oPanTotal, "", oFontSay, , , , .T., RGB(031, 073, 125), , 200, 10, , , , , , .F., , )
nLinhaObj += 10
oGetPro := TGet():New(nLinhaObj, 013, {|u| Iif(PCount() > 0 , nGetPro := u, nGetPro)}, oPanTotal, nLargPanel - 25, 15, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetApu:lReadOnly := .T.
nLinhaObj += 25
nLinhaObj += 20
oBtnProc := TButton():New(nLinhaObj, 003, "Processar informações", oPanTotal, {|| Alert("botão 1")}, nLargPanel - 3, 018, , oFontBtn, , .T., , , , , , )
nLinhaObj += 25
oBtnPrev := TButton():New(nLinhaObj, 003, "Previsão dos dados", oPanTotal, {|| Alert("botão 2")}, nLargPanel - 3, 018, , oFontBtn, , .T., , , , , , )
Activate MsDialog oDlgExemp Centered
oTempTable:Delete()
Return
Static Function fCriaCols()
Local nAtual := 0
Local aColunas := {}
Local aEstrut := {}
Local oColumn
//Adicionando campos que serão mostrados na tela
//[1] - Campo da Temporaria
//[2] - Titulo
//[3] - Tipo
//[4] - Tamanho
//[5] - Decimais
//[6] - Máscara
aAdd(aEstrut, {"CONTA", "Conta", "C", 10, 0, ""})
aAdd(aEstrut, {"VALOR", "Valor", "N", 18, 2, cMascara})
//Percorrendo todos os campos da estrutura
For nAtual := 1 To Len(aEstrut)
//Cria a coluna
oColumn := FWBrwColumn():New()
oColumn:SetData(&("{|| (cAliasTmp)->" + aEstrut[nAtual][1] +"}"))
oColumn:SetTitle(aEstrut[nAtual][2])
oColumn:SetType(aEstrut[nAtual][3])
oColumn:SetSize(aEstrut[nAtual][4])
oColumn:SetDecimal(aEstrut[nAtual][5])
oColumn:SetPicture(aEstrut[nAtual][6])
//Adiciona a coluna
aAdd(aColunas, oColumn)
Next
Return aColunas
Static Function fPopula()
Local nAtual := 0
For nAtual := 1 To 30
//Grava na temporária
RecLock(cAliasTmp, .T.)
(cAliasTmp)->OK := ""
(cAliasTmp)->CONTA := StrZero(nAtual, 4)
(cAliasTmp)->VALOR := Randomize(100, 1000)
(cAliasTmp)->(MsUnlock())
Next
Return
Static Function fExemplo2()
Local nLargBtn := 50
Local nLinhaObj := 0
Local nLargPanel := 0
//Objetos e componentes gerais
Private oDlgExemp
Private oSize
Private oPanTitulo
Private oPanGrid
Private oPanCheck
Private oPanTotal
Private cMascara := "@E 999,999,999,999,999.99"
//Cabeçalho
Private oSayModulo, cSayModulo := 'TST'
Private oSayTitulo, cSayTitulo := 'Exemplo de Tela com
Private oSaySubTit, cSaySubTit := 'Objetos gráficos usando FWDefSize'
//Tamanho da janela
Private aSize := MsAdvSize(.F.)
Private nJanLarg := aSize[5]
Private nJanAltu := aSize[6]
//Fontes
Private cFontUti := "Tahoma"
Private oFontMod := TFont():New(cFontUti, , -38)
Private oFontSub := TFont():New(cFontUti, , -20)
Private oFontSubN := TFont():New(cFontUti, , -20, , .T.)
Private oFontBtn := TFont():New(cFontUti, , -14)
Private oFontSay := TFont():New(cFontUti, , -12)
//Grid
Private aCampos := {}
Private cAliasTmp := "TST_" + RetCodUsr()
Private aColunas := {}
Private oMarkBrowse
//Componentes da segunda coluna
Private oSayChkDes
Private oSayChkPer
Private oSayChkVlr
Private oCheck01, lCheck01 := .F., oGetPerc01, nGetPerc01 := 0, oGetTot01, nGetTot01 := 0
Private oCheck02, lCheck02 := .F., oGetPerc02, nGetPerc02 := 0, oGetTot02, nGetTot02 := 0
Private oCheck03, lCheck03 := .F., oGetPerc03, nGetPerc03 := 0, oGetTot03, nGetTot03 := 0
Private oCheck04, lCheck04 := .F., oGetPerc04, nGetPerc04 := 0, oGetTot04, nGetTot04 := 0
Private oCheck05, lCheck05 := .F., oGetPerc05, nGetPerc05 := 0, oGetTot05, nGetTot05 := 0
//Componentes da terceira coluna
Private oSayTot, cSayTot := "Total marcado:", oGetTot, nGetTot := 0
Private oSayApu, cSayApu := "% Apurado:", oGetApu, nGetApu := 0
Private oSayPro, cSayPro := "Total que será processado:", oGetPro, nGetPro := 0
Private oBtnProc, oBtnPrev
//Adiciona as colunas que serão criadas na temporária
aAdd(aCampos, { "OK" , "C", 2 , 0 })
aAdd(aCampos, { "CONTA" , "C", 10 , 0 })
aAdd(aCampos, { "VALOR" , "N", 18 , 2 })
//Cria a tabela temporária
oTempTable:= FWTemporaryTable():New(cAliasTmp)
oTempTable:SetFields( aCampos )
oTempTable:Create()
//Busca as colunas do browse
aColunas := fCriaCols()
//Popula a tabela temporária
Processa({|| fPopula()}, "Processando...")
//Cria a janela
DEFINE MSDIALOG oDlgExemp TITLE "Exemplo de Tela com Objetos gráficos usando FWDefSize" FROM 0, 0 TO nJanAltu, nJanLarg PIXEL
//Criando a camada
oSize := FwDefSize():New(.F., , , oDlgExemp) //Sem EnchoiceBar
//Adicionando 3 linhas, a de título, a do corpo e a inferior
oSize:AddObject( "TITULO", 100, 010, .T., .T.)
oSize:AddObject( "CORPO", 100, 088, .T., .T.)
oSize:AddObject( "RODAPE", 100, 002, .T., .T.)
//Define a margem entre os objetos
oSize:aMargins := { 3, 3, 3, 3 }
//Efetua os cálculos do dimensionamento
oSize:Process()
//Pegando o dimensionamento das linhas
aTitulo := {oSize:GetDimension("TITULO","LININI"),;
oSize:GetDimension("TITULO","COLINI"),;
oSize:GetDimension("TITULO","XSIZE"),;
oSize:GetDimension("TITULO","YSIZE")}
aCorpo := {oSize:GetDimension("CORPO","LININI"),;
oSize:GetDimension("CORPO","COLINI"),;
oSize:GetDimension("CORPO","XSIZE"),;
oSize:GetDimension("CORPO","YSIZE")}
aRodape := {oSize:GetDimension("RODAPE","LININI"),;
oSize:GetDimension("RODAPE","COLINI"),;
oSize:GetDimension("RODAPE","LINEND"),;
oSize:GetDimension("RODAPE","COLEND")}
//Ajuste no dimensionamento (linha inicial e linha final)
aCorpo[1] := aCorpo[1] - 50
aCorpo[4] := aCorpo[4] + 140
//Criando os paineis
oPanHeader := tPanel():New(aTitulo[1], aTitulo[2], '', oDlgExemp, , , , RGB(000,000,000), RGB(254,254,254), aTitulo[3] - 200, aTitulo[4])
oPanSair := tPanel():New(aTitulo[1], aTitulo[3] - 200, '', oDlgExemp, , , , RGB(000,000,000), RGB(254,254,254), aTitulo[3], aTitulo[4])
oPanGrid := tPanel():New(aCorpo[1], aCorpo[2] + (aCorpo[3]/3 * 0), '', oDlgExemp, , , , RGB(000,000,000), RGB(254,254,254), aCorpo[3]/3, aCorpo[4])
oPanCheck := tPanel():New(aCorpo[1], aCorpo[2] + (aCorpo[3]/3 * 1), '', oDlgExemp, , , , RGB(000,000,000), RGB(254,254,254), aCorpo[3]/3, aCorpo[4])
oPanTotal := tPanel():New(aCorpo[1], aCorpo[2] + (aCorpo[3]/3 * 2), '', oDlgExemp, , , , RGB(000,000,000), RGB(254,254,254), aCorpo[3]/3, aCorpo[4])
//Títulos e SubTítulos
oSayModulo := TSay():New(004, 003, {|| cSayModulo}, oPanHeader, "", oFontMod, , , , .T., RGB(149, 179, 215), , 200, 30, , , , , , .F., , )
oSayTitulo := TSay():New(004, 045, {|| cSayTitulo}, oPanHeader, "", oFontSub, , , , .T., RGB(031, 073, 125), , 200, 30, , , , , , .F., , )
oSaySubTit := TSay():New(014, 045, {|| cSaySubTit}, oPanHeader, "", oFontSubN, , , , .T., RGB(031, 073, 125), , 300, 30, , , , , , .F., , )
//Criando os botões
oBtnSair := TButton():New(006, 001, "Fechar", oPanSair, {|| oDlgExemp:End()}, nLargBtn, 018, , oFontBtn, , .T., , , , , , )
//Cria a grid
oMarkBrowse := FWMarkBrowse():New()
oMarkBrowse:SetAlias(cAliasTmp)
oMarkBrowse:DisableFilter()
oMarkBrowse:DisableConfig()
oMarkBrowse:DisableReport()
oMarkBrowse:DisableSeek()
oMarkBrowse:DisableSaveConfig()
oMarkBrowse:SetFontBrowse(oFontSay)
oMarkBrowse:SetFieldMark('OK')
oMarkBrowse:SetTemporary(.T.)
oMarkBrowse:SetColumns(aColunas)
oMarkBrowse:SetOwner(oPanGrid)
oMarkBrowse:Activate()
//Cria os componentes da segunda coluna
@ 001, 001 SCROLLBOX oScroll VERTICAL HORIZONTAL SIZE oPanCheck:nHeight / 2, oPanCheck:nWidth / 2 OF oPanCheck
nLinhaObj := 1
nLargPanel := (oPanCheck:nWidth) / 2
nTotEspCol := (nLargPanel/3)
nTotCol01 := 003 + nTotEspCol * 0
nTotCol02 := 003 + nTotEspCol * 1
nTotCol03 := 003 + nTotEspCol * 2
oSayChkDes := TSay():New(nLinhaObj, 001 + nTotCol01, {|| "Descrição"}, oScroll, "", oFontSay, , , , .T., RGB(031, 073, 125), , nTotEspCol, 10, , , , , , .F., , )
oSayChkPer := TSay():New(nLinhaObj, 001 + nTotCol02, {|| "%"}, oScroll, "", oFontSay, , , , .T., RGB(031, 073, 125), , nTotEspCol, 10, , , , , , .F., , )
oSayChkVlr := TSay():New(nLinhaObj, 001 + nTotCol03, {|| "Valor"}, oScroll, "", oFontSay, , , , .T., RGB(031, 073, 125), , nTotEspCol, 10, , , , , , .F., , )
nLinhaObj += 25
oCheck01 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 01", {|u| Iif(PCount() > 0 , lCheck01 := u, lCheck01)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc01 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc01 := u, nGetPerc01)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot01 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot01 := u, nGetTot01)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot01:lActive := .F.
nLinhaObj += 15
oCheck02 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 02", {|u| Iif(PCount() > 0 , lCheck02 := u, lCheck02)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc02 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc02 := u, nGetPerc02)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot02 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot02 := u, nGetTot02)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot02:lActive := .F.
nLinhaObj += 15
oCheck03 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 03", {|u| Iif(PCount() > 0 , lCheck03 := u, lCheck03)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc03 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc03 := u, nGetPerc03)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot03 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot03 := u, nGetTot03)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot03:lActive := .F.
nLinhaObj += 15
oCheck04 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 04", {|u| Iif(PCount() > 0 , lCheck04 := u, lCheck04)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc04 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc04 := u, nGetPerc04)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot04 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot04 := u, nGetTot04)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot04:lActive := .F.
nLinhaObj += 15
oCheck05 := TCheckBox():New(nLinhaObj, 003 + nTotCol01, "Check 05", {|u| Iif(PCount() > 0 , lCheck05 := u, lCheck05)}, oScroll, nTotEspCol - 3, 10, , /*bLClicked*/, oFontSay, /*bValid*/, /*nClrText*/, /*nClrPane*/, , .T.)
oGetPerc05 := TGet():New(nLinhaObj, 003 + nTotCol02, {|u| Iif(PCount() > 0 , nGetPerc05 := u, nGetPerc05)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot05 := TGet():New(nLinhaObj, 003 + nTotCol03, {|u| Iif(PCount() > 0 , nGetTot05 := u, nGetTot05)}, oScroll, nTotEspCol - 9, 10, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot05:lActive := .F.
//Cria os componentes da terceira coluna
nLargPanel := (oPanTotal:nWidth) / 2
nLinhaObj := 30
oSayTot := TSay():New(nLinhaObj, 003, {|| cSayTot}, oPanTotal, "", oFontSay, , , , .T., RGB(031, 073, 125), , 200, 10, , , , , , .F., , )
nLinhaObj += 10
oGetTot := TGet():New(nLinhaObj, 013, {|u| Iif(PCount() > 0 , nGetTot := u, nGetTot)}, oPanTotal, nLargPanel - 25, 15, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetTot:lReadOnly := .T.
nLinhaObj += 25
oSayApu := TSay():New(nLinhaObj, 003, {|| cSayApu}, oPanTotal, "", oFontSay, , , , .T., RGB(031, 073, 125), , 200, 10, , , , , , .F., , )
nLinhaObj += 10
oGetApu := TGet():New(nLinhaObj, 013, {|u| Iif(PCount() > 0 , nGetApu := u, nGetApu)}, oPanTotal, nLargPanel - 25, 15, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetApu:lReadOnly := .T.
nLinhaObj += 25
oSayPro := TSay():New(nLinhaObj, 003, {|| cSayPro}, oPanTotal, "", oFontSay, , , , .T., RGB(031, 073, 125), , 200, 10, , , , , , .F., , )
nLinhaObj += 10
oGetPro := TGet():New(nLinhaObj, 013, {|u| Iif(PCount() > 0 , nGetPro := u, nGetPro)}, oPanTotal, nLargPanel - 25, 15, cMascara, /*bValid*/, /*nClrFore*/, /*nClrBack*/, oFontSay, , , .T.)
oGetApu:lReadOnly := .T.
nLinhaObj += 25
nLinhaObj += 20
oBtnProc := TButton():New(nLinhaObj, 003, "Processar informações", oPanTotal, {|| Alert("botão 1")}, nLargPanel - 3, 018, , oFontBtn, , .T., , , , , , )
nLinhaObj += 25
oBtnPrev := TButton():New(nLinhaObj, 003, "Previsão dos dados", oPanTotal, {|| Alert("botão 2")}, nLargPanel - 3, 018, , oFontBtn, , .T., , , , , , )
Activate MsDialog oDlgExemp Centered
oTempTable:Delete()
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima