Imagem Desaparece com gtwvw

Outras bibliotecas visuais e IDEs para Harbour/xHarbour (xHGTK/HbWxW/GtWvT/GtWvW/WvWtools.etc)

Moderador: Moderadores

infosys2
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 10 Out 2008 06:36
Localização: Sao Pulo
Contato:

Imagem Desaparece com gtwvw

Mensagem 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.
Clipper, xHarbour, gtwvw, wvwtools, fivewin
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Imagem Desaparece com gtwvw

Mensagem por sygecom »

Se não me engano a WVWTOOLS faz isso automaticamente, tente fazer um teste com ela, é uma extenção da WVW
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Re: Imagem Desaparece com gtwvw

Mensagem por TerraSoftware »

Eu faço da seguinte forma:

Código: Selecionar todos

   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.
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
infosys2
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 10 Out 2008 06:36
Localização: Sao Pulo
Contato:

Re: Imagem Desaparece com gtwvw

Mensagem 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:

Código: Selecionar todos

//////////////////////////////////////////////////////////////////
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
Clipper, xHarbour, gtwvw, wvwtools, fivewin
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Re: Imagem Desaparece com gtwvw

Mensagem por Mário Isa »

eu tentei o exemplo do colega Terra Software

Código: Selecionar todos

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
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Re: Imagem Desaparece com gtwvw

Mensagem por anacatacombs »

Meu caro:
É um conjunto de funções:

Código: Selecionar todos


******************************
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:

Código: Selecionar todos


AddObjects(p_alistobjects,{|nWind|wvw_drawimage(nWind,...)})
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Imagem Desaparece com gtwvw

Mensagem 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.

-:]
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Imagem Desaparece com gtwvw

Mensagem por Mário Isa »

coloque a sua função aki prá gente ver....
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Imagem Desaparece com gtwvw

Mensagem por leandrolinauer »

Boa tarde Mario.
A função que uso atualmente é exatamente igual a baixado do site, segue abaixo

Código: Selecionar todos


*****************************
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.,,)})

Código: Selecionar todos

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
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Imagem Desaparece com gtwvw

Mensagem por Mário Isa »

segue a minha função como consegui fazer:

Código: Selecionar todos

public meusobjetos := {}
a função addmeusobj

Código: Selecionar todos

Function addmeusobj(qvetobj)



aadd(meusobjetos,qvetobj)


executaobjetos(len(meusobjetos))

return nil
a função executaobjetos

Código: Selecionar todos

//--->
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

Código: Selecionar todos

//--->
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

Código: Selecionar todos

//--->
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:

Código: Selecionar todos

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.

Código: Selecionar todos

delemeusobj('dbedit-'+procname())
delemeusobj('telacompra')
E, finalmente, a função deletavetor

Código: Selecionar todos

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
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Imagem Desaparece com gtwvw

Mensagem 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
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Imagem Desaparece com gtwvw

Mensagem 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:

Código: Selecionar todos

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:

Código: Selecionar todos

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:

Código: Selecionar todos

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

Mário
-:]
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Imagem Desaparece com gtwvw

Mensagem 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

Código: Selecionar todos

   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:

Código: Selecionar todos

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 } )

:%
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Imagem Desaparece com gtwvw

Mensagem 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

Código: Selecionar todos

//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()

Código: Selecionar todos

//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.

Código: Selecionar todos

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

Código: Selecionar todos


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
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Imagem Desaparece com gtwvw

Mensagem 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
Responder