Clipper On Line • Ver Tópico - Imagem Desaparece com gtwvw
Página 1 de 2

Imagem Desaparece com gtwvw

MensagemEnviado: 16 Out 2008 13:52
por infosys2
Sempre que a tela é minimizada a imagem desaparece, Verifiquei que existe a necessidade de redesenhar a tela e, que as funções da GTWVW que precisam do suporte para redesenho são :

WVW_DrawBoxGet()
WVW_DrawBoxRaised()
WVW_DrawBoxRecessed()
WVW_DrawBoxGroup()
WVW_DrawImage()
WVW_DrawLabel()

Porem não sei como fazer isto, se alguem pouder passar estas informacoes ficarei grato.

Re: Imagem Desaparece com gtwvw

MensagemEnviado: 20 Out 2008 13:13
por sygecom
Se não me engano a WVWTOOLS faz isso automaticamente, tente fazer um teste com ela, é uma extenção da WVW

Re: Imagem Desaparece com gtwvw

MensagemEnviado: 22 Out 2008 07:31
por TerraSoftware
Eu faço da seguinte forma:
   rstobj(wvw_nnumwindows()-1)
   addobj(wvw_nnumwindows()-1,{|j|wvw_drawimage(j,00,00,04,99,"SuaImagem.jpg",.t.)})


Isso depois que a janela ja esta desenhada.

Re: Imagem Desaparece com gtwvw

MensagemEnviado: 22 Out 2008 09:21
por infosys2
WVW_DrawBoxGet()
WVW_DrawBoxRaised()
WVW_DrawBoxRecessed()
WVW_DrawBoxGroup()
WVW_DrawImage()
WVW_DrawLabel()

As imagens destas funcoes desaparecem quando a janela é redesenhada. Para resolver este problema, existe a função wvw_paint. Ela é chamada sempre que uma janela é redesenhada, bastando chamar as funções de desenho das imagens de dentro da função wvw_paint, para que elas voltem à aparecer.

Exemplo:
//////////////////////////////////////////////////////////////////
FUNCTION main()
//////////////////////////////////////////////////////////////////
setcolor("N/W")
wvw_Paint( 0 )
wvw_nOpenWindow("Win2",10,10,19,69)
wvw_Paint( 1 )
wvw_nOpenWindow("Win3",15,15,19,69)
wvw_Paint( 2 )
do while inkey(0)<>27
enddo
wvw_lCloseWindow()
do while inkey(0)<>27
enddo
wvw_lCloseWindow()
do while inkey(0)<>27
enddo
return
///////////////////////////////
function wvw_Paint( nWinNum )
///////////////////////////////
do case
case nWinNum == 0
wvw_DrawLabel( nWinNum, 0, 0, "Win1", , , , , "Arial", 20, 18, , , , .f., .f., .f. )
case nWinNum == 1
wvw_DrawLabel( nWinNum, 0, 0, "Win2", , , , , "Arial", 20, 18, , , , .f., .f., .f. )
case nWinNum == 2
wvw_DrawLabel( nWinNum, 0, 0, "Win3", , , , , "Arial", 20, 18, , , , .f., .f., .f. )
endcase
return 0


Autor destas Dicas : Marcos Antonio Gambeta

-------------------------------
Nota de Moderação (Toledo): mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f21

Re: Imagem Desaparece com gtwvw

MensagemEnviado: 10 Jun 2010 21:45
por Mário Isa
eu tentei o exemplo do colega Terra Software

rstobj(wvw_nnumwindows()-1)
   addobj(wvw_nnumwindows()-1,{|j|wvw_drawimage(j,00,00,04,99,"SuaImagem.jpg",.t.)})


mas não deu certo /
disse q a função rstobj não existe no xharbour /

Mário

Re: Imagem Desaparece com gtwvw

MensagemEnviado: 11 Jun 2010 08:16
por anacatacombs
Meu caro:
É um conjunto de funções:


******************************
FUNCTION WVW_Paint( nWinNum )
******************************
if len(p_aListObjects) >= nWinNum+1
   aeval( p_aListObjects[nWinNum+1], {|e| eval( e, nWinNum )} )
endif
RETURN 0

***********************************
function ResetObjects( nWinNum )
***********************************
default nWinNum to WVW_nNumWindows()-1
do while len(p_aListObjects) < nWinNum+1
   aadd( p_aListobjects, {} )
enddo
p_aListObjects[ nWinNum+1 ] := {}
return .t.

