Página 1 de 3

Redimensionando imagens

Enviado: 06 Jan 2016 11:21
por JoséQuintas
Finalmente consegui.
Ainda testando, porque precisa algo mais.

No oficial, quando a imagem é menor do que o tamanho necessário:
gtwvg1.png
Com minha alteração:
gtwvg2.png
É GTWVG.
Ainda estou fazendo testes aqui na minha máquina.
A imagem sendo redimensionada automaticamente.

Nota:
A alteração foi relativamente simples.
Seria muito mais simples pra quem está acostumado com isso.
Porque não fizeram antes?
boa pergunta.

Redimensionando imagens

Enviado: 06 Jan 2016 11:32
por JoséQuintas
Sobre as alterações:

imagem - o próprio Windows faz isso, na função que carrega a imagem.
wvg_LoadImage() já recebia até variáveis de tamanho, mas sem fazer uso e sem a opção LR_DEFAULTSIZE, que é a opção de redimensionar.
E fazia uso de LoacIcon() sem opção de redimensionar.

Código: Selecionar todos

FUNCTION wvg_LoadImage( ncImage, nSource, nBmpOrIcon, nWidth, nHeight )

   SWITCH hb_defaultValue( nSource, 0 )
   CASE 0
   CASE 1
      IF hb_defaultValue( nBmpOrIcon, WIN_IMAGE_BITMAP ) == WIN_IMAGE_ICON
         // RETURN wapi_LoadIcon( wapi_GetModuleHandle(), ncImage )
         RETURN wapi_LoadImage( wapi_GetModuleHandle(), ncImage, nBmpOrIcon, nWidth, nHeight, WIN_LR_DEFAULTSIZE )
      ELSE
         // RETURN wapi_LoadBitmap( wapi_GetModuleHandle(), ncImage )
         RETURN wapi_LoadImage( wapi_GetModuleHandle(), ncImage, nBmpOrIcon, nWidth, nHeight, WIN_LR_DEFAULTSIZE )
      ENDIF
   CASE 2
      RETURN wapi_LoadImage( , ncImage, nBmpOrIcon, nWidth, nHeight, WIN_LR_LOADFROMFILE + WIN_LR_DEFAULTSIZE )
   ENDSWITCH
   RETURN NIL
Restou um desafio:
Posso escolher o tamanho final, mas que tamanho escolher?

Redimensionando imagens

Enviado: 06 Jan 2016 12:21
por JoséQuintas
Tamanho:

No Clipper/Harbour, imaginando um quadrado/retângulo, seria usar Left, Top, Bottom, Right
Pra obter altura e largura, só calcular:
Altura = Bottom - Top + 1
Largura = Right - Left + 1

Mas e na tela do Windows?

O pushbutton tem uma "tela" só pra ele, uma janela do Windows
Já que a janela é do Windows, perguntar direto para o Windows

Código: Selecionar todos

   wapi_GetWindowRect( ::hWnd, aWindowRect )
   nWidth  := Int( aWindowRect[ 3 ] - aWindowRect[ 1 ] ) 
   nHeight := Int( aWindowRect[ 4 ] - aWindowRect[ 2 ] )

No geral é entender o conceito de como funcionam as coisas.
Pelo menos se tem uma noção do que pesquisar.

Depois:

- se o Windows tem função pra isso
- como usar a função do Windows
- como obter/enviar informações

e o principal: aonde alterar.

No fonte do pushbutton tem o SetCaption() que é a rotina que coloca a imagem.
O pushbutton sabe que janela do Windows está usando.
E o pushbutton chama a rotina de carregar imagem, e depois chama a rotina do Windows que coloca a imagem na janela, passando essa imagem.
Então... é aí mesmo.

Resta resolver duas questões:
- A imagem tem que ser menor que o pushbutton, porque precisa espaço para o contorno
- Como da outra vez acrescentei a opção de texto + imagem, quando é assim a imagem tem que ser menor ainda, pra caber o texto

Nota:
Se o fonte de tudo isso fosse em C, é provável que não conseguiria mexer.
Por isso considerei a GTWVG uma das mais promissoras, porque a gente modificar usando fonte Harbour.

O pessoal das LIBs gráficas ainda não entendeu isso direito, e a GTWVG não é exceção.

Todo controle é uma janela do Windows "sem vida", os fontes vão dizendo o que ela deve fazer.
Ao mesmo tempo, uma janela de programa já é uma janela "com vida", o fonte já faz parte dela.

A coisa é simples: estão usando a janela errada.
Estão criando controles Windows, e não controles Harbour

Se o pushbutton fosse uma janela Harbour:
Como exemplo, era só usar o DrawImage() no evento de Resize - se modificou o tamanho da janela, refaz o desenho.

