Clipper On Line • Ver Tópico - Divertido testar hmg exended

Divertido testar hmg exended

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Divertido testar hmg exended

Mensagempor Claudio Soto » 30 Jan 2017 14:00

En el código anterior se muestran los mensajes de respuesta de la app, pero lo realmente importante en el desarrollo de una lib GUI es como recepciona los msg de Windows, los procesa y los dirige a la ventana o al control apropiado, esta es la parte más difícil e importante en una lib GUI, lo demás son respuestas predefinidas a esto primero.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 30 Jan 2017 18:17

tal es así que creo que su desarrollo fue abandonado


Quando chega em conhecimento de linguagem C, não tenho como fazer.
O que fiz pra Harbour 3.4 não funciona no 3.2, simplesmente porque precisa conversão C.
No Harbour 3.4 funciona tamanho * 0.8, mas no Harbour 3.2 não, por causa do tipo numérico que é retornado.

lo realmente importante en el desarrollo de una lib GUI es como recepciona los msg de Windows, los procesa y los dirige a la ventana o al control apropiado, esta es la parte más difícil e importante en una lib GUI


Se esssa é a parte mais difícil... ótimo... talvez esteja adiantado na GTWVG.
Talvez até de uma forma até mais interessante do que na HMG.
Os controles wvg* usam API, tal qual os controles HMG

METHOD WvgTabPage:handleEvent( nMessage, aNM )

   LOCAL aHdr

   DO CASE
   CASE nMessage == HB_GTE_SETFOCUS
      IF HB_ISEVALITEM( ::sl_tabActivate )
         RETURN EVENT_HANDLED
      ENDIF

   CASE nMessage == HB_GTE_COMMAND

   CASE nMessage == HB_GTE_RESIZED
      ::sendMessage( WIN_WM_SIZE, 0, 0 )
      RETURN EVENT_HANDLED

   CASE nMessage == HB_GTE_NOTIFY
      aHdr := wvg_GetNMHdrInfo( aNM[ 2 ] )

      DO CASE
      CASE aHdr[ NMH_code ] == -551 /* TCN_SELCHANGE */
      ENDCASE

   CASE nMessage == HB_GTE_CTLCOLOR
      RETURN wapi_GetStockObject( WIN_NULL_BRUSH )

   ENDCASE

   RETURN EVENT_UNHANDLED


É isso que venho falando faz tempo.
A GTWVG tem a resposta pra tudo.
NÃO ADIANTA OLHAR OS EXEMPLOS. Eles não mostram NADA do que ela é capaz de fazer.
Apenas não foi dada importância à parte GUI, mas está lá.
Por exemplo, esse tabpage, nem sequer existe exemplo de uso.

Antes existia a GTWVT, que era bem mais estilo console.
Ela faz parte da lib GTWVG, e a maioria dos exemplos faz uso dela.

Pode ser interessante dar uma olhada, talvez começando pelo wnd.prg, que é a base de tudo, a criação de janelas.
Talvez falte uma DIALOG, pra gerenciar todos os controles que já existem, e os próximos, em ambiente realmente GUI.

Outro fonte, parthldr.prg (part handler) veja se não lhe é familiar

/* This will be called by the WvgCrt() console for various events to be propogated to child controls */
METHOD WvgPartHandler:notifier( nEvent, xParams )

   LOCAL aPos, aMenuItem, nIndex, nCtrlID, oObj
   LOCAL nReturn := 0

   DO CASE
   CASE nEvent == HB_GTE_MOUSE

      DO CASE
      CASE xParams[ 1 ] == WIN_WM_MOUSEHOVER
         aPos := { xParams[ 3 ], xParams[ 4 ] }
      CASE xParams[ 1 ] == WIN_WM_MOUSELEAVE
         /* Nothing */
      OTHERWISE
         aPos := iif( ::mouseMode == 2, { xParams[ 3 ], xParams[ 4 ] }, { xParams[ 5 ], xParams[ 6 ] } )
      ENDCASE

      SWITCH xParams[ 1 ]
      CASE WIN_WM_MOUSEHOVER
         IF HB_ISEVALITEM( ::sl_enter )
            Eval( ::sl_enter, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_MOUSELEAVE
         IF HB_ISEVALITEM( ::sl_leave )
            Eval( ::sl_leave, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_RBUTTONDOWN
         IF HB_ISEVALITEM( ::sl_rbDown )
            Eval( ::sl_rbDown, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_LBUTTONDOWN
         IF HB_ISEVALITEM( ::sl_lbDown )
            Eval( ::sl_lbDown, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_RBUTTONUP
         IF HB_ISEVALITEM( ::sl_rbUp )
            Eval( ::sl_rbUp, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_LBUTTONUP
         IF HB_ISEVALITEM( ::sl_lbUp )
            Eval( ::sl_lbUp, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_RBUTTONDBLCLK
         IF HB_ISEVALITEM( ::sl_rbDblClick )
            Eval( ::sl_rbDblClick, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_LBUTTONDBLCLK
         IF HB_ISEVALITEM( ::sl_lbDblClick )
            Eval( ::sl_lbDblClick, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_MBUTTONDOWN
         IF HB_ISEVALITEM( ::sl_mbDown )
            Eval( ::sl_mbDown, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_MBUTTONUP
         IF HB_ISEVALITEM( ::sl_mbClick )
            Eval( ::sl_mbClick, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_MBUTTONDBLCLK
         IF HB_ISEVALITEM( ::sl_mbDblClick )
            Eval( ::sl_mbDblClick, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_MOUSEMOVE
         IF HB_ISEVALITEM( ::sl_motion )
            Eval( ::sl_motion, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_MOUSEWHEEL
         IF HB_ISEVALITEM( ::sl_wheel )
            Eval( ::sl_wheel, aPos, , Self )
         ENDIF
         EXIT
      CASE WIN_WM_NCMOUSEMOVE
         EXIT
      ENDSWITCH


No final, trata-se de ambiente GUI sub-utilizado.

Se olhar os exemplos da GTWVG, nem dá pra ver que tudo isso existe.
Fizeram muitos exemplos da parte "não gui", que acabam escondendo o que realmente interessa.
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 30 Jan 2017 18:29

Só mais esta parte, trata o caso de um controle interceptar suas próprias mensagens do Windows

/* This will be called if a control is assigned its own WndProc via ::SetWindowProcCallback() */
METHOD WvgPartHandler:controlWndProc( hWnd, nMessage, nwParam, nlParam )

   LOCAL nCtrlID, nNotifctn, hWndCtrl, nObj, aMenuItem, oObj, nReturn

   SWITCH nMessage

   CASE WIN_WM_ERASEBKGND
      IF ::objType == objTypeDA .AND. ! Empty( ::hBrushBG )
         ::handleEvent( HB_GTE_CTLCOLOR, { wvg_n2p( nwParam ), wvg_n2p( nlParam ) } )
      ENDIF
      EXIT

   CASE WIN_WM_COMMAND
      nCtrlID   := wapi_LOWORD( nwParam )
      nNotifctn := wapi_HIWORD( nwParam )
      hWndCtrl  := wvg_n2p( nlParam )

      IF Empty( hWndCtrl )                   /* It is menu */
         IF HB_ISOBJECT( ::oMenu )
            IF ! Empty( aMenuItem := ::oMenu:FindMenuItemById( nCtrlID ) )
               IF HB_ISEVALITEM( aMenuItem[ 2 ] )
                  Eval( aMenuItem[ 2 ], aMenuItem[ 1 ], , aMenuItem[ 4 ] )
               ELSEIF HB_ISEVALITEM( aMenuItem[ 3 ] )
                  Eval( aMenuItem[ 3 ], aMenuItem[ 1 ], , aMenuItem[ 4 ] )
               ENDIF
            ENDIF
         ENDIF
         RETURN EVENT_HANDLED
      ELSE
         IF ( nObj := AScan( ::aChildren, {| o | o:nID == nCtrlID } ) ) > 0
            nReturn := ::aChildren[ nObj ]:handleEvent( HB_GTE_COMMAND, { nNotifctn, nCtrlID, hWndCtrl } )
            IF HB_ISNUMERIC( nReturn ) .AND. nReturn == 0
               RETURN EVENT_HANDLED
            ENDIF
         ENDIF
      ENDIF
      EXIT

   CASE WIN_WM_NOTIFY
      IF ( nObj := AScan( ::aChildren, {| o | o:nID == nwParam } ) ) > 0
         nReturn := ::aChildren[ nObj ]:handleEvent( HB_GTE_NOTIFY, { nwParam, wvg_n2p( nlParam ) } )
         IF HB_ISNUMERIC( nReturn ) .AND. nReturn == EVENT_HANDLED
            RETURN EVENT_HANDLED
         ELSEIF HB_ISLOGICAL( nReturn )
            RETURN nReturn
         ENDIF
      ENDIF
      EXIT

   CASE WIN_WM_CTLCOLORLISTBOX
   CASE WIN_WM_CTLCOLORMSGBOX
   CASE WIN_WM_CTLCOLOREDIT
   CASE WIN_WM_CTLCOLORBTN
   CASE WIN_WM_CTLCOLORDLG
   CASE WIN_WM_CTLCOLORSCROLLBAR
   CASE WIN_WM_CTLCOLORSTATIC
      oObj := ::findObjectByHandle( wvg_n2p( nlParam ) )
      IF HB_ISOBJECT( oObj )
         nReturn := oObj:handleEvent( HB_GTE_CTLCOLOR, { wvg_n2p( nwParam ), wvg_n2p( nlParam ) } )
         IF HB_ISNUMERIC( nReturn ) .AND. nReturn == EVENT_UNHANDLED
            RETURN wapi_CallWindowProc( ::nOldProc, hWnd, nMessage, nwParam, nlParam )
         ELSE
            RETURN nReturn
         ENDIF
      ENDIF
      EXIT

   CASE WIN_WM_HSCROLL
      ::handleEvent( HB_GTE_HSCROLL, { wapi_LOWORD( nwParam ), wapi_HIWORD( nwParam ), wvg_n2p( nlParam ) } )
      RETURN EVENT_HANDLED

   CASE WIN_WM_VSCROLL
      IF ::handleEvent( HB_GTE_VSCROLL, { wapi_LOWORD( nwParam ), wapi_HIWORD( nwParam ), wvg_n2p( nlParam ) } ) == EVENT_HANDLED
         RETURN EVENT_HANDLED
      ENDIF
      EXIT

   CASE WIN_WM_CAPTURECHANGED
      EXIT
#if 0
   CASE WIN_WM_MOUSEMOVE
      IF ::objType == objTypeScrollBar
         IF ! ::lTracking
            ::lTracking := wvg_BeginMouseTracking( ::hWnd )
         ENDIF
      ENDIF
      EXIT

   CASE WIN_WM_MOUSEHOVER
      IF ::objType == objTypeScrollBar
         IF ::oParent:objType == objTypeCrt
            wapi_SetFocus( ::oParent:pWnd )
         ENDIF
         RETURN EVENT_HANDLED
      ENDIF
      EXIT

   CASE WIN_WM_MOUSELEAVE
      IF ::objType == objTypeScrollBar
         ::lTracking := .F.
         IF ::oParent:objType == objTypeCrt
            wapi_SetFocus( ::oParent:pWnd )
         ENDIF
      ENDIF
      EXIT
#endif

   CASE WIN_WM_VKEYTOITEM
   CASE WIN_WM_CHARTOITEM
      ::handleEvent( HB_GTE_ANY, { nMessage, nwParam, wvg_n2p( nlParam ) } )
      EXIT

   OTHERWISE
      IF ::handleEvent( HB_GTE_ANY, { nMessage, nwParam, wvg_n2p( nlParam ) } ) == EVENT_HANDLED
         RETURN EVENT_HANDLED
      ENDIF
      EXIT

   ENDSWITCH

   RETURN wapi_CallWindowProc( ::nOldProc, hWnd, nMessage, nwParam, nlParam )


É ou não é um ambiente GUI sub-utilizado?
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Divertido testar hmg exended

Mensagempor Claudio Soto » 30 Jan 2017 21:42

José no estoy tratado de convencerte de nada simplemente traté de explicar lo que se sobre programación en Windows. Las gt son muy sencillas de implementar en comparacion con las lib tradicionales por lo limitado de su funcionamiento y estructura, por ejemplo es imposible crear una lib tradicional sin usar un array pública y pretender tener un control total sobre todos los componentes GUI creados. Pero adelante con tu idea, muchas cosas se lograron porque alguien pensó que era posible o almenos no sabía que era imposible. rs rs
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 31 Jan 2017 10:07

es imposible crear una lib tradicional sin usar un array pública y pretender tener un control total sobre todos los componentes GUI creados


Não concordo, ou talvez estejamos falando de coisas diferentes.
O que há de controle total ao usar um activex?
Não é o controle activex responsável por tudo que tem dentro dele?

Porque não basta fazer o mesmo com cada janela?
frm main conhecer apenas o que tem dentro dele
frm auxiliar conhecer apenas o que tem dentro dele
Isso não seria equivalente ao controle que é feito para um activex?
Ou estou errado?
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Divertido testar hmg exended

Mensagempor Claudio Soto » 31 Jan 2017 10:21

El ActiveX son una encapsulacion de funciones del api creadas por microsoft que es tipo caja negra, son de muy alto nivel y es algo totalmente fuera del control del usuario, son fáciles de usar pero muy limitadas. En cambio usando directo las api de Windows como lo hacen las lib GUI tradicionales se puede tener un control total del sistema.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 31 Jan 2017 17:28

Infelizmente não consigo provar nada sem ajuda, porque sempre acaba envolvendo rotina em C.

Alguma sugestão de como isso poderia ser provado?
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Divertido testar hmg exended

Mensagempor Claudio Soto » 31 Jan 2017 22:16

José, explícame bien que es lo que quieres y el fin de semana te preparo un ejemplo.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Divertido testar hmg exended

Mensagempor Claudio Soto » 31 Jan 2017 23:02

José, si quieres ir probando baja HMG oficial
http://www.hmgforum.com/viewtopic.php?f=43&t=4738

Y coloca Set MainFirst off al inicio de la función main y no crees ninguna ventana tipo main.
Fíjate en source/debugger que hay un ejemplo de como hacerlo.

Fíjate en los fuentes que existen dos archivos, uno es puro Hb y el otro es la parte HMG, fíjate como se crea la ventana del debugger en este último. Pero activa las ventanas con el Active Windows normal (como en los demo), no uses el Active Windows como esta en el debugger.

PD: ahora me acuerdo, tenes que poder hacer lo mismo en HMG Ex. porque ese debugger Grigory lo adaptó parcialmente a HMG Extended, digo parcialmente porque hay cosas que sólo existen en HMG oficial.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 01 Fev 2017 18:10

O debugger, seria o mesmo normal do Harbour? ou é outro?
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 01 Fev 2017 18:54

Essa linha do main não deu certo.

demo.prg(9) Error E0030 Syntax error "syntax error at 'MAINFIRST'"

Quanto ao DEBUG... Estamos falando de Harbour.
Só não mostrou o fonte do FMG.
Mas nem precisa console.
Se não viu antes, veja minigui usando GTWVG pra debug.
Estou usando o samples/basics/multiwin com ajuste pra debug.

#include "hmg.ch"

Function Main

  hb_gtReload( "WVG" )
   SetMode( 33, 100 )
   CLS
   Inkey(0)
   Load Window Main
   Center Window Main
   Activate Window Main

Return

FUNCTION hb_GtSys
   REQUEST HB_GT_WVG_DEFAULT
   RETURN NIL


mgcompile *.prg -b -lgtwvg -I. -gui
Anexos
debug.png
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 01 Fev 2017 19:09

Me enganei.
Não dá certo, porque temos uma nova janela Windows com o debug.
Essa janela a mais não é prevista na ação geral da HMG, talvez até seja considerada a Main.

demo2.png
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 01 Fev 2017 19:16

Retirei o GT_RELOAD(), pensando se tratar de multithread, mas não adiantou.
Num momento ou outro acaba naquele erro.
Só dá certo por console mesmo.

Talvez seja a rotina da HMG que trata os eventos de janela, e considera a janela da GTWVG como sendo mais uma das janelas da HMG, sendo que não é.
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Divertido testar hmg exended

Mensagempor Claudio Soto » 01 Fev 2017 19:51

El debugger no es el de Hb, los dbg para Hb que existen no funcionan correctamente en modo GUI debido al lazo de msg de Windows. El debugger de HMG es un debugger que desarrolle especialmente para superar las limitaciones de los otros. En la doc esta como usarlo

http://www.hmgforum.com/hmgdoc/data/index.htm
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Divertido testar hmg exended

Mensagempor JoséQuintas » 01 Fev 2017 20:33

Foi falta de atenção minha.

Mas continuo não seguindo o manual..... rs

usando meu BAT, compilando o samples\basics\multiwin
precisei indicar a pasta atual como include, pra buscar FMG, e a lib do debugger.

mgcompile *.prg -b -I. -ldebugger


debughmg.png


Sem problemas quanto às imagens, devo não ter incluído os arquivos RC nos BATs.
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: 18159
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Anterior Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 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