*********************************************
function AddObjects( nWinNum, bAction )
*********************************************
aadd( p_aListObjects[ nWinNum+1 ], bAction )
return .t


Cada vez que for utilizar uma função que necessite de resedesenho:

AddObjects(p_alistobjects,{|nWind|wvw_drawimage(nWind,...)})

Imagem Desaparece com gtwvw

MensagemEnviado: 17 Mar 2014 11:17
por leandrolinauer
Bom dia caros colegas.
Estou com problemas com as funções de ADD e RESET objects, tive com problemas das imagens não serem redesenhadas mas ai fui apresentado a este modo de redesenho com add.
O problema é que fiquei com a tela piscando e não consegui eliminar o problema até hoje, alguém sabe como eliminar o redesenho de valores que não são mais uteis, por exemplo:
Tenho uma tela em que atualiza o valor de uma variável x, mas esta variável já estava com um valor antes por exemplo VALOR TOTAL 300,00, quando atualizo o valor para 320,00, o anterior tbem é redesenhado devido a lista de objetos da tela ser adcionado um novo valor com add, não posso dar um reset nela porque senão apaga os demais objetos que não foram alterados mas devem permanecer na tela, como o nome do produto.

Já tentei seguir a matriz de objetos para colocar algo como um nome fixo ao objeto da tela, assim ele ao invés de incluir um novo, seria atualizado, mas não obtive exito na proeza.

Caso alguém já tenha resolvido o problema e puder me auxiliar, fico grato.

-:]

Imagem Desaparece com gtwvw

MensagemEnviado: 17 Mar 2014 13:43
por Mário Isa
coloque a sua função aki prá gente ver....

Imagem Desaparece com gtwvw

MensagemEnviado: 17 Mar 2014 16:05
por leandrolinauer
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

Imagem Desaparece com gtwvw

MensagemEnviado: 17 Mar 2014 21:31
por Mário Isa
segue a minha função como consegui fazer:

public meusobjetos := {}


a função addmeusobj
Function addmeusobj(qvetobj)

aadd(meusobjetos,qvetobj)

executaobjetos(len(meusobjetos))

return nil


a função executaobjetos
//--->
Function executaobjetos(qual)

do case
case upper(meusobjetos[qual,2]) == 'WVW_DRAWBOXRAISED'
wvw_drawboxraised(meusobjetos[qual,3],meusobjetos[qual,4],meusobjetos[qual,5],meusobjetos[qual,6],meusobjetos[qual,7])
case upper(meusobjetos[qual,2]) == 'WVW_DRAWIMAGE'
wvw_drawimage(meusobjetos[qual,3],meusobjetos[qual,4],meusobjetos[qual,5],meusobjetos[qual,6],meusobjetos[qual,7],meusobjetos[qual,8])
case upper(meusobjetos[qual,2]) == 'WVW_DRAWLABEL'
wvw_drawlabel(meusobjetos[qual,3],meusobjetos[qual,4],meusobjetos[qual,5],meusobjetos[qual,6],meusobjetos[qual,7],meusobjetos[qual,8],meusobjetos[qual,9],meusobjetos[qual,10],meusobjetos[qual,11],meusobjetos[qual,12],meusobjetos[qual,13],meusobjetos[qual,14] )
endc
return nil


a função wvw_paint
//--->
Function wvw_paint(minhajanela)
local ctvetor := 1

while ctvetor <= len(meusobjetos)
executaobjetos(ctvetor)
ctvetor++
end


e quando eu não quero mais que objetos sejam desenhados a função deletameusobjetos
//--->
Function delemeusobj(o_q)
local ct_vetor := 1
local aonde

if ! '$' $ o_q
while AScan( meusobjetos, {|a| Upper(a[1]) == upper(o_q) } ) > 0
  aonde := AScan( meusobjetos, {|a| Upper(a[1]) == upper(o_q) } )
  meusobjetos := deletavetor(meusobjetos,aonde)
end
else
o_q := subs(o_q,2)
while AScan( meusobjetos, {|a| upper(o_q) $  Upper(a[1]) } ) > 0
  aonde := AScan( meusobjetos, {|a| Upper(a[1]) == upper(o_q) } )
  meusobjetos := deletavetor(meusobjetos,aonde)
end
end

return nil


