Exemplo de herança / limpeza de fonte

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Exemplo de herança / limpeza de fonte

Mensagem por JoséQuintas »

Estou fazendo testes com WVG.

Código: Selecionar todos

#include "wvgparts.ch"
#include "hbgtwvg.ch"
#include "wvtwin.ch"

PROCEDURE Main

   LOCAL oCrt, aSize

   SetColor("W/B")
   CLS
   Altd()
   WITH OBJECT oCrt := wvgStatic():new( , , { 0, 0 }, { -19, -60 } )
      :Style += SS_ICON
      :Create()
      :SetColorFG("W/B")
      :SetColorBG("W/B")
      aSize := :CurrentSize()
      :hBitmap := wvg_LoadImage( "icojpatecnologia", 1, IMAGE_ICON, aSize[1], aSize[2], LR_SHARED )
      wvg_SendMessage( :hWnd, STM_SETIMAGE, IMAGE_ICON, oCrt:hBitmap )
      :InvalidateRect()
   ENDWITH
   Inkey(0)

   RETURN
tela.png
É tudo encima do wvgStatic.
Achei muito fonte pra pouca coisa, então aplicar herança, pra ver o que dá.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Exemplo de herança / limpeza de fonte

Mensagem por JoséQuintas »

Nova classe por herança, MyWvgIcon(), baseada no wvgStatic()

Código: Selecionar todos

CREATE CLASS MyWvgIcon INHERIT WVGSTATIC

   METHOD Create( ... )
   METHOD SetIcon( cIcon )
   ENDCLASS

METHOD Create( ... ) CLASS MyWvgIcon

   ::Style += SS_ICON
   ::wvgStatic:Create( ... )
   ::SetColorFG( SetColor() )
   ::SetColorBG( SetColor() )

   RETURN Nil

METHOD SetIcon( cIcon ) CLASS MyWvgIcon

   LOCAL aSize

   aSize := ::CurrentSize()
   ::hBitmap := wvg_LoadImage( cIcon, 1, IMAGE_ICON, aSize[1], aSize[2], LR_SHARED )
   wvg_SendMessage( ::hWnd, STM_SETIMAGE, IMAGE_ICON, ::hBitmap )
   ::InvalidateRect()

   RETURN Nil
Agora o fonte ficou assim:

Código: Selecionar todos

PROCEDURE Main

   LOCAL oCrt

   SetColor("W/B")
   CLS
   Altd()
   oCrt := MyWvgIcon():new( , , { 0, 0 }, { -19, -60 } )
   oCrt:Create()
   oCrt:SetIcon( "icojpatecnologia" )

   Inkey(0)

   RETURN
Esse conceito pode ser aplicado aos controles HWGUI, FIVEWIN, etc.
Ao invés de ficar enchendo de código fonte em tudo que é lugar, pra modificar o default, já definir os controles do jeito que vamos usar.

Nota:
::wvgStatic:Create() garante que vai ser usado o Create() de wvgStatic()
É porque wvgStatic usa herança de wvgWindow() que também tem seu Create(), o ::Super: poderia pegar o método da classe errada.

Só comentário: SetColorFG() e SetColorBG() podem usar as cores RGB do Windows, mas também aceitam as cores do Harbour.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Exemplo de herança / limpeza de fonte

Mensagem por JoséQuintas »

Não terminou.....
tá parecendo controle da hwgui kkkkk

Código: Selecionar todos

METHOD PROCEDURE WvgStatic:destroy()

   IF ::hBitmap != NIL
      wvg_DeleteObject( ::hBitmap )
   ENDIF
   ::wvgWindow:destroy()

   RETURN
DeleteObject() é pra bitmap e não pra ícone.
Vai precisar tratamento de ícone na nova classe, um novo Destroy() ou algo mais
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Exemplo de herança / limpeza de fonte

Mensagem por JoséQuintas »

dest.png
Ferrou.
No Harbour 3.4 tem isso padronizado na hbwin.
No Harbour 3.2 até usa bastante, mas tudo em fonte C.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Exemplo de herança / limpeza de fonte

Mensagem por JoséQuintas »

Criei outra variável pra ícone

Código: Selecionar todos

CREATE CLASS MyWvgIcon INHERIT WVGSTATIC

   VAR hIcon
E como coloquei LR_SHARED no wvg_LoadImage() quando é ícone de resource, deve resolver.
Com a variável diferente não vai acionar DeleteObject(), que não é pra ícone.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Exemplo de herança / limpeza de fonte

Mensagem por JoséQuintas »

Versão final:

Código: Selecionar todos

#include "wvgparts.ch"
#include "hbgtwvg.ch"
#include "wvtwin.ch"
#include "hbclass.ch"

PROCEDURE Main

   LOCAL oCrt

   SetColor("W/B")
   CLS
   Altd()
   oCrt := zeWvgIcon():new( , , { 0, 0 }, { -19, -60 } )
   oCrt:Create()
   oCrt:SetIcon( "icojpatecnologia" )

   Inkey(0)

   RETURN

CREATE CLASS zeWvgIcon INHERIT WVGSTATIC

   VAR hIcon
   METHOD Create( ... )
   METHOD SetIcon( cIcon )
   ENDCLASS

METHOD zeWvgIcon:Create( ... )

   ::Style += SS_ICON
   ::wvgStatic:Create( ... )
   ::SetColorFG( SetColor() )
   ::SetColorBG( SetColor() )

   RETURN Nil

METHOD zeWvgIcon:SetIcon( cIcon )

   LOCAL aSize

   aSize := ::CurrentSize()
   ::hIcon := wvg_LoadImage( cIcon, 1, IMAGE_ICON, aSize[1], aSize[2], LR_SHARED )
   wvg_SendMessage( ::hWnd, STM_SETIMAGE, IMAGE_ICON, ::hIcon )
   ::InvalidateRect()

   RETURN Nil
Agora é mover a classe zeWvgIcon() pra uma LIB.

Harbour 3.2 oficial.
Exceto que está pendente lá pra atualizar wvg_LoadImage() pra aceitar mais 2 parâmetros.
Sem isso, vai precisar um ícone diferente pra cada resolução de tela.

Quem usa GUI sabe isso, e na maioria dos casos não deixa usuário redimensionar tela.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Exemplo de herança / limpeza de fonte

Mensagem por JoséQuintas »

De novo: é API Windows, JANELA SOBRE JANELA

Passo a passo com DEBUG

Até aqui, normal
wvg1.png

Código: Selecionar todos

METHOD zeWvgIcon:Create( ... )

   ::Style += SS_ICON
   ::wvgStatic:Create( ... )
cria a janela default do windows, cor default do windows
Não importa que é debug, é uma janela encima da janela padrão (digamos DIALOG, mas não é DIALOG)
wvg2.png

Código: Selecionar todos

   ::SetColorFG( SetColor() )
   ::SetColorBG( SetColor() )
Mudou a cor da janela
wvg3.png

Código: Selecionar todos

METHOD zeWvgIcon:SetIcon( cIcon )

   LOCAL aSize

   aSize := ::CurrentSize()
   ::hIcon := wvg_LoadImage( cIcon, 1, IMAGE_ICON, aSize[1], aSize[2], LR_SHARED )
   wvg_SendMessage( ::hWnd, STM_SETIMAGE, IMAGE_ICON, ::hIcon )
   ::InvalidateRect()

   RETURN Nil
Enviou o ícone pro Windows pintar
wvg4.png
A janela do controle wvgStatic é só essa parte em azul.

Aqui é uma coisa interessante:
Em GUI, usando DIALOG, DIALOG é como a GETSYS do Windows, é tudo montado de uma vez pelo Windows, não dá pra acompanhar passo a passo.
Em GTWVG dá pra treinar API Windows, e ver passo a passo o que acontece.
Isso quando o controle não cobre o fonte do debug, porque aí não vemos qual a parte do fonte que está sendo executada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder