Página 1 de 2
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 16 Jun 2023 19:09
por Abel
Ola pessoal,
uma api do whatsapp que estou usando me devolve um endereço com a imagem do perfil no whatsapp
exemplo:
https://pps.whatsapp.net/v/t61.24694-24 ... e=6499E5B5
agora como eu exibo a imagem desse endereco no harbour ?
se alguem puder me ajudar
desde ja agradeço.
ABEL
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 16 Jun 2023 20:16
por JoséQuintas
renomeei pra PNG e o Windows mostrou, mas na hora de postar aqui, o fórum reclamou que foi detectado JPG com extensão inválida.
Não sei se vai ser sempre JPG.
A partir daí, qualquer lib que mostre JPG.
Por exemplo, GTWVG.
E aceitou o nome com extensão original.
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 16 Jun 2023 20:35
por Abel
JoseQuintas,
como vc conseguiu fazer o download pelo harbour gerando o arquivo file.enc ?
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 16 Jun 2023 21:26
por Abel
Josequintas,
tambem nao consegui usar a wvt_drawimage em um jpg ja salvo.
complila sem dar erro, mas quando o programa abre, ela ja da erro
"programa.exe parou de funcionar" e fecha
sera que ta faltando alguma lib na compilacao ?
tentei tambem com wvg_image tambem sem sucesso.
ABEL
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 17 Jun 2023 03:03
por JoséQuintas
Código: Selecionar todos
#include "inkey.ch"
#include "directry.ch"
#include "hbgtinfo.ch"
REQUEST HB_CODEPAGE_PTISO
PROCEDURE Main
SET EVENTMASK TO INKEY_ALL - INKEY_MOVE
Set( _SET_CODEPAGE, "PTISO" )
SetMode(36,132)
SetColor( "W/B" )
CLS
wvt_DrawImage( 5, 5, 10, 20, "file.enc" )
INkey(0)
RETURN
PROCEDURE HB_GTSYS
REQUEST HB_GT_WVG_DEFAULT
RETURN
É importante primeiro criar a janela, isso é feito no CLS.
O download poderia ser hbtip ou xmlhttp da microsoft.
Nem considerei essa parte importante, porque download é coisa comum.
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 19 Jun 2023 20:35
por Abel
JoseQuintas,
acho q estou com um problema sério de algumas definicoes
e gerando conflitos entre wvg x wvt
veja como esta o inicio do meu programa principal
#include "hbgtinfo.ch"
#include "hbcompat.ch"
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_GT_WVT
REQUEST HB_GT_WGU
REQUEST HB_GT_WVG
FUNCTION MAIN( )
clear
.....
MINHA HB_GTSYS esta assim:
Function HB_GTSYS()
REQUEST HB_GT_WVT_DEFAULT
REQUEST HB_GT_WIN
//
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
Return NIL
nao sei se devo colocar todos os REQUEST que estao no inicio do programa dentro da hb_gtsys()
se eu colocar HB_GT_WVG_DEFAULT na HB_GTSYS ele compila mas da erro ao abrir o exe "programa.exe parou de funcionar"
se eu tirar o HB_GT_WVT_DEFAULT da HB_GTSYS da erro nesse comando HB_GTINFO(HB_GTI_MAXIMIZED) argument error
Desde ja agradeço,
ABEL
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 19 Jun 2023 21:14
por JoséQuintas
Se não vai de um jeito, vai de outro, com ou sem multithread:
Código: Selecionar todos
PROCEDURE JanelaWvg()
hb_ThreadStart( { || test() } )
RETURN
PROCEDURE Test
hb_gtReload( "WVG" )
SetMode(36,132)
SetColor( "W/B" )
CLS
wvt_DrawImage( 5, 5, 10, 20, "file.enc" )
INkey(0)
Tente também direto na janela WVT pra ver se vai, já que a função é wvt_, e sugere poder ser usada na wvt_.
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 19 Jun 2023 21:39
por Jairo Maia
Abel escreveu:#include "hbgtinfo.ch"
#include "hbcompat.ch"
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_GT_WVT
REQUEST HB_GT_WGU
REQUEST HB_GT_WVG
Quando você usa REQUEST, todas as funções necessárias são agregadas a seu programa, e se você não as usa, elas se tornam "peso morto". É diferente de uma função em determinado .PRG que não é usada, então ela não é compilada, já chamndo pelo REQUEST elas são agregadas ao sistema.
Acho que você poderia deixar esse início apenas assim:
Código: Selecionar todos
#include "hbgtinfo.ch"
#include "hbcompat.ch"
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_GT_WVG // deixe somente o driver GT que vai usar...
FUNCTION MAIN( )
clear
.....
Abel escreveu:MINHA HB_GTSYS esta assim:
Deixe sua HB_GTSYS() apenas como o José sugeriu:
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 19 Jun 2023 22:40
por JoséQuintas
Não Jairo, não fiz a sugestão, apenas mostrei um fonte pra montar o desenho, eu nem sabia o que ele usava.
Ele já mencionou que WVG dá erro para o que usa.
GTWVG - pra usar tela WVG
GTWVT - pra usar tela WVT
GTWGU - pra usar DIALOG da GTWVG, seria comportamento GUI
GTWIN - pra usar tela console, console mesmo, nem GTWVG nem GTWVT precisam dela, talvez pra forçar a errorsys modo console.
Cada GT vai usar sua própria janela, não é porque indicou que a janela vai aceitar tudo de uma vez.
GT_XXX_DEFAULT vai ser a padrão, chamada logo no início, como ponto de partida.
As outras, só se fizer uso de hb_gtReload() ou hb_gtLoad(), senão, não está usando pra nada, a não ser ocupar espaço no EXE, como o Jairo já mencionou.
Só lembrando: compilar com -mt pra multithread.
Acho que tem um comando pra maximizar tela, não precisa ser hb_gtInfo(), se for esse o motivo do travamento.
Detalhe: pra maximizar a janela, primeiro a janela precisa existir. Será que está na ordem certa?
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 19 Jun 2023 23:07
por Jairo Maia
JoséQuintas escreveu:Acho que tem um comando pra maximizar tela, não precisa ser hb_gtInfo(), se for esse o motivo do travamento.
Não José, o travamento dele está ocorrendo pelo conflito de dois drivers GT "conflitantes entre si". Deve-se escolher qual GT usar e usar tudo por esse driver, não misturar GTs, até porque não tem porque isso, mas se ele deseja isso (e não entendo a razão) deve-se tornar a GT a usar em determinado ponto a Default, e ao sair voltar a outra, e etc...
Ele está configurando um GT Default, e aqui estáo motivo do travamento (programa parou de funcionar):
REQUEST HB_GT_WVT_DEFAULT
REQUEST HB_GT_WIN
Ou usa a GT_WIN, ou usa a GT_WVT. Elas não conversam entre si. Ou ao tentar usar um comando da GT_WIN, torne a GT_WIN a DEFAULT, o programa para de funcionar se o DEFAULT é GT_WVT e tenta usar um comando da GT_WIN ou da GT_WVG.
Por isso acho melhor usar apenas uma, e fazer tudo com a escolhida.
OBS: No caso dele não serve a GT_WVT, ela não exibe figura. Ou ele usa a GT_WVG ou a GT_WIN para exibir figura.
OBS1: Sugiro o uso da GT_WVG, por ser a mais popular, e ter mais usuários dela facilitando a troca de experiências...
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 20 Jun 2023 13:43
por carlaoonline
Boa tarde!
... pegando uma carona :
JoséQuintas escreveu: hb_gtReload( "WVG" )
Isso é pq é uma nova janela multihread?
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 20 Jun 2023 13:47
por JoséQuintas
Isso cria uma nova janela, se não usar multithread a anterior fica aberta mas bloqueada, aguardando o término da atual.
hb_gtReload( "WVT" ), hb_gtReload( "WVG" ), hb_gtReload( "GTK" )
Correção: isso PREPARA pra usar outra janela.
A janela só vai ser criada se fizer @ say, CLS, etc.
Senão, pelo menos GTWVG, trabalha sem janela até mostrar alguma coisa.
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 20 Jun 2023 13:56
por JoséQuintas
Tem uma coisa interessante nisso:
Uso isso com HWGUI, substituindo GTGUI por GTWVG.
A GTWVG não precisa aparecer, assim como acontece com GTGUI.
GUI geralmente bloqueia o processo atual, então, usando isso entrego um processo novo só pra ela.
GTGUI não aceita multithread, mas GTWVG sim.
E assim, tudo convive funcionando junto.
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 20 Jun 2023 14:21
por JoséQuintas
Código: Selecionar todos
#include "inkey.ch"
#include "hbgtinfo.ch"
REQUEST HB_CODEPAGE_PTISO
PROCEDURE Main
LOCAL a := 10, GetList := {}
SET EVENTMASK TO INKEY_ALL - INKEY_MOVE
Set( _SET_CODEPAGE, "PTISO" )
SetMode(36,132)
SetColor( "W/B" )
CLS
@ 1, 0 SAY hb_gtInfo( HB_GTI_VERSION )
@ 2, 0 SAY "teste:" GET a
Rotina2()
READ
RETURN
FUNCTION Rotina2()
LOCAL a := 10, GetList := {}, hgtAnt
hGtAnt := hb_gtSelect()
hb_gtReload( "WVG" )
SetMode(36,132)
SetColor( "W/B" )
CLS
@ 1, 0 SAY hb_gtInfo( HB_GTI_VERSION )
@ 2, 0 SAY "teste:" GET a
Rotina3()
READ
hb_gtSelect( hGtAnt )
RETURN Nil
FUNCTION Rotina3()
LOCAL a := 10, GetList := {}, hgtAnt
hGtAnt := hb_gtSelect()
hb_gtReload( "WVG" )
SetMode(36,132)
SetColor( "W/B" )
CLS
@ 1, 0 SAY hb_gtInfo( HB_GTI_VERSION )
@ 2, 0 SAY "teste:" GET a
READ
hb_gtSelect( hGtAnt )
RETURN Nil
Sem multithread.
O chato é que o foco pode retornar a qualquer janela anterior, mesmo a bloqueada.
Num caso desses o usuário já iria no reset, ou control-alt-del kkkk
Sem o hgtAnt := hb_gtSelect(), a janela anterior some, mas parece que volta depois. Pode ser interessante confirmar o comportamento.
COMO EXIBIR NO HARBOUR IMAGEM
Enviado: 21 Jun 2023 14:08
por Abel
ola, consegui fazer o que eu queria graças as dicas de JoseQuintas e o Jairo.
Muito Obrigado !!!
agora so tenho mais uma dificuldade, não consegui baixar o jpg com o link do whatsapp que recebo da API
ficou assim a parte de exibiçao da foto em janela separada
CASE rA_TECLA=88 .OR. rA_TECLA=120 // X
hGtAnt := hb_gtSelect()
//
HB_GTRELOAD("WVG")
SETMODE(12,30)
CLS
HB_GtInfo( HB_GTI_WINTITLE, PRISEG_NOME(ALUNO->NOME) )
wvt_DrawImage( 0, 0, 10, 30, "logo.jpg" )
@ 11,00 SAY ' Foto do Perfil do Whatsapp ! ' COLOR 'B/W*'
//
// AGUARDA ATE CLICAR EM QUALQUER LUGAR DA TELA OU MUDAR O FOCO
// DA JANELA FECHANDO A JANELA DA FOTO DE FORMA AUTOMATICA
DO WHILE .T.
INKEY(1)
IF pA_MEUFOCO=wapi_getactivewindow() .OR. LASTKEY()=1002 .OR. LASTKEY()=27
EXIT
ENDIF
ENDDO
//
hb_gtSelect( hGtAnt )
//
// FORCA LIMPAR O BUFFER
DO WHILE LASTKEY()!= 0
INKEY(0.1)
ENDDO
//
tambem ajustei o inicio do programa e a hb_gtsys() conforme orientacoes do Jairo
agora so tenho mais uma dificuldade, não consegui baixar o jpg com o link do whatsapp que recebo da API
PROCEDURE DOWNLOAD_FOTO_WHATS(rA_ENDERECO,rA_NOMEEXE)
local rN_ERRO, oHttp, oExecutavel, oUrl, nTamanho, oProgress
//
SAVE SCREEN TO rT_DOWNLOADTELA
//
oExecutavel:=rA_NOMEEXE
ntamanho:=120
//
cUrl := rA_ENDERECO
oUrl := TUrl():new(cUrl)
TRY
oHttp:= TipClientHttp():New(OUrl,,.T.)
oHttp:nConnTimeout := 20000
//
oHttp:Open( rA_ENDERECO )
oHttp:exGauge := { |done, size| ShowGauge(done, size, ntamanho) }
oHttp:ReadToFile( rA_NOMEEXE )
//
rN_ERRO=hb_InetErrorCode( oHttp:SocketCon )
//
IF rN_ERRO == -1
ALERT2('VERMELHO','ERROR DE TIMEOUT AO ACESSAR O ENDERECO PARA DOWNLOAD ...')
ELSEIF rN_ERRO == -2 .OR. rN_ERRO = 16
ALERT2('VERMELHO','Download Interrompido, Verificar a Conexao com a Internet ...')
ELSEIF rN_ERRO == -3
ALERT2('VERMELHO','Problemas com a Conexao ...')
ELSEIF rN_ERRO <> 0
ALERT2('VERMELHO','Problemas ao tentar fazer o Download ...')
ENDIF
//
oHttp:close()
//
CATCH // SE DER ALGUM ERRO
ALERT2('VERMELHO','CATCH: '+str(hb_InetErrorCode( oHttp:SocketCon )))
END
RETURN