Imagem Desaparece com gtwvw
Moderador: Moderadores
-
infosys2
- Usuário Nível 1

- Mensagens: 23
- Registrado em: 10 Out 2008 06:36
- Localização: Sao Pulo
- Contato:
Imagem Desaparece com gtwvw
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.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Imagem Desaparece com gtwvw
xHarbour.org + Hwgui + PostgreSql
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Imagem Desaparece com gtwvw
Código: Selecionar todos
rstobj(wvw_nnumwindows()-1)
addobj(wvw_nnumwindows()-1,{|j|wvw_drawimage(j,00,00,04,99,"SuaImagem.jpg",.t.)})
-
infosys2
- Usuário Nível 1

- Mensagens: 23
- Registrado em: 10 Out 2008 06:36
- Localização: Sao Pulo
- Contato:
Re: Imagem Desaparece com gtwvw
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-------------------------------
Nota de Moderação (Toledo): mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f21
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Re: Imagem Desaparece com gtwvw
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

- Mensagens: 472
- Registrado em: 12 Jul 2005 16:53
- Localização: Cianorte-Paraná
- Contato:
Re: Imagem Desaparece com gtwvw
É 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
Código: Selecionar todos
AddObjects(p_alistobjects,{|nWind|wvw_drawimage(nWind,...)})
-
leandrolinauer
- Usuário Nível 3

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

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
Imagem Desaparece com gtwvw
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
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")
//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
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Imagem Desaparece com gtwvw
Código: Selecionar todos
public meusobjetos := {}Código: Selecionar todos
Function addmeusobj(qvetobj)
aadd(meusobjetos,qvetobj)
executaobjetos(len(meusobjetos))
return nilCó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
Código: Selecionar todos
//--->
Function wvw_paint(minhajanela)
local ctvetor := 1
while ctvetor <= len(meusobjetos)
executaobjetos(ctvetor)
ctvetor++
endCó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 nilexemplos:
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 )')
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')
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-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
Imagem Desaparece com gtwvw
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
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Imagem Desaparece com gtwvw
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 )')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
Daí quando eu saio daquela procedure que entrei, eu faço:
Código: Selecionar todos
delemeusobj('telacompra')
Mário
-:]
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Imagem Desaparece com gtwvw
no meu caso eu faria:se algum objeto valor que é atualizado ele não desenha mais o valor antigo apenas o ultimo valor?
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 } )
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

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
Imagem Desaparece com gtwvw
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.
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.
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.
vou mostrar o valor total
Código: Selecionar todos
NewShowLabel(linha,coluna,wvrtotal,"ESQUERDA","VERMELHO",24,10,linha,coluna,"AMARELO",,"WVRTOTAL")
Caso alguem se interessar e alterar, poste modificações para auxilio a todos.
Grato pela ajuda de todos.
Um Harbraço a todos.
:xau
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Imagem Desaparece com gtwvw
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