Uma alternativa é você utilizar a MsDialog. Aqui um exemplo bem simples:
static function altPesag()
Local oDlg
Local aH := {}
local nI
Local cV := 'AlwaysTrue'
local aCpos := {}
local aRet := {}
local aCampos := {'ZZD_QTDPES', 'ZZD_SOLVEN', 'ZZD_PRCDIL', 'ZZD_QTDDIL'}
aAdd(aCpos, {"ZZD_COMPO"})
aAdd(aCpos, {"ZZD_DSCOMP"})
aAdd(aCpos, {"ZZD_PERCEN"})
aAdd(aCpos, {"ZZD_QTDCPO"})
aAdd(aCpos, {"ZZD_QTDPES"})
aAdd(aCpos, {"ZZD_SOLVEN"})
aAdd(aCpos, {"ZZD_PRCDIL"})
aAdd(aCpos, {"ZZD_QTDDIL"})
For nI := 1 to len(aCpos)
Posicione("SX3",2,aCpos[nI,1],"")
SX3->(AADD(aH,{Trim(X3Titulo()),X3_CAMPO,X3_PICTURE,X3_TAMANHO,X3_DECIMAL,X3_VALID,"",X3_TIPO,"","" }))
Next nI
Define MsDialog oDlg From 0,0 to 294,1000 Pixel Title "Informe o Peso"
oBrw := MsNewGetDados():New(0,0,200,500,3,cV,cV,,aCampos,0,9999999,cV,cV,cV,oDlg,aH,aDados)
@ 130,001 Button "OK" Size 40,15 of oDlg Pixel Action (aRet:=tudoOK(oBrw), oDlg:End())
@ 130,045 Button "Pesar" Size 40,15 of oDlg Pixel Action (aRet:=buscaPeso(oBrw))
Activate MsDialog oDlg Centered
return aRet
Com esse fonte eu abro uma tela para a pessoa realizar uma pesagem e faço todas as validações dentro dos botões.
Este outro eu uso um FwBrowse dentro de um MsDialog:
If Len(aDados) > 0
DEFINE MsDialog oDlg Title "Importação de Metas" From 000, 000 To aTamanho[6], aTamanho[5] Pixel
If Type("oBrwMeta") == "O"
oBrwMeta:DeActivate( .T. )
EndIf
oBrwMeta:= FWBrowse():New(oDlg)
oBrwMeta:SetDataArray()
oBrwMeta:SetArray(aDados)
oBrwMeta:DisableSeek()
oBrwMeta:DisableReport()
oBrwMeta:DisableSaveConfig()
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(1) + "]}") Title "competencia" Size AvSx3("Z13_COMPET" , EB_TAMANHO) Picture X3Picture("Z13_COMPET") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(2) + "]}") Title "cod_representante" Size AvSx3("Z13_VEND" , EB_TAMANHO) Picture X3Picture("Z13_VEND") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(3) + "]}") Title "razao_social_representante" Size AvSx3("A3_NOME" , EB_TAMANHO) Picture X3Picture("A3_NOME") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(4) + "]}") Title "cod_tamanho_relatorios" Size AvSx3("Z13_GRUPO" , EB_TAMANHO) Picture X3Picture("Z13_GRUPO") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(5) + "]}") Title "tamanho_relatorios" Size AvSx3("BM_DESC" , EB_TAMANHO) Picture X3Picture("BM_DESC") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(6) + "]}") Title "cod_produto" Size AvSx3("Z13_PRODUT" , EB_TAMANHO) Picture X3Picture("Z13_PRODUT") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(7) + "]}") Title "desc_produto" Size AvSx3("B1_DESC" , EB_TAMANHO) Picture X3Picture("B1_DESC") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(8) + "]}") Title "meta_qtdade" Size AvSx3("Z13_QUANT" , EB_TAMANHO) Picture X3Picture("Z13_QUANT") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(9) + "]}") Title "corr_meta_m2" Size AvSx3("Z13_QUANT2" , EB_TAMANHO) Picture X3Picture("Z13_QUANT2") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(10) + "]}") Title "prd_processo" Size AvSx3("Z13_VIA" , EB_TAMANHO) Picture X3Picture("Z13_VIA") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(11) + "]}") Title "prd_processo_desc" Size AvSx3("Z08_DESCRI" , EB_TAMANHO) Picture X3Picture("Z08_DESCRI") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(12) + "]}") Title "cod_marca" Size AvSx3("Z13_MARCA" , EB_TAMANHO) Picture X3Picture("Z13_MARCA") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(13) + "]}") Title "desc_marca" Size AvSx3("Z10_DESCRI" , EB_TAMANHO) Picture X3Picture("Z10_DESCRI") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(14) + "]}") Title "meta_valor" Size AvSx3("Z13_VLMALV" , EB_TAMANHO) Picture X3Picture("Z13_VLMALV") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(15) + "]}") Title "tipo_cliente" Size AvSx3("Z13_TIPOCL" , EB_TAMANHO) Picture X3Picture("Z13_TIPOCL") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(16) + "]}") Title "grupo_societario" Size AvSx3("Z13_GRPSOC" , EB_TAMANHO) Picture X3Picture("Z13_GRPSOC") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(17) + "]}") Title "desc_grupo" Size AvSx3("AGT_DESCRI" , EB_TAMANHO) Picture X3Picture("AGT_DESCRI") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(18) + "]}") Title "status" Size AvSx3("Z13_STATUS" , EB_TAMANHO) Picture X3Picture("Z13_STATUS") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(19) + "]}") Title "cod_gerente" Size AvSx3("Z13_CODGER" , EB_TAMANHO) Picture X3Picture("Z13_CODGER") Of oBrwMeta
Add Column oColumn Data &("{|| aDados[oBrwMeta:nAt][" + Str(20) + "]}") Title "razao_social_gerente" Size AvSx3("Z13_NOMGER" , EB_TAMANHO) Picture X3Picture("Z13_NOMGER") Of oBrwMeta
oBrwMeta:Activate()
ACTIVATE MSDIALOG oDlg ON INIT ENCHOICEBAR(oDlg,bOK,bCancel,,,,,,,.F.) CENTERED
else
MsgStop("Não encontrado dados para processamento.","Atenção")
EndIf
dentro da função SetArray eu mando um array com os dados que eu preciso que sejam preenchidos.
Há muitas formas de criar uma tela com as suas necessidades, basta você criar a função dentro do Outras Ações.
Quando finalizar retorne aqui para nós como você usou.
Na verdade vc deve criar uma tela de modo: pop-up. A forma mais facil é você desenhar está tela no GAIA e chama ela por esse botão.
— Lucas de Paulo Santos 10 de Apr de 2024