LIB console imitando gráfico

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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Lembrei de uma coisa:
A progressbar original da GTWVG não dá pra eliminar da tela.
Fiz o teste agora, e essa que criei pode ser eliminada.

Código: Selecionar todos

oControl:Destroy()
Nem criei nada pra isso, já existe na própria GTWVG.
Destrói o controle que criei, mas não destrói o que já fazia parte dela... rs
Lógico... provavelmente o progressbar existente deve ser da GTWVT e não obedece a GTWVG.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LIB console imitando gráfico

Mensagem por asimoes »

Quintas,

Excelente contribuição.

Parabéns!!!
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Tava brigando pra funcionar mudança de cor, e o modo smooth, mas descobri que só funciona se não houver uso de estilo.
Não entendi o que seria isso.... rs

Versão final:

Código: Selecionar todos

#include "hbclass.ch"
#include "inkey.ch"
#include "hbgtinfo.ch"

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

#define PBS_MARQUEE      0x08
#define PBM_SETMARQUEE   ( WM_USER + 10 )
#define WM_USER          0x0400


CREATE CLASS wvgProgressbar INHERIT WvgWindow

   VAR    autosize                              INIT .F.
   VAR    Border                                INIT .F.
   VAR    cancel                                INIT .F.
   VAR    caption
   VAR    default                               INIT .F.
   VAR    drawMode                              INIT WVG_DRAW_NORMAL
   VAR    lImageResize                          INIT .F.
   VAR    nImageAlignment                       INIT 0
   VAR    oImage
   VAR    preSelect                             INIT .F.
   VAR    pointerFocus                          INIT .F.
   VAR    Style                                 INIT 0
   VAR    lVertical                             INIT .F.
   VAR    lSmooth                               INIT .F.
   VAR    nValue
   VAR    nRangeMin
   VAR    nRangeMax
   VAR    nVelocity
   VAR    lMarquee                              INIT .F.
   VAR    nSpeed                                INIT 30
   VAR    nColorBarFG
   VAR    nColorBarBG

   METHOD SetColorBarFG( nColor )
   METHOD SetColorBarBG( nColor )
   METHOD SetValue( nValue, nRangeMin, nRangeMax, nSpeed )

   METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   METHOD destroy()
   METHOD handleEvent( nMessage, aNM )

   METHOD activate( xParam )                    SETGET
   METHOD setCaption( cCaption )
   METHOD draw( xParam )                        SETGET

   METHOD setColorFG()                          INLINE NIL
   METHOD setColorBG()                          INLINE NIL

   ENDCLASS


METHOD wvgProgressbar:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )

   ::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )


   RETURN SELF


/*
https://msdn.microsoft.com/en-us/library/windows/desktop/bb760820(v=vs.85).aspx
Smooth style is supported only in the Windows Classic theme.

https://msdn.microsoft.com/en-us/library/windows/desktop/bb760838(v=vs.85).aspx
When visual styles are enabled, color messages has no effect.
*/


METHOD wvgProgressbar:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )

   ::ClassName := "msctls_progress32"
   ::ObjType   := objTypeStatic
   ::Style     += WIN_WS_CHILD + WIN_WS_GROUP + iif( ::lMarquee, PBS_MARQUEE, 0 ) + iif( ::lVertical, PBS_VERTICAL, 0 ) + ;
                  iif( ::lSmooth, PBS_SMOOTH, 0 ) + WIN_WS_EX_CLIENTEDGE

   ::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )

   ::oParent:AddChild( Self )

   ::createControl()

   ::SetValue( ::nValue, ::nRangeMin, ::nRangeMax, ::nSpeed )
   IF HB_ISNUMERIC( ::nColorBarFG )
      ::SetColorBarFG( ::nColorBarFG )
   ENDIF
   IF HB_ISNUMERIC( ::nColorBarBG )
      ::SetColorBarGB( ::nColorBarBG )
   ENDIF

   IF ::visible
      ::show()
   ENDIF
   ::setPosAndSize()

   RETURN SELF


METHOD wvgProgressbar:handleEvent( nMessage, aNM )

   DO CASE
   CASE nMessage == HB_GTE_RESIZED
      IF ::isParentCrt()
         ::rePosition()
      ENDIF
      wapi_SendMessage( ::hWnd, WIN_WM_SIZE, 0, 0 )
      IF HB_ISEVALITEM( ::sl_resize )
         Eval( ::sl_resize, , , Self )
      ENDIF

   CASE nMessage == HB_GTE_NOTIFY

   CASE nMessage == HB_GTE_CTLCOLOR
      IF HB_ISNUMERIC( ::clr_FG )
         wapi_SetTextColor( aNM[ 1 ], ::clr_FG )
      ENDIF
      IF ! Empty( ::hBrushBG )
         wapi_SetBkMode( aNM[ 1 ], WIN_TRANSPARENT )
         RETURN ::hBrushBG
      ENDIF

   ENDCASE

   RETURN EVENT_UNHANDLED


METHOD PROCEDURE wvgProgressbar:destroy()

   ::wvgWindow:destroy()

   RETURN


METHOD wvgProgressbar:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )

   ::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )

   RETURN SELF


METHOD wvgProgressbar:setCaption( cCaption )
   IF HB_ISCHAR( cCaption )
      ::Caption := cCaption
   ENDIF
   IF HB_ISCHAR( ::Caption )
      wapi_SendMessage( ::hWnd, WIN_WM_SETTEXT, 0, ::Caption )
   ENDIF
   RETURN NIL


METHOD wvgProgressbar:draw( xParam )

   IF HB_ISEVALITEM( xParam ) .OR. xParam == NIL
      ::sl_paint := xParam
   ENDIF

   RETURN SELF


METHOD wvgProgressbar:activate( xParam )

   IF HB_ISEVALITEM( xParam ) .OR. xParam == NIL
      ::sl_lbClick := xParam
   ENDIF

   RETURN SELF


METHOD wvgProgressbar:SetValue( nValue, nRangeMin, nRangeMax, nSpeed )

   IF HB_ISNUMERIC( nRangeMin ) .AND. HB_ISNUMERIC( nRangeMax ) .AND. .NOT. ::lMarquee
      ::nRangeMin := nRangeMin
      ::nRangeMax := nRangeMax
      wapi_SendMessage( ::hWnd, PBM_SETRANGE, 0, WIN_MAKELONG( ::nRangeMin, ::nRangeMax ) )
   ENDIF
   IF HB_ISNUMERIC( nValue ) .AND. .NOT. ::lMarquee
      wapi_SendMessage( ::hWnd, PBM_SETPOS, nValue, 0 )
      ::nValue := nValue
   ENDIF
   IF HB_ISNUMERIC( nSpeed ) .AND. ::lMarquee
      wapi_SendMessage( ::hWnd, PBM_SETMARQUEE, 1, nSpeed )
      ::nSpeed := nSpeed
   ENDIF

   RETURN wapi_SendMessage( ::hWnd, PBM_GETPOS, 0, 0 )


METHOD wvgProgressbar:SetCOlorBarFG( nColor )

   IF HB_ISNUMERIC( nColor )
      wapi_SendMessage( ::hWnd, PBM_SETBARCOLOR, 0, nColor )
   ENDIF

   RETURN NIL


METHOD wvgProgressbar:SetColorBarBG( nColor )

   IF HB_ISNUMERIC( nColor )
      wapi_SendMessage( ::hWnd, PBM_SETBKCOLOR, 0, nColor )
   ENDIF

   RETURN NIL
Nota: Deixei os outros métodos de cor de propósito. É que na página do progressbar menciona algo sobre permitir um texto, e provavelmente a troca de cor do texto é diferente das outras.
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Incluso na GTWVG do Harbour 3.4

Código: Selecionar todos

2016-04-11 23:34 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
  * contrib/gtwvg/wvtwin.ch
    + add PBM_SETMARQUEE constant

  * contrib/gtwvg/gtwvg.hbp
  + contrib/gtwvg/progrbar.prg
    + add wvgProgressbar() class
      By José M. C. Quintas
      Ref: https://groups.google.com/d/msg/harbour-users/_8WK2xbVI0o/mscopOgoAwAJ
      Please create pull requests for further updates, if required.
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Agora apelei, na falta de encontrar o parâmetro correto, comecei a testar tudo.... rs
Por enquanto a máquina ainda não travou.... rs

O teste agora é alterando apenas o Style, somando de 1 em 1 pra ver o que dá, pelo menos dá pra saber as opções disponíveis.
A classe atribuída ao controle usa o estilo pra decidir como "desenhar" o controle.

para a classe button:
groupbox.png
para a classe static:
label.png
A diferença entre cada desenho é somar + 1 no Style. Teste nada técnico mesmo... rs
Depois vai ser encontrar um #define equivalente e correto.

