Clipper On Line • Ver Tópico - Diferença GTWVG x outras

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

 

Diferença GTWVG x outras

Mensagempor JoséQuintas » 07 Jan 2018 12:10

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Diferença GTWVG x outras

Mensagempor sygecom » 07 Jan 2018 17:11

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
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Diferença GTWVG x outras

Mensagempor JoséQuintas » 07 Jan 2018 20:53

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Diferença GTWVG x outras

Mensagempor sygecom » 07 Jan 2018 22:01

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
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Diferença GTWVG x outras

Mensagempor microvolution » 02 Fev 2018 19:53

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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Diferença GTWVG x outras

Mensagempor microvolution » 02 Fev 2018 19:55

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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes




Retornar para GTWVG

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro