Diferença GTWVG x outras

GTWVG com API Windows somente no Harbour.
No Harbouir 3.4 está sendo usado pointer, aonde no 3.2 é numérico.

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

Diferença GTWVG x outras

Mensagem por JoséQuintas »

O que comento das LIBs...
vamos pegar a progressbar.

na HWGUI:

Código: Selecionar todos

METHOD New( oWndParent, nId, nLeft, nTop, nWidth, nHeight, maxPos, nRange, bInit, bSize, bPaint, ctooltip, nAnimation, lVertical ) CLASS HProgressBar

   ::Style := IIF( lvertical != NIL .AND. lVertical, PBS_VERTICAL, 0 )
   ::Style += IIF( nAnimation != NIL .AND. nAnimation > 0, PBS_MARQUEE, 0 )
   ::nAnimation := nAnimation

   ::Super:New( oWndParent, nId, ::Style, nLeft, nTop, nWidth, nHeight,, bInit, bSize, bPaint, ctooltip )

   ::maxPos  := Iif( maxPos != NIL .AND. maxPos != 0, maxPos, 20 )
   ::lNewBox := .F.
   ::nRange := Iif( nRange != NIL .AND. nRange != 0, nRange, 100 )
   ::nLimit := Int( ::nRange/::maxPos )

   ::Activate()

   RETURN SELF
...
HB_FUNC( HWG_UPDATEPROGRESSBAR )
{
   SendMessage( ( HWND ) HB_PARHANDLE( 1 ), PBM_STEPIT, 0, 0 );
}

HB_FUNC( HWG_SETPROGRESSBAR )
{
   SendMessage( ( HWND ) HB_PARHANDLE( 1 ), PBM_SETPOS,
         ( WPARAM ) hb_parni( 2 ), 0 );
}

HB_FUNC( HWG_SETRANGEPROGRESSBAR )
{

   SendMessage( ( HWND ) HB_PARHANDLE( 1 ), PBM_SETRANGE, 0, MAKELPARAM( 0, hb_parni( 2 ) ) );
   SendMessage( ( HWND ) HB_PARHANDLE( 1 ), PBM_SETSTEP, 1 , 0 );
}
Criação na HMG Extended... o que mata é variável pública e o maldito array.

Código: Selecionar todos


   PUBLIC &mVar. := k

   _HMG_aControlType [k] := "PROGRESSBAR"
   _HMG_aControlNames [k] :=  ControlName
   _HMG_aControlHandles  [k] :=  ControlHandle
   _HMG_aControlParentHandles [k] :=  ParentFormHandle
   _HMG_aControlIds  [k] :=  nId
   _HMG_aControlProcedures  [k] :=  ""
   _HMG_aControlPageMap  [k] :=  {}
   _HMG_aControlValue  [k] :=  Value
   _HMG_aControlInputMask  [k] :=  ""
   _HMG_aControllostFocusProcedure  [k] :=  ""
   _HMG_aControlGotFocusProcedure  [k] :=  ""
   _HMG_aControlChangeProcedure  [k] :=  ""
   _HMG_aControlDeleted  [k] :=  FALSE
   _HMG_aControlBkColor  [k] :=  BackColor
   _HMG_aControlFontColor  [k] :=  BarColor
   _HMG_aControlDblClick  [k] :=  ""
   _HMG_aControlHeadClick  [k] :=  {}
   _HMG_aControlRow  [k] :=  y
   _HMG_aControlCol   [k] := x
   _HMG_aControlWidth  [k] :=  w
   _HMG_aControlHeight   [k] := h
   _HMG_aControlSpacing   [k] := 0
   _HMG_aControlContainerRow  [k] :=  iif ( _HMG_FrameLevel > 0 , _HMG_ActiveFrameRow [_HMG_FrameLevel] , -1 )
   _HMG_aControlContainerCol  [k] :=  iif ( _HMG_FrameLevel > 0 , _HMG_ActiveFrameCol [_HMG_FrameLevel] , -1 )
   _HMG_aControlPicture  [k] :=  ""
   _HMG_aControlContainerHandle  [k] :=  0
   _HMG_aControlFontName [k] :=   ''
   _HMG_aControlFontSize  [k] :=  0
   _HMG_aControlFontAttributes  [k] :=  { FALSE, FALSE, FALSE, FALSE }
   _HMG_aControlToolTip  [k] :=   tooltip
   _HMG_aControlRangeMin  [k] :=   Lo
   _HMG_aControlRangeMax  [k] :=   Hi
   _HMG_aControlCaption  [k] :=   ''
   _HMG_aControlVisible  [k] :=   iif( invisible, FALSE, TRUE )
   _HMG_aControlHelpId  [k] :=   HelpId
   _HMG_aControlFontHandle  [k] :=   0
   _HMG_aControlBrushHandle  [k] :=   0
   _HMG_aControlEnabled  [k] :=   .T.
   _HMG_aControlMiscData1 [k] := 0
   _HMG_aControlMiscData2 [k] := ''

e tem o fonte C

Código: Selecionar todos