A parte do desenho é a mais fácil.
As partes difíceis são pra interagir com o aplicativo, ou até mesmo pra mexer nas cores
De qualquer forma, começa pelo desenho, e ver as possibilidades pelo menos mostra que tem jeito... é pesquisar.

Nota:
Apenas estou usando o que já existe, e limitado ao que já existe.

Qual a vantagem em "reinventar a roda"?
A roda vém pronta de fábrica, e continua valendo pra console ou GUI.
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

No meio desses testes, apareceu um button com fecha.
Procurei na internet, pra ver se realmente existia ou se foi acidente.
Não achei em nenhum lugar.

Então comecei a jogar Paciência Spider...

E quando acabou.... olha ele aqui.
jogo.png
Só falta descobrir o #define oficial pra causar esse efeito, apesar de ter vários números que funcionaram naquele teste.
Será interessante se funcionar também no XP, senão complica.

Mais uma daquelas descobertas "sem querer".... rs

Nota: tá lá nos buttons, ao somar 7, 8, 23, 24, 39, 40 ou 55
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Depois que postei fui fazer o teste prático.
Saiu isto aqui na GTWVG (não oficial).
testejose.png
Interessante...
E na janela CONSOLE, ou melhor, na janela default da GTWVG.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LIB console imitando gráfico

Mensagem por asimoes »

São os segredos do windows...
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Não funciona no XP.

Só pra curiosidade, o fonte estilo gambiarra.
Não deve ser usado oficialmente, porque não é GROUPBOX e o estilo 55 pode causar problemas, conforme os demais parâmetros.

Código: Selecionar todos

PROCEDURE Main

   LOCAL nCont, nRow := 5, nCol := 5

   SetColor( "W/B,W/GR+,,,W/B" )
   SetMode( 33, 100 )
   CLS

   FOR nCont = 1 TO 4
      CreateControl( nCont, nRow, nCol )
      nRow += 3
      IF nRow > MaxRow() - 5
         nRow := 5
         nCol += 30
      ENDIF
   NEXT
   Inkey(0)
   RETURN


STATIC FUNCTION CreateControl( nCont, nRow, nCol )

   LOCAL oControl, nTemp := 1

   oControl := wvgControl():New()
   oControl:wCOntrolName := "GROUPBOX"
   oControl:Style += 55
   DO CASE
   CASE nCont == nTemp++; oControl:Caption := "Finalizar jogo"
   CASE nCont == nTemp++; oControl:Caption := "Voltar e tentar novamente"
   CASE nCont == nTemp++; oControl:Caption := "Alterar configuracao"
   CASE nCont == nTemp++; oControl:Caption := "Sair correndo"
   ENDCASE
   oControl:Create( , , { -nRow, -nCol }, { -3, -40 } )
   HB_SYMBOL_UNUSED( nCont + nTemp )
   RETURN NIL
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Um fonte mais legal pra testes, o da classe wvgStatic

parte dele:

Código: Selecionar todos

METHOD WvgStatic:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   ::className   := "STATIC"
...
   SWITCH ::type
   CASE WVGSTATIC_TYPE_TEXT
   CASE WVGSTATIC_TYPE_GROUPBOX
...
Como já mostrei antes, GROUPBOX pertence à classe BUTTON e não à classe STATIC.
Por isso existia na GTWVG mas não funcionava.

Neste tópico acabei podendo mostrar que dá pra ter uma boa LIB Windows no Harbour oficial.
A GTWVG pode ser usada pra isso, porque trabalha console, GUI, e misto.
A GTWVG está crua, tem muito que pode ser melhorado, talvez tenha chegado no limite do conhecimento/tempo dispnível do Pritpal.

Com certeza meu conhecimento é pouco, não vou ter muito mais o que mexer.
O chato é saber que tem rotinas em C de montão pra usar de referência, mas não sei mexer nisso.

Só com ajuda mesmo.
O próximo ponto talvez seja alterar o tamanho do fonte, mesmo que não possa alterar pra outro, como Arial por exemplo.
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Desculpem ter desviado do assunto original, que era a LIB TUI.

Mas o negócio está empolgante, apesar de avanços bem simples.
Como eu disse, precisa conhecimentos de C, e não tenho, então só me resta vasculhar se existe algo pronto pra quebrar o galho.

Lembram da tela dinâmica?
original.png
Agora com o meu "controle gambiarra", sem mexer no fonte e cor default, e usando uma tela GTWVG de fundo (apesar de existir DIALOG).
test.png
E acabo de descobri um jeito de mexer no tamanho do fonte:
test2.png
A título de curiosidade, como alterei o tamanho do fonte:

Código: Selecionar todos

   //hOldFont := ::SendMessage( WIN_WM_GETFONT )
   ::SendMessage( WIN_WM_SETFONT, wvt_CreateFont( "Arial", 20, 10 ), 0 )
   // wapi_DestroyObject( hOldFont )
A mensagem WM_SETFONT é o que troca a letra, além da criação do fonte que vai ser usado.
Chutei usando a wvt_CreateFont() com alguns parâmetros e deu certo.

Falta um detalhe importante:
Destruir o fonte quando não precisa mais dele.
Não achei nada equivalente a esse DestroyObject().
O Harbour até faz uso dele, mas em fontes C, então não dá pra usar.
Não sei se o "objeto" fonte vai ser destruído ao sair do aplicativo ou da janela, já que no MSN indca que ele deve ser destruído.

A parte de cores os controles tem, é usando ::SetColorFG() e ::SetColorBG(), que aceita como parâmetro WIN_RGB(0,0,0) ou "W/N"

Se redimensionar a janela, os controles são redimensionados.
O fonte não, afinal, acabo de descobrir como fazer isso.
Talvez trocar o fonte no evento resize do controle, mediante algum cálculo.

É como eu disse, não é fácil, mas tendo funções no Harbour pra isso, dá pra gente brincar.
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

O fonte do controle "vazio":

Código: Selecionar todos

#include "hbclass.ch"
#include "inkey.ch"
#include "hbgtinfo.ch"

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

CREATE CLASS Wvgcontrol INHERIT WvgWindow
   VAR    autosize                              INIT .F.
   VAR    Border                                INIT .T.
   VAR    cancel                                INIT .F.
   VAR    caption
   VAR    default                               INIT .F.
   VAR    drawMode                              INIT WVG_DRAW_NORMAL
   VAR    preSelect                             INIT .F.
   VAR    pointerFocus                          INIT .F.
   VAR    Style                                 INIT 0
   METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   METHOD destroy()
   METHOD handleEvent( nMessage, aNM )
   METHOD activate( xParam )                    SETGET
   METHOD setCaption( cCaption )
   METHOD draw( xParam )                        SETGET
ENDCLASS

METHOD Wvgcontrol:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   ::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   RETURN Self

METHOD Wvgcontrol:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   ::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   ::oParent:AddChild( Self )
   ::createControl()
   //hOldFont := ::SendMessage( WIN_WM_GETFONT )
   ::SendMessage( WIN_WM_SETFONT, wvt_CreateFont( "Arial", 20, 10 ), 0 )
   // wapi_DestroyObject( hOldFont )
   IF ::visible
      ::show()
   ENDIF
   ::setPosAndSize()
   IF HB_ISCHAR( ::Caption )
      ::SetCaption()
   ENDIF
   RETURN Self

METHOD Wvgcontrol:handleEvent( nMessage, aNM )
   DO CASE
   CASE nMessage == HB_GTE_RESIZED
      IF ::isParentCrt()
         ::rePosition()
      ENDIF
      ::sendMessage( WIN_WM_SIZE, 0, 0 )
      IF HB_ISEVALITEM( ::sl_resize )
         Eval( ::sl_resize, , , Self )
      ENDIF
   CASE nMessage == HB_GTE_COMMAND
      IF aNM[ 1 ] == BN_CLICKED
         IF HB_ISEVALITEM( ::sl_lbClick )
            IF ::isParentCrt()
               ::oParent:setFocus()
            ENDIF
            Eval( ::sl_lbClick, , , Self )
            IF ::pointerFocus
               ::setFocus()
            ENDIF
         ENDIF
         RETURN EVENT_HANDLED
      ENDIF
   CASE nMessage == HB_GTE_NOTIFY
   CASE nMessage == HB_GTE_CTLCOLOR
   ENDCASE
   RETURN EVENT_UNHANDLED

METHOD PROCEDURE Wvgcontrol:destroy()
   // LOCAL hOldFont
   ::wvgWindow:destroy()
   // hOldFont := ::SendMessage( WIN_WM_GETFONT )
   // wapi_DestroyObject( hOldFont )
   RETURN

METHOD Wvgcontrol:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   ::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   RETURN Self

METHOD Wvgcontrol:setCaption( cCaption )
   IF HB_ISCHAR( cCaption )
      ::Caption := cCaption
   ENDIF
   IF HB_ISCHAR( ::Caption )
      ::SendMessage( WIN_WM_SETTEXT, 0, ::Caption )
   ENDIF
   RETURN NIL
