Clipper On Line • Ver Tópico - Diferença GTWVG x outras
Página 1 de 1

Diferença GTWVG x outras

MensagemEnviado: 07 Jan 2018 12:10
por JoséQuintas
O que comento das LIBs...
vamos pegar a progressbar.

na HWGUI:
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.


   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

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:

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.

Diferença GTWVG x outras

MensagemEnviado: 07 Jan 2018 17:11
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.

Diferença GTWVG x outras

MensagemEnviado: 07 Jan 2018 20:53
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.....

Diferença GTWVG x outras

MensagemEnviado: 07 Jan 2018 22:01
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.

Diferença GTWVG x outras

MensagemEnviado: 02 Fev 2018 19:53
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

Diferença GTWVG x outras

MensagemEnviado: 02 Fev 2018 19:55
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.