Olá, tenho uma tela em MCV que eu gostari de adiionar um botão no lugar de um campo, alguém possui algum exemplo?
Acredito que preciso fazer isso na ViewDef do probrama.
Obrigaod,
Olá, tenho uma tela em MCV que eu gostari de adiionar um botão no lugar de um campo, alguém possui algum exemplo?
Acredito que preciso fazer isso na ViewDef do probrama.
Obrigaod,
Olá!
Você pode dividir na ViewDef sua estrturura de cabeçalho por exemplo entre direita e esquerda e na estrutura da direita você iria adicionar um objeto externo com a função AddOtherObject chamando um programa que colocaria o botão com a função desejada.
Criando ViewDef:
/*/{Protheus.doc} ViewDef
INTERFACE GRÁFICA
@type Static function
@version
@author Maike
@since 25/06/2019
@return Objeto, modelo que será visualizado
/*/
Static Function ViewDef()
// INSTANCIA A VIEW
Local oView := FwFormView():New()
// INSTANCIA AS SUBVIEWS
Local oStruZB1 := FwFormStruct(2, "ZB1")
Local oStruZB2 := FwFormStruct(2, "ZB2")
Local oStruZB3 := FwFormStruct(2, "ZB3")
// RECEBE O MODELO DE DADOS
Local oModel := FwLoadModel("CTBOV01")
Local oStTotZB2 := FWCalcStruct(oModel:GetModel('ZB2CALC'))
Local oStTotZB3 := FWCalcStruct(oModel:GetModel('ZB3CALC'))
// INDICA O MODELO DA VIEW
oView:SetModel(oModel)
// CRIA ESTRUTURA VISUAL DE CAMPOS
oView:AddField("VIEW_ZB1", oStruZB1, "ZB1MASTER")
oView:AddGrid("VIEW_ZB2", oStruZB2, "ZB2DETAIL")
oView:AddGrid("VIEW_ZB3", oStruZB3, "ZB3DETAIL")
oView:AddField('VIEW_TOT_ZB2', oStTotZB2,'ZB2CALC')
oView:AddField('VIEW_TOT_ZB3', oStTotZB3,'ZB3CALC')
// CRIA BOXES HORIZONTAIS
oView:CreateHorizontalBox("CABECALHO", 14)
oView:CreateHorizontalBox("MACHO", 25)
oView:CreateHorizontalBox("MACHOTOTAL", 18)
oView:CreateHorizontalBox("FEMEA", 25)
oView:CreateHorizontalBox("FEMEATOTAL", 18)
oView:CreateVerticalBox( 'CABESQ', 92, 'CABECALHO' )
oView:CreateVerticalBox( 'CABDIR', 8, 'CABECALHO' )
// RELACIONA OS BOXES COM AS ESTRUTURAS VISUAIS
oView:SetOwnerView("VIEW_ZB1", "CABESQ")
oView:SetOwnerView("VIEW_ZB2", "MACHO")
oView:SetOwnerView('VIEW_TOT_ZB2','MACHOTOTAL')
oView:SetOwnerView("VIEW_ZB3", "FEMEA")
oView:SetOwnerView('VIEW_TOT_ZB3','FEMEATOTAL')
// DEFINE AUTO-INCREMENTO AO CAMPO
//oView:AddIncrementField("VIEW_ZB2", "ZB2_PRODUT")
// Acrescenta um objeto externo ao View do MVC
oView:AddOtherObject("VIEW_CAB", {|oPanel| CABEXT(oPanel)})
oView:SetCloseOnOk( { || .T. }) //Fecha a Tela ao confirmar
// Associa ao box que ira exibir os outros objetos
oView:SetOwnerView('VIEW_CAB','CABDIR')
// DEFINE OS TÍTULOS DAS SUBVIEWS
oView:EnableTitleView("VIEW_ZB2","Macho")
oView:EnableTitleView("VIEW_ZB3","Femea")
Return (oView)
Aqui você cria o botão:
Static Function CABEXT(oPanel)
Local oView := FWViewActive()
Local oModel := FWModelActive()
Local oFont8N := TFONT():New("ARIAL",08,-11,,.T.,,,,.T.,.F.) ///Fonte 8 Negrito
if oModel:GetOperation() > 1
SetKey(VK_F5, {|| IncGrid(1)})
Endif
SX3->(DbSetOrder(2))
if ValType(oScrSco) == "U"
oScrSco:= TScrollBox():Create(oPanel,01,01,oPanel:nClientHeight - 40,oPanel:nClientWidth / 2,.F.,.T.,.F.)
oScrSco:Align := CONTROL_ALIGN_ALLCLIENT
Endif
oPanel1 := oPanel
oView:Refresh()
oBtn := TButton():New( 007, 007, "Calcular(F5)",oScrSco,{||IncGrid(1)}, 40,30,,,.F.,.T.,.F.,,.F.,,,.F. )
//Cria CSS Defualt para os Botoes
cCSSBtn1 := " QPushButton {"
cCSSBtn1 += " background-color: rgb(255, 40, 20);"
cCSSBtn1 += " border-style: outset; "
cCSSBtn1 += " border-width: 1px;"
cCSSBtn1 += " border-color: black;"
cCSSBtn1 += " border-radius: 10px;"
cCSSBtn1 += " font-weight: bold;"
cCSSBtn1 += " }"
oBtn:setCSS(cCSSBtn1)
oBtn:Refresh()
Return
Ignora as ZB2 e ZB3 para facilitar seu entendimento, mas dessa forma você consegue montar um botão separado
Bah! Muito obrigado, vou testar.
— charlesreitz 29 de Jul de 2020Sem problemas, caso seja isso ai deixa o feedback para o pessoal e na resposta! Abraço!
— Maike Ramos de Oliveira 29 de Jul de 2020