E o fonte que usei pro teste, baseado no _dyndlgs.prg da WVG:

Código: Selecionar todos

PROCEDURE Main

   LOCAL oControl, oGroupbox

   SetMode( 21, 60 )
   SetColor("N/W")
   CLS

   // multiline edit
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_TABSTOP + ES_AUTOVSCROLL + ES_MULTILINE + ;
      ES_WANTRETURN + WIN_WS_BORDER + WIN_WS_VSCROLL
   oControl:ClassName := "EDIT"
   oControl:Caption := GetEditText()
   oControl:Create( , , { -1, -2 }, { -15, -35 } )

   // vertical line
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + SS_ETCHEDVERT
   oControl:ClassName := "STATIC"
   oControl:Create( , , { -1, -39 }, { -16, -1 } )

   // horizontal line
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + SS_ETCHEDHORZ
   oControl:ClassName := "STATIC"
   oControl:Create( , , { -17, -2 }, { -1, -56 } )

   // icon
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + SS_ICON
   oControl:ClassName := "STATIC"
   oControl:Create( , , { -18, -2 }, { -2, -6 } )

   // bitmap
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + SS_BITMAP + SS_REALSIZEIMAGE
   oControl:ClassName := "STATIC"
   oControl:Create( , , { -18, -41 }, { -2, -8 } )

   // button
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_TABSTOP + BS_AUTOCHECKBOX
   oControl:ClassName := "BUTTON"
   oControl:Caption := "Satisfied?"
   oControl:Create( , , { -18, -15 }, { -1, -10 } )

   // edit
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_TABSTOP + ES_RIGHT + ES_READONLY
   oControl:ClassName := "STATIC"
   oControl:Create( , , { -18, -30 }, { -1, -7 } )

   // listbox
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_TABSTOP + LBS_NOTIFY + WIN_WS_VSCROLL + WIN_WS_BORDER
   oControl:ClassName := "LISTBOX"
   oControl:Create( , , { -1, 41 }, { -4, -17 } )

   // parte do combobox
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + SS_LEFT
   oControl:ClassName := "STATIC"
   oControl:Create( , , { -4, -41 }, { -1, -17 } )

   // combobox
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_VISIBLE + WIN_WS_TABSTOP + CBS_DROPDOWNLIST + WIN_WS_BORDER + WIN_WS_VSCROLL
   oControl:ClassName := "COMBOBOX"
   oControl:Create( , , { -5, -41 }, { -6, -17 } )

   // groupbox
   oGroupbox := wvgControl():new()
   oGroupbox:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_TABSTOP + BS_GROUPBOX + WIN_WS_EX_TRANSPARENT
   oGroupbox:ClassName := "BUTTON"
   oGroupbox:Caption := "Compiler"
   oGroupbox:Create( , , { -7, -41 }, { -4, -17 } )

   //oGroupbox:ToBack()

   // radiobutton
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_TABSTOP + BS_AUTORADIOBUTTON
   oControl:Caption := "Harbour"
   oControl:ClassName := "BUTTON"
   oControl:Create( , , { -8, -43 }, { -1, -14 } )

   // radiobutton
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_TABSTOP + BS_AUTORADIOBUTTON
   oControl:Caption := "Clipper"
   oControl:ClassName := "BUTTON"
   oControl:Create( , , { -9, -43 }, { -1, -14 } )

   // radiobutton
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_TABSTOP + BS_AUTORADIOBUTTON
   oControl:Caption := "Xbase++"
   oControl:ClassName := "BUTTON"
   oControl:Create( , , { -10, -43 }, { -1, -14 } )

   // text
   oControl := wvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + SS_LEFT
   oControl:ClassName := "STATIC"
   oControl:Caption := "Scrollable Text"
   oControl:Create( , , { -12, -41 }, { -1, -18 } )

   // text
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_TABSTOP + ES_AUTOHSCROLL + WIN_WS_BORDER
   oControl:Caption := "This is Text Field"
   oControl:ClassName := "EDIT"
   oControl:Create( , , { -13, -41 }, { -1, -18 } )

   // text
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + SS_LEFT
   oControl:ClassName := "STATIC"
   oControl:Caption := "Right Justified Numerics"
   oControl:Create( , , { -14, -41 }, { -1, -18 } )

   // edit
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_TABSTOP + ES_AUTOHSCROLL + ES_NUMBER + ES_RIGHT + WIN_WS_BORDER
   oControl:Caption := "1234567"
   oControl:ClassName := "EDIT"
   oControl:Create( , , { -15, -41 }, { -1, -18 } )

   // button
   oControl := WvgControl():New()
   oControl:Style := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_TABSTOP + BS_PUSHBUTTON
   oControl:ClassName := "BUTTON"
   oControl:Caption := "OK"
   oControl:Create( , , { -18, -50 }, { -1, -8 } )

   Inkey(0)
   RETURN


