Boa tarde Mario.
A função que uso atualmente é exatamente igual a baixado do site, segue abaixo
*****************************
FUNCTION WVW_Paint( nWinNum )
*****************************
Local i_P:=0
If Len( p_aListObjects ) >= nWinNum+1 .And. nWinNum > 0
aeval( p_aListObjects[nWinNum+1], {|e| eval( e, nWinNum )} )
EndIf
Return 0
********************************
FUNCTION ResetObjects( nWinNum ) //esta correta com o exemplo wvwtest9
********************************
while len( p_aListObjects ) < nWinNum+1
aadd( p_aListObjects, {} )
enddo
p_aListObjects[ nWinNum+1 ] := {}
RETURN .T.
//
// FUNCAO : AddObjects()
// PARAMETROS : nWindow - N§ da janela para indentificacao
// bAction - Codigo de bloco com a acao a ser realizada quando a
// janela voltar de ser minimizada ou voltar ao foco
// DESCRICAO : Guarda para cada janela as acoes que serao realizadas quando a
// a janela voltar ao foco ou voltar de ser minimizada
// RETORNO :
//
***************************************
FUNCTION AddObjects( nWinNum, bAction) //esta correta com o exemplo wvwtest9
//nWinNum = janela atual ncurwindow
//bAction = função a ser executada wvw_
//bnameObj = nome do objeto
***************************************
aadd( p_aListObjects[ nWinNum+1 ], bAction)
RETURN bAction
No entanto esta função faz com que a tela fique piscando, ou seja, mostra todos os objetos inclusive os repassados que é o meu caso.
Neste caso abaixo por exemplo,é apenas uma função que mostra os valores dos cálculos sendo adicionado itens ao pedido, a função NEWSHOWLABEL() é a função que mostra da forma como passo os parametros, usando a função da gtwvw() a qual recebe a os parametros e desenha a tela com a função AddObjects()
AddObjects(nCurWindow,{|nWindow| wvw_drawlabel( nWindow,nTop,nPos,nTxt,nTipe,,nFrente,nFundo,nLet,nF-o_wvwFR,nL-o_wvwLR,500,PROOF_QUALITY,.T.,,)})
Function NewMostraValor(aLucro,aCusto,aQteReal,aVrVenda,aDesconto,aVenda)
Local WReg:=RecNo(),aB:=0,xCom:=0
wVrCusto:=wM_LUCRO:=wVrTotal:=LValorC:=LValorCB:=LValorVV:=LValorBV:=LValorVB:=LValorBB:=w_ITENS:=w_COM:=w_COMb:=0 //zerar os valores para somar novamente
DbGoTop()
While !Eof()
w_ITENS++
If Left(COD_MERC,2)#"99"
aB:=(((Round(&aVenda.,3)/&aQteReal)/&aCusto.)-1)*100
xValorBB:=Round(&aVrVenda.,3)*100/(100-&aDesconto.)
xCom :=Round(&aVrVenda.*(COMISSAO/100),2)
If ChecaBasico(aB)
LValorBB:=Round(LValorBB+If(TIPO=="V",xValorBB,-xValorBB),3)
LValorVB:=Round(LValorVB+If(TIPO=="V",&aVrVenda.,-(&aVrVenda.)),3)
w_COMb :=Round(w_COMb+If(TIPO=="V",xCom,-(xCom)),2)
w_COM :=Round(w_COM +If(TIPO=="V",xCom,-(xCom)),2)
LValorCB:=If(TIPO=="V",Round(LValorCB+(&aQteReal.*&aCusto.),3),Round(LValorCB-(&aQteReal.*&aCusto.),3))
Else
LValorBV:=Round(LValorBV+If(TIPO=="V",xValorBB,-xValorBB),3)
LValorVV:=Round(LValorVV+If(TIPO=="V",&aVrVenda.,-(&aVrVenda.)),3)
w_COM :=Round(w_COM+If(TIPO=="V",xCom,-(xCom)),2)
EndIf
LValorC:=If(TIPO=="V",Round(LValorC+(&aQteReal.*&aCusto.),3),Round(LValorC-(&aQteReal.*&aCusto.),3))
EndIf
wVrTotal:=wVrTotal+If(TIPO=="V",(&aVrVenda.),-(&aVrVenda.))
p_DV:=If(TIPO=="D",TIPO,p_DV)
DbSkip(1)
End
DbGoTop()
wVrCusto :=LValorC
w_BASICO :=Round(If(LValorVB+LValorBB#0,100-((LValorVB/LValorBB)*100),0),4)
w_BASICON :=Round(If(LValorVV+LValorBV#0,100-((LValorVV/LValorBV)*100),0),4)
w_MARGEM :=Round(((wVrTotal-LValorC)*100)/wVrTotal,3)
w_MLUCRO :=Round(((wVrTotal/LValorC)*100)-100,2)
If w_CShow=.T.
NewShowLabel(jR-4,02,MV_C(w_MLUCRO,7) ,"ESQUERDA","PRETO" ,24,10,jR-4,08,If(w_MARGEM<wE_LM,p_CR,If(w_MARGEM>wE_LM,p_CB,p_CM)))
NewShowLabel(jR-4,10,MV_C(wVrCUSTO,10) ,"ESQUERDA","VERMELHO",24,10,jR-4,20,"AMARELO")
NewShowLabel(jR-4,21,TransForm(w_MARGEM,"@E 999.999%"),"ESQUERDA","PRETO" ,24,10,jR-4,29,If(w_MARGEM<wE_LM,p_CR,If(w_MARGEM>wE_LM,p_CB,p_CM)))
NewShowLabel(jR-4,30,TransForm(w_COM ,"@E 9999.99") ,"ESQUERDA","AZUL" ,24,10,jR-4,35,"AMARELO")
Else
NewShowLabel(jR-4,02,Space(35),"ESQUERDA","AZUL" ,24,10,jR-4,36,"AMARELO")
EndIf
NewShowLabel(jR-4,38,TransForm(w_ITENS ,"@E 9999") ,"ESQUERDA","AZUL" ,24,10,jR-4,41,"AMARELO")
NewShowLabel(jR-4,43,TransForm(w_BASICO ,"@E 9999.9999%"),"ESQUERDA","VERMELHO",24,10,jR-4,52,"AMARELO")
NewShowLabel(jR-4,54,TransForm(w_BASICON,"@E 9999.9999%"),"ESQUERDA","VERMELHO",24,10,jR-4,63,"AMARELO")
NewShowLabel(jR-4,jC-14,TransForm(Round(wVrTotal,2),"@E 999,999,999.99"),"ESQUERDA",If(wVrTotal<0,"VERMELHO","VERDE"),24,10,jR-4,jC-2,"AMARELO")
Aà eu pergunto, porque a função esta repassando novamente todos os objetos desenhados anteriormente, claro que precisa ser redesenhada a tela toda, exemplo:
//escolho o cliente
showlabel("nome") // desenho uma vez apenas e é reapresentado pela wvw_paint() ao restaurar a tela.
//adciono itens
showlabel("valortotaltantoagora") //desenho o valor total do pedido e é reapresentado pela wvw_paint()
//adciono outro item e começa os problemas.
showlabel("valortotaltantoagora") //desenho o valor total do pedido e é reapresentado pela wvw_paint(), mas mostra o valor da de cima primeiro, ou seja,
de estava 280,00 e agora ficou 350,00, vai mostrar rapidamente na piscada de tela o valor 280,00 e o ultimo 350,00 e assim por diante, aà imaginei se houve algo que desse para colocar no lugar da addobjects() para ela saber qual objeto é e que se deve incluir na lista ou atualizar um da lista, algo assim.
Confesso que não consegui exito ao detalhar a variavel que recebe a lista de objetos, consegui colocar um nome a cada objeto por exemplo "valortotal", só não consegui localizar e atualizar ele na lista.
aadd( p_aListObjects[ nWinNum+1 ] ,{bNameObj, bAction} ) //onde bnameobj eu coloquei o nome fixo do objeto, agora preciso ao repassar o desenho ele localize este objeto e atualize o baction, aà eu não consegui ainda, se acaso alguem conseguir imaginar algo eu imagino que o redesenho será apenas dos objetos da tela e não haveria os duplicados.
Grato por enquanto.
:)Pos