O passo a passo:
No módulo de preços, acrescentei o pushbutton:
Na minha classe, responsável pelas telas, acrescentei qual seria o desenho:
Código: Selecionar todos
CASE cCaption == "<Z>Analisa" ; cSource := "cmdAnalisa"; cTooltip := "Z Análise das informações"
No resource, acrescentei o desenho:
Tela resolvida.
Depois disso, foi só acrescentar a rotina, que por usar a classe responsável por telas, só acrescentar em UserFunction():
Código: Selecionar todos
METHOD UserFunction( lProcessou ) CLASS JPPRECOClass
...
CASE ::cOpc == "Z"
RunModule( "PNOTARELCOMPCLI", "COMPARATIVO", jpcadas->cdCodigo )
E de adicional, no comparativo de vendas, assumir o parâmetro e fazer o serviço.
Código: Selecionar todos
IF PCount() != 0
mCliente := mCodCli
Imprime( mCliente, "S" )
CLOSE DATABASES
RETURN
ENDIF
Ah sim... o problema de multithread não estar sendo usado no cliente.....
Resolvi assim, acrescentando um pCount() na função RunMode(), que abre módulos:
Código: Selecionar todos
IF AppIsMultiThread() .OR. pCount() > 2
GTSetupFont( .T. )
hb_ThreadStart( { || DoPrg( cModule, cTitulo, p1, p2, p3 ) } )
Agora a multithread SEMPRE vale pra módulos extras, estando habilitada ou não (no aplicativo).
É por isso que eu acho interessante multithread, nenhum controle extra pra DBF.
TUDO do aplicativo fica disponível a qualquer instante.
Posso acrescentar essas mesmas chamadas no cadastro de clientes, pedidos, financeiro, etc.
O único "problema" agora é pensar no limite de letras do alfabeto.
Aproveitando:
É isso que chamo de simplificar fontes.
Os fontes de trabalho estão sempre fáceis de mexer.