Sei o conceito, mas não sei por em prática...

Redimensionando imagens

Enviado: 16 Jan 2016 20:41
por microvolution
parabéns!
parabéns!
e parabéns!
prezado professor, v. é realmente uma pessoa que (pelo menos aqui) não pensa em si, e, mais nos outros.
Esse tópico achei fenomenal!!!
:{

Redimensionando imagens

Enviado: 17 Jan 2016 15:27
por microvolution
JoséQuintas escreveu:FUNCTION wvg_LoadImage( ncImage, nSource, nBmpOrIcon, nWidth, nHeight )
prezado professor jquintas, estou testando agora seu exemplo.
estou usando o seguinte para chamar a função wvg_loadImage():

Código: Selecionar todos

  cBMP :=hb_DirBase()+"logo\key32.bmp"
  wvg_LoadImage(1,1,cBMP,10,100)
Os dois primeiros argumentos, principalmente o primeiro eu chutei. O segundo até que dá pra entender que faz parte do switch e pode ser 1 ou 2, menos o "0" (zero) pois não apresentaria nenhuma imagem.
...
vou compilar e ver no que dá ... :D

Redimensionando imagens

Enviado: 17 Jan 2016 15:58
por microvolution
prezado professor...
sei que é muita "leiguisse, burrice, idiotisse... isse, isse, etc de minha parte"
por favor não fique bravo como alguns aqui do fórum...
mas, não deu...

Código: Selecionar todos

c:/mvinfo/hb34/lib/win/mingw/libgtwvg.a(paint.o):paint.c:(.text+0x700): multiple definition of `_HB_FUN_WVG_LOADIMAGE'
C:/Users/wal/AppData/Local/Temp/hbmk_8izr84.dir/rotinas5GT.o:rotinas5GT.c:(.text+0x1500): first defined here
Ou seja, a sua mensagem, na verdade já faz parte da lib GTWVG, estou correto?
:%

Redimensionando imagens

Enviado: 17 Jan 2016 16:24
por JoséQuintas
Como eu disse, é uma alteração na GTWVG. Não é uma inclusão.
Mas é bom esperar a versão oficial, pode ser que o Pritpal implemente isso de outra forma.
Se fizer isso agora, vai ter que lembrar de mexer sempre.
E se ele fizer diferente, não vai ser compatível.

Redimensionando imagens

Enviado: 17 Jan 2016 18:16
por microvolution
JoséQuintas escreveu:Como eu disse, é uma alteração na GTWVG. Não é uma inclusão.
Mas é bom esperar a versão oficial, pode ser que o Pritpal implemente isso de outra forma.
Se fizer isso agora, vai ter que lembrar de mexer sempre.
E se ele fizer diferente, não vai ser compatível.
Ok, prezado professor...
bom, dentro do mesmo assunto "imagens".
fuçando no arquivo da pasta "tests" (gtwvg), descobri o seguinte pequeno código que coloca imagens, boxes, etc... numa tela console (gráfica para a gtwvg):

Código: Selecionar todos

#define BMP                hb_DirBase() + "LOGO\BMP1.bmp"
aPaint := {}
AAdd( aPaint, { "Image", {|| wvt_DrawImage( 8, 62, 12, 69, BMP ) }, { WVT_BLOCK_IMAGE, 8, 62, 12, 69 } } )
WvtSetPaint( aPaint )
Pelo que vejo, essas 4 linhas, deveriam imprimir ou melhor, desenhar um box (drawimage) com dimensões e com o arquivo BMP1.BMP dentro dele; mas isso não funciona.
Já o código abaixo, que pertence ao mesmo arquivo "demonstrativo" da gtwvg a qual estamos referindo, funciona corretamente; pois é criada uma tela (formulário modal) muito top:

Código: Selecionar todos

   oCrt := WvgCrt():New( , , { 1, 8 }, { 12, 49 }, , .T. )

   oCrt:lModal      := .T.
   oCrt:resizable   := .T.
   oCrt:closable    := .T.
   oCrt:title       := "Modal Dialog!"
   oCrt:icon        := hb_DirBase() + "LOGO\vr_1.ico"

   oCrt:Create()
   oCrt:show()
Enfim, o que está faltando para as linhas de código anteriores funcionarem?
No caso, para matar a dúvida, adicionei também e compilei, e, não funcionou, as linhas:

Código: Selecionar todos

   Set( _SET_DATEFORMAT, "yyyy-mm-dd" ) // não vejo que seja essa a linha que falta para funcionar
   Set( _SET_EVENTMASK, hb_bitOr( INKEY_ALL, HB_INKEY_GTEVENT ) ) // não vejo que seja essa a linha que falta para funcionar
   wvt_SetGUI( .T. ) // talvez seja essa linha a chave de tudo
   wvt_SetFont( "Courier New", 18, 0, 0 )
   wvt_SetMouseMove( .T. )  // não vejo que seja essa a linha que falta para funcionar
   SetColor( "N/W" )
   CLS
   wvt_ShowWindow( SW_RESTORE ) // penso que poderia ser essa também
Por fim, tem as seguintes linhas iniciais, que resolvi colocar e também não desenhou o box:

Código: Selecionar todos

#if defined( __HBSCRIPT__HBSHELL ) .AND. defined( __PLATFORM__WINDOWS )
   hbshell_gtSelect( "GTWVG" )
#endif
Mas, não sei do que se tratam... enfim, tudo pra mim é novo e muito complexo e complicado.
às vezes uma coisa simples se torna difícil pra mim, e, outra difícil torna-se fácil... sei lá... tem hora que nem sei quem sou...
"lá pregunta?"
"dio no sei quein soy dio!"
"segura la niña!!!"
rsrsrs

Redimensionando imagens

Enviado: 17 Jan 2016 18:21
por microvolution
por fim...
somente a cor da tela do "demo" da pasta "tests" é que pegou e ficou exatamente igual.
Mas, isso era óbvio...
té breve!

Redimensionando imagens

Enviado: 18 Jan 2016 17:23
por microvolution
olá pessoal...
estou tentando entender (essa linha abaixo), mas, quanto mais tento entender menos conhecimento adquiro:

Código: Selecionar todos

Wvg_Image( 15,36,16,42, {-3,-3,3,3}, GOBJ_IMAGESOURCE_FILE, "Login" )
Segundo essa linha, a função WVG_IMAGE() com a variável de sistema Gobj_ImageSource_File deveria criar um retângulo com as dimensões 15,36,16,42 (já os -3 ... não sei para que servem). E realmente, depois de muita dor de cabeça fiz funcionar e realmente a imagem é carregada pra dentro do retângulo.
Bom, mas, considero o seguinte:
- 1 ) se estiver dentro da pasta de compilação o arquivo e usar com o nome correto. Exemplo: "vouch1.bmp", a imagem é exibida;
- 2 ) se estiver dentro da pasta também e for feita a seguinte substituição (NÃO funciona também):

Código: Selecionar todos

#define Login                  hb_DirBase() + "vouch1.bmp"
- 3 ) se estiver dentro da pasta e usar no arquivo .RC (a seguinte linha para que fique embutido no .exe) TAMBÉM não funciona:

Código: Selecionar todos

Login         BITMAP     "vouch1.bmp"
Então, qual é? qual foi? que que tu tá nessa? ou
Agora se usar a seguinte linha acrescida com a outra (AÍ SIM, FUNCIONA):

Código: Selecionar todos

Login := hb_DirBase() + "vouch1.bmp"
Onkotô? Donkôvim? Pronkovô?
alguém tem alguma ideia?

Redimensionando imagens

Enviado: 18 Jan 2016 21:18
por JoséQuintas
Se assim funciona, então qual é o problema?

Lembra do AllInOne? Tem isto no allinone:

Código: Selecionar todos

   wvt_DrawImage( 3, 0, MaxRow() - 2, MaxCol(), "image\jpa.ico" )
Existe o jeito pra trabalhar organizado e desorganizado.
Você está no desorganizado.
Já perguntou sobre o mesmo problema de pastas sobre o bloco de notas.
A solução de um é a mesma do outro.

Trabalhe em uma coisa de cada vez, até entender direito o que está fazendo.

Redimensionando imagens

Enviado: 18 Jan 2016 21:30
por microvolution
ok então...
bom, estou usando 2 imagens:
- uma imagem como tela de splash;
- outra como tela de login (tipo a sua JPA).
Como fazer para encerrá-las ao final de cada etapa?

Redimensionando imagens

Enviado: 18 Jan 2016 21:32
por JoséQuintas
Já viu o resultado?

Redimensionando imagens

Enviado: 18 Jan 2016 21:54
por microvolution
sim, e tô gostando da ideia...
veja a imagem que criei de login:
16-0118 - tela login gráfica.png
Só tá faltando acrescentar um:

Código: Selecionar todos

Wvg_BoxRaised( 03,20,13,59, {-5,-5,5,5} )
aliás, o que são esses argumentos entre {}, sendo os 2 primeiros negativos?

Ah! falta também um tipo de :destroy em ambas as linhas assim que o usuário efetua login.

Redimensionando imagens

Enviado: 18 Jan 2016 21:54
por JoséQuintas
Só não deixo meu menu assim porque a imagem some sozinha.
telamenu.png
E agora está perguntando como faz pra ela sumir.

Quero saber o que acontece aí, me interessou.