Como eu invoco a função addmeusobj
exemplos:
addmeusobj({'telagetsys','wvw_drawimage',nil,__ab,__ac+__af,__ab+1,__ac+__af+2,7})
addmeusobj({'telacompra','wvw_drawimage',1,14,26,16,29,4}) //enter
addmeusobj({'telacompra','wvw_drawimage',1,14,33,16,40,5}) //esc
addmeusobj('WVW_DrawBoxRaised( , hwgui_li+1,hwgui_ci+1,hwgui_lf-1,hwgui_cf-1 )')


quando eu não quero mais que eles sejam redesenhados eu aplico
delemeusobj - tipo ao sair de uma rotina eu mando que eles não sejam mais redesenhados.
delemeusobj('dbedit-'+procname())
delemeusobj('telacompra')


E, finalmente, a função deletavetor
function deletavetor(vetor_del,n_position)
local __antigo := {}
local ct_vetor := 1

while ct_vetor <= len(vetor_del)
if ct_vetor == n_position
  ct_vetor++
  loop
end
aadd(__antigo,vetor_del[ct_vetor])
ct_vetor++
end

retu __antigo


Espero poder ter ajudado
:-o

Imagem Desaparece com gtwvw

MensagemEnviado: 18 Mar 2014 08:29
por leandrolinauer
Bom dia Mario.
Grato pelo seu exemplo, desta forma como você fez a tela não fica redesenhando objetos sem necessidades, se algum objeto valor que é atualizado ele não desenha mais o valor antigo apenas o ultimo valor?

Vou analisar, e ver se consigo aplicar na função genérica algo que possa tirar as duplicidades de objetos.

Grato
:D

Imagem Desaparece com gtwvw

MensagemEnviado: 18 Mar 2014 10:54
por Mário Isa
Sim Leandro,
pois eu deleto os objetos que não há mais necessidade.

Antes uma correção:
Ali onde eu dei exemplo do addmeusobj exclua aquele que diz:
addmeusobj('WVW_DrawBoxRaised( , hwgui_li+1,hwgui_ci+1,hwgui_lf-1,hwgui_cf-1 )')

pois é preciso ter um apelido para cada grupo de objetos

Tipo:
a) eu entro numa procedure das COMPRAS e ali eu faço:
addmeusobj({'telacompra','wvw_drawimage',1,14,26,16,29,4}) //enter
addmeusobj({'telacompra','wvw_drawimage',1,14,33,16,40,5}) //esc

onde telacompra é um apelido para um grupos de objetos

Daí quando eu saio daquela procedure que entrei, eu faço:
delemeusobj('telacompra')


E assim ele deleta aquele grupo de todos que eu apelidei de telacompra e não fica mais redesenhando.

Mário
-:]

Imagem Desaparece com gtwvw

MensagemEnviado: 18 Mar 2014 11:08
por Mário Isa
Leandro disse:
se algum objeto valor que é atualizado ele não desenha mais o valor antigo apenas o ultimo valor?


no meu caso eu faria:

tipo, na hora do primeiro valor a ser printado

   addmeusobj({'valorprint','WVW_DRAWLABEL' , 1,07,04,ltrim(transform(valor,@EZ 999,99')),nil  ,nil  , RGB(0,0,255),RGB(200,200,200),"Verdana",30,10,700 } )


depois, toda hora q o valor muda eu faço:

delemeusobj('valorprin')
addmeusobj({'valorprint','WVW_DRAWLABEL' , 1,07,04,ltrim(transform(valor,@EZ 999,99')),nil  ,nil  , RGB(0,0,255),RGB(200,200,200),"Verdana",30,10,700 } )


:%

Imagem Desaparece com gtwvw

MensagemEnviado: 05 Jun 2014 15:11
por leandrolinauer
Boa tarde a todos.
Após um tempo e vários testes, consegui eliminar o problema do redesenho dos objetos, segue abaixo como fiz.
Lembrando que usei a mesma função original que peguei no fórum, fiz apenas uma modificação para nomear os objetos, o processo esta detalhado para melhor compreensão, não adaptei para uma programação mais complexa e reduzida.

ADDOBJETOS
//Original
FUNCTION AddObjects( nWinNum, bAction) //esta correta com o exemplo wvwtest9
                 //nWinNum = janela atual ncurwindow
                 //bAction = função a ser executada wvw_
   aadd( p_aListObjects[ nWinNum+1 ], bAction)
RETURN .T.

//Modificada
FUNCTION AddObjects( nWinNum, bAction, bNameObj) //esta correta com o exemplo wvwtest9
                 //nWinNum = janela atual ncurwindow
                 //bAction = função a ser executada wvw_
           //bnameObj = nome do objeto
***************************************
bNameObj:=If(bNameObj=NIl,Str(nWinNum+1,2),bNameObj)
nOk=.F.
If Len(p_aListObjects) >= 1   //só entra se tiver objetos para redesenho
   iK:=1
   While iK <= Len(p_aListObjects) //corre a matriz e verifica o conteudo
        If Len(p_aListObjects[iK]) > 0
           iK2:=1
           While iK2 <= Len(p_aListObjects[iK])
                If !ChkSoNumero(p_aListObjects[iK,iK2][1]) .And. !ChkSoNumero(bNameObj)
               If p_aListObjects[iK,iK2][1] == bNameObj // se encontrou o objeto
                       p_aListObjects[ iK,iK2 ][2] := bAction  //substituiu a ação
                       nOk:=.T. //marca que encontrou
                   EndIf   
           EndIf
                iK2++
           End
        EndIf 
        iK++
   End
EndIf 
If nOK=.F. //se nao encontrado o objeto, cria novo
   Aadd( p_aListObjects[ nWinNum+1 ] ,{bNameObj, bAction} ) //adciona a janela ao nome do objeto mais a acao
EndIf

RETURN .T.


wvw_paint()

//ORIGINAL
FUNCTION WVW_Paint( nWinNum)
*****************************
   If Len( p_aListObjects ) >= nWinNum+1 .And. nWinNum > 0 //ver se soluciona
      aeval( p_aListObjects[nWinNum+1], {|e| eval( e, nWinNum )} )
   EndIf

RETURN .T.

//MODIFICADA
FUNCTION WVW_Paint( nWinNum)
*****************************
   If Len( p_aListObjects ) >= nWinNum+1 .And. nWinNum > 0 //ver se soluciona
      aeval( p_aListObjects[nWinNum+1], {|e| eval( e[2], nWinNum )} )
   EndIf
RETURN .T.



Quanto a ResetObjs, não precisou ser modificada, visto que ela apaga todos os objetos porque só uso para finalizar a tela.
Para usar basta chamar a função como o exemplo abaixo como eu uso.

NewShowLabel()
.....//uma parte do codigo apenas
AddObjects(nCurWindow,{|nWindow| wvw_drawlabel(   nWindow,nTop,nLft,nTxt,TA_LEFT,,nFrente,nFundo,"ARIAL",nF-o_wvwFR,nL-o_wvwLR,500,PROOF_QUALITY,.T.,,)},nObj)
.....
Return .t.


Onde nObj é o nome do objeto que passo na função, como eu criei uma função genérica para desenhos que chama o codigo acima, passo como parametro o nome do objeto, exemplo:
vou mostrar o valor total

NewShowLabel(linha,coluna,wvrtotal,"ESQUERDA","VERMELHO",24,10,linha,coluna,"AMARELO",,"WVRTOTAL")

Desta forma toda vez que altero o valor da variavel wvrtotal e redesenho, por esta função acima, ela vai com o nome wvrtotal indicando que este objeto se existir será substituido pelo novo valor eliminando assim varios objetos na mesma posição.

Caso alguem se interessar e alterar, poste modificações para auxilio a todos.
Grato pela ajuda de todos.
Um Harbraço a todos.
:xau

Imagem Desaparece com gtwvw

MensagemEnviado: 21 Ago 2018 16:12
por Mário Isa
Boa Tarde.
E aí Leandro ?
Ainda trabalhando com WVW ?

Meu problema é :
Quando minimizo a janela e, ao voltar a ela, seja por Mouse ou ALT+TAB o foco volta na janela principal e não na última aberta.

Você tb tem esse problema ??

Mário

Imagem Desaparece com gtwvw

MensagemEnviado: 25 Set 2018 11:17
por leandrolinauer
Bom dia, desculpe a demora.
Não tenho problema deste tipo não, só de vez enquando em alguns computadores a tela do programa congela.
Abaixo o modo que redesenho.
//adciona o objeto para redesenho
FUNCTION AddObjects( nWinNum, bAction, bNameObj)
                 //nWinNum = janela atual ncurwindow
                 //bAction = função a ser executada wvw_
      //bnameObj = nome do objeto, uso para que na matriz seja substituido pelo redesenho, para evitar repetir o redesenha tornando a tela lenta.
***************************************
   bNameObj:=If(bNameObj=NIl,Str(nWinNum+1,2),bNameObj)
   nOk=.F.
   If Len(p_aListObjects) >= 1 //.And. !Valtype(bNameObj) == "N"       //só entra se for nome de objeto
      iK:=1
      While iK <= Len(p_aListObjects) //corre a matriz e verifica o conteudo
        If Len(p_aListObjects[iK]) > 0
           iK2:=1
           While iK2 <= Len(p_aListObjects[iK])
             If !ChkSoNumero(p_aListObjects[iK,iK2][1]) .And. !ChkSoNumero(bNameObj)
                If p_aListObjects[iK,iK2][1] == bNameObj
                   p_aListObjects[ iK,iK2 ][2] := bAction
                   nOk:=.T.
                EndIf   
             EndIf
             iK2++
           End
        EndIf 
        iK++
      End
   EndIf 
   If nOK=.F.
       aadd( p_aListObjects[ nWinNum+1 ] ,{bNameObj, bAction} ) //adciona a janela ao nome do objeto mais a acao
   EndIf
RETURN .T.

//reseta o objeto
FUNCTION ResetObjects( nWinNum, bNameObj) //esta correta com o exemplo wvwtest9
   while len( p_aListObjects ) < nWinNum+1
         aadd( p_aListObjects, {} )
   enddo
   If bNameObj = NIl
      p_aListObjects[ nWinNum+1 ] := {}
   ElseIf Len(p_aListObjects) >= 1
      iK:=1
      While iK <= Len(p_aListObjects)
        If Len(p_aListObjects[iK]) > 0
           iK2:=1
           While iK2 <= Len(p_aListObjects[iK])
             If !ChkSoNumero(p_aListObjects[iK,iK2][1]) .And. !ChkSoNumero(bNameObj)
                If p_aListObjects[iK,iK2][1] == bNameObj
                   p_nPos:= Ascan(p_aListObjects, {|x| x[1] == p_aListObjects[iK,iK2][1] } )
                   hb_ADel( p_aListObjects, p_nPos ,.T. )             //deu certo, apaga o que nao quero mais para montar de novo evita redesenho
                EndIf   
             EndIf
             iK2++
           End
        EndIf 
        iK++
      End
   EndIf   
RETURN .T.
///pinta o objeto
FUNCTION WVW_Paint( nWinNum,nObjT )
Local i_P:=0
Local ctvetor := 1
   If Len( p_aListObjects ) >= nWinNum+1 .And. nWinNum > 0 //ver se soluciona
      aeval( p_aListObjects[nWinNum+1], {|e| eval( e[2], nWinNum )} )
   EndIf
Return .T.

///wvw_size

function WVW_SIZE(nWinNum, hWnd, message, wParam, lParam)
local cScreen
local lNeedReset := .f., ;
      maxsavedscrrow, maxsavedscrcol

   if !s_lSizeReady
      * program is not ready to handle window resizing
      * (or this function is currently running)
      return NIL
   endif
   if nWinNum<>0
      * only care about Main Window
      return NIL
   endif

   * avoid reentrance
   s_lSizeReady := .f.

   do case
      case wParam == 2 //SIZE_MAXIMIZED
         * reset is required only if we are changing size
         lNeedReset := maxcol() <> wvw_maxmaxcol();
                       .or. maxrow() <> wvw_maxmaxrow()

         if lNeedReset
            maxsavedscrrow := min(min(s_nNormalMaxrow, wvw_maxmaxrow()),maxrow())
            maxsavedscrcol := min(min(s_nNormalMaxcol, wvw_maxmaxcol()),maxcol())
            cScreen := savescreen(0,0,maxsavedscrrow, maxsavedscrcol)
            if setmode(wvw_maxmaxrow()+1, wvw_maxmaxcol()+1) //adjust maxrow() & maxcol()
               restscreen(0,0,maxsavedscrrow, maxsavedscrcol, cScreen)
            endif
         endif
      case wParam == 0 //SIZE_RESTORED
         lNeedReset := maxcol() <> s_nNormalMaxcol .or.;
                       maxrow() <> s_nNormalMaxrow
         if lNeedReset
            maxsavedscrrow := min(s_nNormalMaxrow, maxrow())
            maxsavedscrcol := min(s_nNormalMaxcol, maxcol())
            cScreen := savescreen(0,0,maxsavedscrrow, maxsavedscrcol)
            if setmode(s_nNormalMaxrow+1,s_nNormalMaxcol+1)
               restscreen(0,0,maxsavedscrrow, maxsavedscrcol, cScreen)
            endif
         endif
      otherwise
         * do nothing
   endcase

   * allow next call
   s_lSizeReady := .t.
return NIL

Abraços. :)Pos