Página 2 de 2

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 21 Jun 2023 14:45
por JoséQuintas

Código: Selecionar todos

FUNCTION DownloadFile( cUrl, cFile )

   LOCAL oSoap, cRetorno, lOk

   lOk := .F.
   BEGIN SEQUENCE WITH __BreakBlock()
      oSoap := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
      oSoap:Open( "GET", cUrl, .F. )
      oSoap:Send()
      cRetorno := oSoap:ResponseBody()
      hb_MemoWrit( cFile, cRetorno )
      lOk := .T.
   END SEQUENCE

   RETURN lOk

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 21 Jun 2023 15:15
por Abel
Josequintas, coloquei sua funçao e ele nao grava tambem

testei o link com http ou https no navegador funciona, mas no harbour nao.

http://pps.whatsapp.net/v/t61.24694-24/ ... e=64A044F5

seu trocar na sua funcao Responsebody() por Responsetext

ele salva o arquivo jpg com 0 bytes
com responsebody ele nem cria o arquivo jpg

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 21 Jun 2023 15:54
por JoséQuintas
Testei aqui e também não funciona PRA ESSE LINK.
Pra outros links funciona normalmente.

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 21 Jun 2023 16:06
por JoséQuintas
html.png
Sei lá, alguém de web deve saber.
Talvez algum tipo de proteção ?
Se tentar esse outro link, do src=, acusa timestamp inválido

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 21 Jun 2023 16:33
por Abel
estranho mesmo JoseQuintas

vou continuar fazendo umas pesquisas, mudei ate o content-type mas nao deu certo.

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 22 Jun 2023 03:53
por Jairo Maia
Olá Pessoal,

Assim deu certo:

Código: Selecionar todos

#include "hbdyn.ch"

Function Main()
 Local cLink, cNomeLogo

 /*
   Nome que se quer atribuir ao logo
 */
 cNomeLogo := "LogoWhatsApp.Jpg"
 
 /*
   Link do logo
 */
 cLink := "https://pps.whatsapp.net/v/t61.24694-24/56105964_420995091992527_6265685285690933248_n.jpg?ccb=11-4&oh=01_AdTSwFiLkpkkhsCkMNa-3jRKrk-65O_zPKRmVcdWl75n0Q&oe=6499E5B5"
 
 If BaixarLogo( cLink, cNomeLogo )  // tenta baixar...
 
  Hb_Run( "LogoWhatsApp.Jpg" )  // para teste, se tem aplicativo vinculado com .Jpg, vai abrir a figura...
  
 Else
 
  Hb_Alert( "Download do logo falhou..." )
 
 EndIf
 
Return Nil

/*
  Baixar logotipo do site whatsapp...
*/
Func BaixarLogo( cLink, cNomeLogo )
 Local nHandleDLL, nStatus

 nHandleDLL:=HB_LibLoad("UrlMon.dll")
 
 nStatus:=HB_DynCall( { "URLDownloadToFileA", nHandleDLL, HB_DYN_CALLCONV_STDCALL}, 0, clink, cNomeLogo, 0, 0 )

 hb_LibFree( nHandleDLL )
 
Return ( nStatus = 0 )

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 22 Jun 2023 09:37
por JoséQuintas
Se não me engano, faltou aí no final o hb_LibFree()

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 22 Jun 2023 10:30
por Jairo Maia
JoséQuintas escreveu:Se não me engano, faltou aí no final o hb_LibFree()
Não se enganou não, faltou mesmo :)

Corrigi, acrescentei no final a função: hb_LibFree( nHandleDLL )

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 22 Jun 2023 15:01
por Abel
deu tudo certo !!

passando para agradecer a todos desse forum e especificamente ao Jose Quintas e Jairo Maia
por me ajudarem tanto na exibiçao do JPG devido ao conflitos que eu tinha no meu sistema wvt x wvg
quanto no download do jpg usando DLL, pois ja havia tentado muitas solucoes que nao deram certo.


Muito Obrigado mesmo !
ABEL

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 03 Jul 2023 22:07
por Abel
Josequintas, percebi na rotina anterior que exibe a foto jpg que esta sendo aberta em uma janela
separada do sistema (como eu quero nesse momento), se move a janela com o mouse a foto some e a
janela fica toda preta, sabe o que pode ser ?