STATIC FUNCTION GetEditText()
   RETURN ;
      "Welcome in the Wonderful World of Harbour!" + ;
      hb_eol() + hb_eol() + ;
      "When Peter Rees first published GTWVT, a Windows " + ;
      "Terminal Driver, on 22 Dec 2003, everybody took it " + ;
      "lightly, except for me, as I was aware that what " + ;
      "wonderful contribution to Harbour he has made, " + ;
      "what immense possibilities he has opened for Harbour " + ;
      "developers, what limitations he has cleared for Cl*pper " + ;
      "savvy user base." + ;
      hb_eol() + hb_eol() + ;
      "With a little effort I could extend GTWVT " + ;
      "to give it a GUI look. I also tried to give it " + ;
      "an event driven functionality, and up came Wvt*Classes." + ;
      hb_eol() + hb_eol() + ;
      "And yet another feather is added in the cap of GTWVT " + ;
      "as it is now capable of firing modeless dialogs like the one " + ;
      "you are viewing. These dialogs can be constructed dynamically ( Courtesy hbwhat ) " + ;
      "at run time or can be one of resources. At present 20 such dialogs " + ;
      "can be active at any given time. Also note that dialogs created " + ;
      "dynamically respect Top, Left, Rows, Cols coordinates, which is an " + ;
      "undisputed productivity boost!" + ;
      hb_eol() + hb_eol() + ;
      "Enjoy!" + hb_eol() + ;
      "Pritpal Bedi, INDIA"
Nota:
Os "gets" funcionam, mas tudo é componente GUI, e usado encima de uma tela padrão da GTWVG.
O fonte de teste mistura o que deveria ser parte da classe/controle, é só pra teste mesmo.
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Só comentário:
Depois que postei, vi que esta parte está errada, apesar de não fazer uso dela:

Código: Selecionar todos

METHOD PROCEDURE Wvgcontrol:destroy() 
    // LOCAL hOldFont 
    ::wvgWindow:destroy() 
    // hOldFont := ::SendMessage( WIN_WM_GETFONT ) 
    // wapi_DestroyObject( hOldFont ) 
    RETURN 
Como vou "perguntar para o controle" qual é o fonte usado, se o controle foi destruído?
São coisas desse tipo que devem causar GPF.... rs
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Outro teste, só por curiosidade:

Código: Selecionar todos

   oControl := TstComboBox():New()
   oControl:Create( , , { -5, -41 }, { -6, -17 } )
   oControl:SendMessage( CB_ADDSTRING, 0, "First" )
   oControl:SendMessage( CB_ADDSTRING, 0, "Second" )
   oControl:SendMessage( CB_ADDSTRING, 0, "Third" )
   oControl:SendMessage( CB_ADDSTRING, 0, "Fourth" )
   oControl:SendMessage( CB_ADDSTRING, 0, "Fifth" )
o :SendMessage equivale à API do Windows:

Código: Selecionar todos

wapi_SendMessage( ::hWnd, CB_ADDSTRING, 0, "text" )
é enviar uma mensagem ao controle. hWnd é a identificação da janela no Windows.
A mensagem é do tipo CB_ADDSTRING, que é pra adicionar um texto.
Isso serve pra acrescentar elementos ao combobox.
Foi só um teste, a gtwvg já tem um combobox pronto.
O resultado do fonte acima foi este:
combobox.png
combobox.png (2.06 KiB) Exibido 5681 vezes
Tudo isso se refere aos controles prontos do Windows.
Também dá pra alterar parcialmente ou totalmente o que já existe, pra ter mais recursos ou novos visuais.

Temos que aproveitar enquanto não limitam internet, pra pesquisar sobre essas coisas.
Uma LIB cheia de recursos, fazendo parte do Harbour, será interessante.
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

LIB console imitando gráfico

Mensagem por JoséQuintas »

A brincadeira continua..... rs
Agora com calendário.
gtwvg.png
Nota: só testando visual default, e por mais incrível que pareça, SEM USAR NENHUM CONTROLE EXISTENTE da GTWVG.
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