HB_FUNC( INITPROGRESSBAR )
{
   HWND hwnd;
   HWND hbutton;

   int Style = WS_CHILD;

   INITCOMMONCONTROLSEX i;

   i.dwSize = sizeof( INITCOMMONCONTROLSEX );
   i.dwICC  = ICC_PROGRESS_CLASS;
   InitCommonControlsEx( &i );

   hwnd = ( HWND ) HB_PARNL( 1 );

   if( hb_parl( 9 ) )
      Style = Style | PBS_VERTICAL;

   if( hb_parl( 10 ) )
      Style = Style | PBS_SMOOTH;

   if( ! hb_parl( 11 ) )
      Style = Style | WS_VISIBLE;

   hbutton = CreateWindowEx
             (
      WS_EX_CLIENTEDGE,
      PROGRESS_CLASS,
      0,
      Style,
      hb_parni( 3 ),
      hb_parni( 4 ),
      hb_parni( 5 ),
      hb_parni( 6 ),
      hwnd,
      ( HMENU ) HB_PARNL( 2 ),
      g_hInstance,
      NULL
             );

   SendMessage( hbutton, PBM_SETRANGE, 0, MAKELONG( hb_parni( 7 ), hb_parni( 8 ) ) );
   SendMessage( hbutton, PBM_SETPOS, ( WPARAM ) hb_parni( 12 ), 0 );

   HB_RETNL( ( LONG_PTR ) hbutton );
}
na GTWVG:

Código: Selecionar todos

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
...
METHOD PROCEDURE WvgProgressBar:setCaption( cCaption )

   IF HB_ISSTRING( cCaption )
      ::Caption := cCaption
   ENDIF
   IF HB_ISSTRING( ::Caption )
      ::sendMessage( WIN_WM_SETTEXT, 0, ::Caption )
   ENDIF

   RETURN

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

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

   RETURN ::sendMessage( PBM_GETPOS, 0, 0 )

METHOD PROCEDURE WvgProgressBar:SetCOlorBarFG( nColor )

   IF HB_ISNUMERIC( nColor )
      ::sendMessage( PBM_SETBARCOLOR, 0, nColor )
   ENDIF

   RETURN

METHOD PROCEDURE WvgProgressBar:SetColorBarBG( nColor )

   IF HB_ISNUMERIC( nColor )
      ::sendMessage( PBM_SETBKCOLOR, 0, nColor )
   ENDIF

   RETURN
Reparem que é tudo a mesma coisa.
Todos usam a classe de API do Windows pra criar janela e enviar mensagens.
A diferença é: na GTWVG é mais PRG, criar janela é por PRG, enviar mensagens pra progressbar é por PRG.

Vantagem que vejo: menos fonte C pra causar incompatibilidade, e PRG para o usuário "brincar".

Desvantagem que vejo no geral: as LIBs tem fonte C, pra fazer o que o Harbour já tem pronto e não precisa de C, são fontes repetidos que poderiam ser padronizados.
Até onde pode ir essa padronização? não sei, mas com certeza nem a parte básica foi tentada.

E comentário adicional: é o mesmo controle da GTWVG, não deixaria nada a desejar pra outras LIBs, ao contrário, por ser baseada em linha/coluna, automaticamente terá o recurso de redimensionamento automático.
Linha e coluna é pra console? Não, o próprio VB6 tem ESCALA pra ser usada em formulários e não ficar preso a pixels, trata-se apenas de uma escala de medida.
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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Diferença GTWVG x outras

Mensagem por sygecom »

Zé,
De fato hoje em dia unificar isso tudo seria lindo.
Algumas coisa do Harbour são recente e a Hwgui e outras lib grafica já tinha a anos essas e outras funcionalidades, outro ponto de vista é se usar as rotinas do harbour e resolverem mudar algo no Harbour, tudo para de funcionar, usando assim duplicado na lib grafica, a chande de dar algo errado sem manutenção da mesma é mais difícil.
Mas se ponto de vista é ótimo no geral.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Diferença GTWVG x outras

Mensagem por JoséQuintas »

se usar as rotinas do harbour e resolverem mudar algo no Harbour, tudo para de funcionar,
Talvez falte uma versão fechada pra download.
Como só tem a última, é tudo ou nada.....
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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Diferença GTWVG x outras

Mensagem por sygecom »

JoséQuintas escreveu:
se usar as rotinas do harbour e resolverem mudar algo no Harbour, tudo para de funcionar,
Talvez falte uma versão fechada pra download.
Como só tem a última, é tudo ou nada.....
Resumiu bem agora, a versão fechada já está bem desatualizada.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Diferença GTWVG x outras

Mensagem por microvolution »

sygecom escreveu:hoje em dia unificar isso tudo seria lindo.
boa noite!
é o que eu venho tentando dizer há muito tempo... aliás a primeira vez que tentei migrar pra harbour foi em 2003 e achei muito difícil.
a segunda com um sucesso CONSOLE foi em 2015 onde tudo já estava mais fácil do que em 2003 - onde eu estava passando problemas pessoais e a cabeça não estava aquem de aprender...
Mas, penso que poderia ser assim:
harbour: ter tudo dentro dele;
as LIBs: terem apenas o necessário para elas funcionarem - como um complemento do harbour ou xharbour - como queiram;
e todas as LIBs: GTWVG, WVG, HWGUI, HMG, HMGE, OOHG, etc - "sei lá se tem mais", terem um padrão entre elas, ou seja, o que eu fizer numa, faria na outra. "Sei lá cê intendi?"
rsrs
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Diferença GTWVG x outras

Mensagem por microvolution »

ah! esqueci de mencionar, que o Viktor em seu site: https://github.com/vszakats/harbour-core atualizou no final de 2017 2 LIBs a GTWVW e GTWVG, alguém já tentou usar?
como ainda não assimilei as coisas, fico perdido em como usar o material dele, que inclusive a GTWVW ele criou um DOC em português.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Responder