Código: Selecionar todos

PROCEDURE EXIBE_JPG(rA_TITULO, rA_ARQJPG)
hGtAnt := hb_gtSelect()
//     
HB_GTRELOAD("WVG")
SETMODE(24,35) 
//
SET COLOR TO 'W*/N'
CLS
HB_GtInfo( HB_GTI_WINTITLE, rA_NOME )
wvt_DrawImage( 1, 0, 18, 34, rA_ARQJPG )
SET CURSOR OFF 
DO WHILE .T.
   INKEY(0.01)
   //
   IF LASTKEY()=27
       EXIT
   ENDIF
ENDDO
//
Hb_gtSelect( hGtAnt )
RETURN 

Desde ja agradeço.

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 03 Jul 2023 22:42
por ANDRIL
Olá Abel, tente conforme abaixo, assim a cada ciclo recarrega a imagem.

Código: Selecionar todos

SET CURSOR OFF 
DO WHILE .T.
   wvt_DrawImage( 1, 0, 18, 34, rA_ARQJPG )
   INKEY(0.01)
   //
   IF LASTKEY()=27
       EXIT
   ENDIF
ENDDO

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 04 Jul 2023 11:15
por Abel
ANDRIL, era isso que eu queria evitar,

fazer a exibicao em loop no do while e como nao entendo muito de WVG e nem WVT talvez
tenha um jeito melhor.

Obrigado,
ABEL

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 04 Jul 2023 14:23
por ANDRIL
Abel tenho usado assim e me atende. Mas tem outra forma que em tese faz loop interno nos objetos.

Código: Selecionar todos

caminhod="C:"

cLogo= padr("C:\SEMFOTO.JPG",60)
do while .t.
aPaint:={}

if file(alltrim(cLogo))
 Wvt_DrawImage( 06, 30, 12, 50, alltrim(cLogo)  )
 AaDd( aPaint, { Nil, {|| Wvt_DrawImage( 06, 30, 12, 50, alltrim(cLogo)  ) }, Nil } ) 
endif

 AaDd( aPaint, { Nil, {|| Wvt_DrawBoxRaised( 06, 30, 12, 50 ) }, Nil } )
 WvtSetPaint( aPaint )
@15,01 say "Arquivo de Logo: " get cLogo pict"@!"
read

if lastkey()=27
exit
endif

enddo
aPaint:={}
WvtSetPaint( aPaint )
Wvg_ClearGUIObjects()
return
Seria mais ou menos isso, tentei extrair de um código mais complexo. Não sei se vai compilar.

COMO EXIBIR NO HARBOUR IMAGEM

Enviado: 04 Jul 2023 16:54
por Abel
Ola, Andril

fiz uma solucao mecanica, pedindo ao usuario pressionar F9 quando mexer na janela e a imagem sumir.
obrigado pela dica tambem.

Código: Selecionar todos

PROCEDURE EXIBE_JPG_EM_JANELA(rA_ARQJPG,rA_NOME)
LOCAL hGTaNT, rN_LINANTES, rN_COLANTES, rN_ACAO
//
hGtAnt := hb_gtSelect()
//
HB_GTRELOAD("WVG")
SETMODE(24,35) 
//
SET COLOR TO 'W*/N'
CLS
HB_GtInfo( HB_GTI_WINTITLE, rA_NOME )
//
SET CURSOR OFF 
@ 08,07 SAY ' A foto sumiu porque '
@ 09,07 SAY ' mexeu na janela.    '
@ 11,07 SAY ' F9-Exibe novamente  '
//
wvt_DrawImage( 1, 0, 18, 34, rA_ARQJPG )
//
// AGUARDA ATE CLICAR EM QUALQUER LUGAR DA TELA OU MUDAR O FOCO  DA JANELA FECHANDO A JANELA DA FOTO DE FORMA AUTOMATICA
//
rN_ACAO=0     // 0=NAO FAZ NADA  1=SALVAR    2=EXCLUIR
rN_COLANTES=0
rN_LINANTES=0
//
DO WHILE .T.
   INKEY(0.01)
   //
   IF LASTKEY()=-8  // F9
      wvt_DrawImage( 1, 0, 18, 34, rA_ARQJPG )
   elseif LASTKEY()=27
      exit
   endif
enddo

Hb_gtSelect( hGtAnt )
return