LIB console imitando gráfico
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
LIB console imitando gráfico
Não sei se interessa pra alguém.
Acabei indo parar nessa página hoje.
Além do manual do Harbour, tem essa LIB, com fontes no github.
Parece ser modo texto, sem LIB gráfica.
http://harbour.edu.pl/hbtui/en/menu.html
Acabei indo parar nessa página hoje.
Além do manual do Harbour, tem essa LIB, com fontes no github.
Parece ser modo texto, sem LIB gráfica.
http://harbour.edu.pl/hbtui/en/menu.html
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/
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/
LIB console imitando gráfico
Interessante, lembra o visual do Windows 3.1, será que não tem nada de gráfico? No Clipper até 5.2 sempre quisemos ter esse visual e somente a visual.lib assemelhava-se.
Até+
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
Ruben Dario
- Usuário Nível 3

- Mensagens: 127
- Registrado em: 14 Jun 2015 23:19
- Localização: Colombia
LIB console imitando gráfico
Interesante, el Harbour Text User Interface , pero no hay documentacion de como se usa, estan los titulos pero no muestra, nada, los ejemplos son pantallas y no hay codigo de ejemplo.
Alguine tiene, ejemplos practicos, y documentacion.
Alguine tiene, ejemplos practicos, y documentacion.
- viniciuspc
- Usuário Nível 1

- Mensagens: 40
- Registrado em: 19 Dez 2006 17:18
- Localização: Rio de Janeiro
LIB console imitando gráfico
Achei bem interessante tbm! ficou bonito!
Ficando de olho nas futuras alterações (#-)
Tem um papo rolando aqui https://groups.google.com/forum/#!topic ... vnTZUjYCqc

:xau
Ficando de olho nas futuras alterações (#-)
Tem um papo rolando aqui https://groups.google.com/forum/#!topic ... vnTZUjYCqc

:xau
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
LIB console imitando gráfico
Olá Quintas,
Qual é a página no github que contém os fontes e lib?
Qual é a página no github que contém os fontes e lib?
►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)
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)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
LIB console imitando gráfico
Muito legal,
Estive acompanhando a assunto do Harbour ter sua própria LIB GRAFICA, está quase saindo... se todas as LIB reunidas em força tarefa em um projeto só, teria uma ótima LIB gráfica no Harbour.
Estive acompanhando a assunto do Harbour ter sua própria LIB GRAFICA, está quase saindo... se todas as LIB reunidas em força tarefa em um projeto só, teria uma ótima LIB gráfica no Harbour.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- viniciuspc
- Usuário Nível 1

- Mensagens: 40
- Registrado em: 19 Dez 2006 17:18
- Localização: Rio de Janeiro
LIB console imitando gráfico
Asimoes :
tem neste link https://groups.google.com/forum/#!topic ... vnTZUjYCqc
mas especificamente :
This is part of a project that Rafal and I started, it's aimed to have a full TUI for Harbour, the project is hosted in github, and everyone is invited to participate:
https://github.com/tfonrouge/HBTui
:xau
tem neste link https://groups.google.com/forum/#!topic ... vnTZUjYCqc
mas especificamente :
This is part of a project that Rafal and I started, it's aimed to have a full TUI for Harbour, the project is hosted in github, and everyone is invited to participate:
https://github.com/tfonrouge/HBTui
:xau
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
LIB console imitando gráfico
Ola!
O mais promissor para mim é baseado na QT, HBQT... mas temos também a mais velha Hwgui, que roda no Linux via GTK, Android via classe java...
Esta é mais uma que surgiu e é nova. A Minigui tem também mas só para windows... e outras tantas mais velhas como a OOHG e a Marinas Gui via HBQT...
E essa é mais simples somente texto, mas não roda em todos os OS's, iguais a essa tem a GTWVG,GTWIN,GTWVW... bem mais velhas e com muitos problemas resolvidos, lembrando que só rodam no ambiente Windows.
O calcanhar de Aquiles de todas elas é a portabilidade...e a facilidade de uso, a tal IDE que usamos para desenhar as telas.
Como os gurus do Harbour usam Linux para desenvolver e o GCC como compilador padrão... Criar uma LIB gráfica padrão no Harbour é difícil, temos que verificar outras que já estão a mais tempo nesse caminho, observarmos por exemplo o pessoal do Lazarus pois a IDE deles é multiplataforma.
Saudações,
Itamar M. Lins Jr.
Não tem como agradar a todos.se todas as LIB reunidas em força tarefa em um projeto só, teria uma ótima LIB gráfica no Harbour.
O mais promissor para mim é baseado na QT, HBQT... mas temos também a mais velha Hwgui, que roda no Linux via GTK, Android via classe java...
Esta é mais uma que surgiu e é nova. A Minigui tem também mas só para windows... e outras tantas mais velhas como a OOHG e a Marinas Gui via HBQT...
E essa é mais simples somente texto, mas não roda em todos os OS's, iguais a essa tem a GTWVG,GTWIN,GTWVW... bem mais velhas e com muitos problemas resolvidos, lembrando que só rodam no ambiente Windows.
O calcanhar de Aquiles de todas elas é a portabilidade...e a facilidade de uso, a tal IDE que usamos para desenhar as telas.
Como os gurus do Harbour usam Linux para desenvolver e o GCC como compilador padrão... Criar uma LIB gráfica padrão no Harbour é difícil, temos que verificar outras que já estão a mais tempo nesse caminho, observarmos por exemplo o pessoal do Lazarus pois a IDE deles é multiplataforma.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
LIB console imitando gráfico
Resumindo, tudo é uma questão de gosto, hmg, minigui extended, hwgui e demais.... utilize a que mais lhe convém.
►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)
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)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
LIB console imitando gráfico
Depois de olhar GTWVG, OOHG, HWGUI, e outras...
Meu ponto de vista atual é o seguinte:
Não precisa LIB, precisa funções de API prontas pra uso com Harbour.
A partir daí, qualquer um poderia criar sua própria LIB usando apenas Harbour.
Claro, dizer isso é exagero, porque não é fácil criar uma LIB.
Mas seria o ponto de partida pra unificar todas as LIBs, ou pelo menos deixar tudo disponível pra todos.
Vi isso ao alterar algumas coisas da GTWVG.
No Harbour 3.2 não consegui fazer as alterações que havia feito no Harbour 3.4.
No Harbour 3.2:
A GTWVG usa rotinas genéricas em C, não compatíveis com Habour.
Daria pra alterar, com mais rotinas em C, mas não tenho conhecimento pra isso.
No Harbour 3.4:
O Viktor passou várias funções em C pra hbwin, compatíveis com Harbour.
Usei apenas fonte PRG nas alterações.
Usar a API do Windows requer o uso de conteúdos não existentes no Harbour.
Por isso precisa conversão de algumas coisas.
Ou se usam funções C pra isso, o que limita ao conhecimento de um programador C
Ou se usam funções C compatíveis, onde um programador C cria essa função compatível e fica liberada pra usar no PRG.
Ou, não sei se é possível, a cada chamada da API usar essa conversão no PRG.
Tudo bem, continua complicado criar uma LIB, mas abre a possibilidade do próprio usuário "brincar" com isso.
Sem a função compatível, mesmo que esteja tudo certo, pode não funcionar, porque o tipo de parâmetro é inválido.
Nota: este é meu ponto de vista atual, não sei a quantidade de funções compatíveis que seriam necessárias, ou se todas podem ficar compatíveis.
Só sei que o esqueleto de GTWVG, OOHG, e HWGUI são parecidos.
Como cada uma tem suas próprias funções em C, e meu conhecimento de C é zero, não consigo aproveitar funções de uma pra outra.
Meu ponto de vista atual é o seguinte:
Não precisa LIB, precisa funções de API prontas pra uso com Harbour.
A partir daí, qualquer um poderia criar sua própria LIB usando apenas Harbour.
Claro, dizer isso é exagero, porque não é fácil criar uma LIB.
Mas seria o ponto de partida pra unificar todas as LIBs, ou pelo menos deixar tudo disponível pra todos.
Vi isso ao alterar algumas coisas da GTWVG.
No Harbour 3.2 não consegui fazer as alterações que havia feito no Harbour 3.4.
No Harbour 3.2:
A GTWVG usa rotinas genéricas em C, não compatíveis com Habour.
Daria pra alterar, com mais rotinas em C, mas não tenho conhecimento pra isso.
No Harbour 3.4:
O Viktor passou várias funções em C pra hbwin, compatíveis com Harbour.
Usei apenas fonte PRG nas alterações.
Usar a API do Windows requer o uso de conteúdos não existentes no Harbour.
Por isso precisa conversão de algumas coisas.
Ou se usam funções C pra isso, o que limita ao conhecimento de um programador C
Ou se usam funções C compatíveis, onde um programador C cria essa função compatível e fica liberada pra usar no PRG.
Ou, não sei se é possível, a cada chamada da API usar essa conversão no PRG.
Tudo bem, continua complicado criar uma LIB, mas abre a possibilidade do próprio usuário "brincar" com isso.
Sem a função compatível, mesmo que esteja tudo certo, pode não funcionar, porque o tipo de parâmetro é inválido.
Nota: este é meu ponto de vista atual, não sei a quantidade de funções compatíveis que seriam necessárias, ou se todas podem ficar compatíveis.
Só sei que o esqueleto de GTWVG, OOHG, e HWGUI são parecidos.
Como cada uma tem suas próprias funções em C, e meu conhecimento de C é zero, não consigo aproveitar funções de uma pra outra.
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/
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/
LIB console imitando gráfico
Na minha opinião, o que é legado clipper tenta converter para harbour e deixa do jeito que tá, se tem tempo construa um novo ai pode ser qq lib
►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)
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)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
LIB console imitando gráfico
Ola!
Na Hwgui temos algumas funções genéricas, tanto para Linux ou Windows, mas no nível mais baixo, usando o C, temos praticamente duas HWGUI´s.
Até nas funções que usamos tem parâmetros para usarmos na GTK e que não tem no Windows e vice-versa.
Temos a pasta \source\winapi e outra de nome \source\GTK.
Por exemplo o fonte menu.prg para GTK:
[/code]
E o menu.prg para API do windows:
Fora os dois programas em C, menu.c que tem para windows e para Linux...
Resumindo, fazer dois, três programas para poder o programador final não ficar limitado a somente um sistema operacional... Eu ainda continuo apostando no HTML e nos navegadores para fazer isso, pois cada fabricante quer dominar tudo, mas sempre criando mais divisões...
No Linux temos os pessoal do QT e do GTK, Gnome x KDE... no Windows temos as API´s, no Androide o Java... a divisão ou dificuldade já vem dos OS´s e não dos criadores de IDE´s...
Quem deseja criar uma IDE multiplataforma tem que saber disso tudo e mais um pouco... Somente LIB´s gráficas e semi gráficas que usam as API´s do "OS" Windows já temos muitas e nem assim conseguem unificar em uma só, imagine no outro nível que é o dos OS´s Linux x Windows x Android x OSX... ?
Poderiam trabalhar na Hwgui por exemplo e melhorarem ela pois já tem muita coisa pronta, mas...
Sem falar na visão equivocada de querer tratar (programar) no Windows como se fosse no (DOS)clipper... tornar a GTWVG por exemplo compatível (igual) a Hwgui ou Minigui ou OOHG, que não tem nada a ver.
Saudações,
Itamar M. Lins Jr.
Na Hwgui temos algumas funções genéricas, tanto para Linux ou Windows, mas no nível mais baixo, usando o C, temos praticamente duas HWGUI´s.
Até nas funções que usamos tem parâmetros para usarmos na GTK e que não tem no Windows e vice-versa.
Temos a pasta \source\winapi e outra de nome \source\GTK.
Por exemplo o fonte menu.prg para GTK:
Código: Selecionar todos
/*
* $Id: menu.prg 2497 2015-11-18 15:05:34Z alkresin $
*
* HWGUI - Harbour Linux (GTK) GUI library source code:
* Prg level menu functions
*
* Copyright 2004 Alexander S.Kresin <alex@kresin.ru>
* www - http://www.kresin.ru
*/
#include "hbclass.ch"
#include "hwgui.ch"
#define MENU_FIRST_ID 32000
#define CONTEXTMENU_FIRST_ID 32900
#define FLAG_DISABLED 1
#define FLAG_CHECK 2
STATIC _aMenuDef, _oWnd, _aAccel, _nLevel, _Id, _oMenu, _oBitmap, _lContext, hLast
/*
STATIC aKeysTable := { { VK_F1,GDK_F1 }, { VK_F2,GDK_F2 }, { VK_F3,GDK_F3 }, ;
{ VK_F4, GDK_F4 }, { VK_F5, GDK_F5 }, { VK_F6, GDK_F6 }, { VK_F7, GDK_F7 }, ;
{ VK_F8, GDK_F8 }, { VK_F9, GDK_F9 }, { VK_F10, GDK_F10 }, { VK_F11, GDK_F11 }, ;
{ VK_F12, GDK_F12 }, { VK_HOME, GDK_Home }, { VK_LEFT, GDK_Left }, { VK_END, GDK_End }, ;
{ VK_RIGHT, GDK_Right }, { VK_DOWN, GDK_Down }, { VK_UP, GDK_Up } }
*/
CLASS HMenu INHERIT HObject
DATA handle
DATA aMenu
METHOD New() INLINE Self
METHOD End() INLINE Hwg_DestroyMenu( ::handle )
METHOD Show( oWnd, xPos, yPos, lWnd )
ENDCLASS
METHOD Show( oWnd ) CLASS HMenu
IF oWnd == Nil
oWnd := HWindow():GetMain()
ENDIF
oWnd:oPopup := Self
Hwg_trackmenu( ::handle )
RETURN Nil
FUNCTION Hwg_CreateMenu
LOCAL hMenu
IF ( Empty( hMenu := hwg__CreateMenu() ) )
RETURN Nil
ENDIF
RETURN { {}, , , hMenu }
FUNCTION Hwg_SetMenu( oWnd, aMenu )
IF !Empty( oWnd:handle )
IF hwg__SetMenu( oWnd:handle, aMenu[5] )
oWnd:menu := aMenu
ELSE
RETURN .F.
ENDIF
ELSE
oWnd:menu := aMenu
ENDIF
RETURN .T.
/*
* AddMenuItem( aMenu,cItem,nMenuId,lSubMenu,[bItem] [,nPos] ) --> aMenuItem
*
* If nPos is omitted, the function adds menu item to the end of menu,
* else it inserts menu item in nPos position.
*/
FUNCTION Hwg_AddMenuItem( aMenu, cItem, nMenuId, lSubMenu, bItem, nPos )
LOCAL hSubMenu
IF nPos == Nil
nPos := Len( aMenu[1] ) + 1
ENDIF
hSubMenu := hLast := aMenu[5]
hSubMenu := hwg__AddMenuItem( hSubMenu, cItem, nPos - 1, hwg_Getactivewindow(), nMenuId, , lSubMenu )
IF nPos > Len( aMenu[1] )
IF lSubmenu
AAdd( aMenu[1], { {}, cItem, nMenuId, 0, hSubMenu } )
ELSE
AAdd( aMenu[1], { bItem, cItem, nMenuId, 0, hSubMenu } )
ENDIF
RETURN ATail( aMenu[1] )
ELSE
AAdd( aMenu[1], Nil )
AIns( aMenu[1], nPos )
IF lSubmenu
aMenu[ 1,nPos ] := { {}, cItem, nMenuId, 0, hSubMenu }
ELSE
aMenu[ 1,nPos ] := { bItem, cItem, nMenuId, 0, hSubMenu }
ENDIF
RETURN aMenu[ 1,nPos ]
ENDIF
RETURN Nil
FUNCTION Hwg_FindMenuItem( aMenu, nId, nPos )
LOCAL nPos1, aSubMenu
nPos := 1
DO WHILE nPos <= Len( aMenu[1] )
IF aMenu[ 1,npos,3 ] == nId
RETURN aMenu
ELSEIF ValType( aMenu[ 1,npos,1 ] ) == "A"
IF ( aSubMenu := Hwg_FindMenuItem( aMenu[ 1,nPos ] , nId, @nPos1 ) ) != Nil
nPos := nPos1
RETURN aSubMenu
ENDIF
ENDIF
nPos ++
ENDDO
RETURN Nil
FUNCTION Hwg_GetSubMenuHandle( aMenu, nId )
LOCAL aSubMenu := Hwg_FindMenuItem( aMenu, nId )
RETURN iif( aSubMenu == Nil, 0, aSubMenu[5] )
FUNCTION hwg_BuildMenu( aMenuInit, hWnd, oWnd, nPosParent, lPopup )
LOCAL hMenu, nPos, aMenu, i, oBmp
IF nPosParent == Nil
IF lPopup == Nil .OR. !lPopup
hMenu := hwg__CreateMenu()
ELSE
hMenu := hwg__CreatePopupMenu()
ENDIF
aMenu := { aMenuInit, , , , hMenu }
ELSE
hMenu := aMenuInit[5]
nPos := Len( aMenuInit[1] )
aMenu := aMenuInit[ 1,nPosParent ]
hMenu := hwg__AddMenuItem( hMenu, aMenu[2], nPos + 1, hWnd, aMenu[3], aMenu[4], .T. )
IF Len( aMenu ) < 5
AAdd( aMenu, hMenu )
ELSE
aMenu[5] := hMenu
ENDIF
ENDIF
nPos := 1
DO WHILE nPos <= Len( aMenu[1] )
IF ValType( aMenu[ 1,nPos,1 ] ) == "A"
hwg_BuildMenu( aMenu, hWnd, , nPos )
ELSE
IF aMenu[ 1,nPos,1 ] == Nil .OR. aMenu[ 1,nPos,2 ] != Nil
IF Len( aMenu[1,npos] ) == 4
AAdd( aMenu[1,npos], Nil )
ENDIF
aMenu[1,npos,5] := hwg__AddMenuItem( hMenu, aMenu[1,npos,2], ;
nPos, hWnd, aMenu[1,nPos,3], aMenu[1,npos,4], .F. )
ENDIF
ENDIF
nPos ++
ENDDO
IF !_lContext .AND. hWnd != Nil .AND. oWnd != Nil
Hwg_SetMenu( oWnd, aMenu )
ELSEIF _oMenu != Nil
_oMenu:handle := aMenu[5]
_oMenu:aMenu := aMenu
ENDIF
RETURN Nil
FUNCTION Hwg_BeginMenu( oWnd, nId, cTitle )
LOCAL aMenu, i
IF oWnd != Nil
_lContext := .F.
_aMenuDef := {}
_aAccel := {}
_oBitmap := {}
_oWnd := oWnd
_oMenu := Nil
_nLevel := 0
_Id := iif( nId == Nil, MENU_FIRST_ID, nId )
ELSE
nId := iif( nId == Nil, ++ _Id, nId )
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := Atail( aMenu )[1]
NEXT
_nLevel ++
IF !Empty( cTitle )
cTitle := StrTran( cTitle, "\t", "" )
cTitle := StrTran( cTitle, "&", "_" )
ENDIF
AAdd( aMenu, { {}, cTitle, nId, 0 } )
ENDIF
RETURN .T.
FUNCTION Hwg_ContextMenu()
_lContext := .T.
_aMenuDef := {}
_oBitmap := {}
_oWnd := Nil //HWindow():GetMain()
_nLevel := 0
_Id := CONTEXTMENU_FIRST_ID
_oMenu := HMenu():New()
RETURN _oMenu
FUNCTION Hwg_EndMenu()
IF _nLevel > 0
_nLevel --
ELSE
hwg_BuildMenu( AClone( _aMenuDef ), iif( _oWnd != Nil,_oWnd:handle,HWindow():Getmain():handle ), ;
_oWnd, , _lContext )
IF _oWnd != Nil .AND. !Empty( _aAccel )
_oWnd:hAccel := hwg_Createacceleratortable( _oWnd )
ENDIF
_aMenuDef := Nil
_oBitmap := Nil
_aAccel := Nil
_oWnd := Nil
_oMenu := Nil
ENDIF
RETURN .T.
FUNCTION Hwg_DefineMenuItem( cItem, nId, bItem, lDisabled, accFlag, accKey, lBitmap, lResource, lCheck )
LOCAL aMenu, i, oBmp, nFlag
lCheck := iif( lCheck == Nil, .F. , lCheck )
lDisabled := iif( lDisabled == Nil, .T. , !lDisabled )
nFlag := Hwg_BitOr( iif( lCheck,FLAG_CHECK,0 ), iif( lDisabled,0,FLAG_DISABLED ) )
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := Atail( aMenu )[1]
NEXT
nId := iif( nId == Nil .AND. cItem != Nil, ++ _Id, nId )
IF !Empty( cItem )
cItem := StrTran( cItem, "\t", "" )
cItem := StrTran( cItem, "&", "_" )
ENDIF
AAdd( aMenu, { bItem, cItem, nId, nFlag, 0 } )
IF accFlag != Nil .AND. accKey != Nil
AAdd( _aAccel, { accFlag, accKey, nId } )
ENDIF
/*
IF lBitmap!=Nil .or. !Empty(lBitmap)
if lResource==Nil ;lResource:=.F.; Endif
if !lResource
oBmp:=HBitmap():AddFile(lBitmap)
else
oBmp:=HBitmap():AddResource(lBitmap)
endif
Aadd( _oBitmap, {.t., oBmp:Handle,cItem,nId} )
Else
Aadd( _oBitmap, {.F., "",cItem, nID})
Endif
*/
RETURN .T.
FUNCTION Hwg_DefineAccelItem( nId, bItem, accFlag, accKey )
LOCAL aMenu, i
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := Atail( aMenu )[1]
NEXT
nId := iif( nId == Nil, ++ _Id, nId )
AAdd( aMenu, { bItem, Nil, nId, .T., 0 } )
AAdd( _aAccel, { accFlag, accKey, nId } )
RETURN .T.
STATIC FUNCTION hwg_Createacceleratortable( oWnd )
LOCAL hTable := hwg__Createacceleratortable( oWnd:handle )
LOCAL i, nPos, aSubMenu, nKey, n
FOR i := 1 TO Len( _aAccel )
IF ( aSubMenu := Hwg_FindMenuItem( oWnd:menu, _aAccel[i,3], @nPos ) ) != Nil
IF ( nKey := _aAccel[i,2] ) >= 65 .AND. nKey <= 90
nKey += 32
ELSE
nKey := hwg_gtk_convertkey( nKey )
ENDIF
hwg__AddAccelerator( hTable, aSubmenu[1,nPos,5], _aAccel[i,1], nKey )
ENDIF
NEXT
RETURN hTable
STATIC FUNCTION GetMenuByHandle( hWnd )
LOCAL i, aMenu, oDlg
IF hWnd == Nil
aMenu := HWindow():GetMain():menu
ELSE
IF ( oDlg := HDialog():FindDialog( hWnd ) ) != Nil
aMenu := oDlg:menu
ELSEIF ( i := Ascan( HDialog():aModalDialogs,{ |o|Valtype(o:handle)==Valtype(hwnd) .AND. o:handle == hWnd } ) ) != 0
aMenu := HDialog():aModalDialogs[i]:menu
ELSEIF ( i := Ascan( HWindow():aWindows,{ |o|Valtype(o:handle)==Valtype(hwnd) .AND. o:handle==hWnd } ) ) != 0
aMenu := HWindow():aWindows[i]:menu
ENDIF
ENDIF
RETURN aMenu
FUNCTION hwg_CheckMenuItem( hWnd, nId, lValue )
LOCAL aMenu, aSubMenu, nPos
aMenu := GetMenuByHandle( hWnd )
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
hwg__CheckMenuItem( aSubmenu[1,nPos,5], lValue )
ENDIF
ENDIF
RETURN Nil
FUNCTION hwg_IsCheckedMenuItem( hWnd, nId )
LOCAL aMenu, aSubMenu, nPos, lRes := .F.
aMenu := GetMenuByHandle( hWnd )
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
lRes := hwg__IsCheckedMenuItem( aSubmenu[1,nPos,5] )
ENDIF
ENDIF
RETURN lRes
FUNCTION hwg_EnableMenuItem( hWnd, nId, lValue )
LOCAL aMenu, aSubMenu, nPos
IF Valtype( hWnd ) == "O" .AND. __ObjHasMsg( hWnd, "AMENU" )
aMenu := hWnd:aMenu
ELSE
aMenu := GetMenuByHandle( iif( hWnd == Nil,HWindow():GetMain():handle,hWnd ) )
ENDIF
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
hwg__EnableMenuItem( aSubmenu[1,nPos,5], lValue )
ENDIF
ENDIF
RETURN Nil
FUNCTION hwg_IsEnabledMenuItem( hWnd, nId )
LOCAL aMenu, aSubMenu, nPos
aMenu := GetMenuByHandle( iif( hWnd == Nil,HWindow():GetMain():handle,hWnd ) )
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
hwg__IsEnabledMenuItem( aSubmenu[1,nPos,5] )
ENDIF
ENDIF
RETURN Nil
/*
* hwg_SetMenuCaption( hMenu, nMenuId, cCaption )
*/
FUNCTION hwg_SetMenuCaption( hWnd, nId, cText )
LOCAL aMenu, aSubMenu, nPos
aMenu := GetMenuByHandle( hWnd )
IF aMenu != Nil
IF ( aSubMenu := Hwg_FindMenuItem( aMenu, nId, @nPos ) ) != Nil
hwg__SetMenuCaption( aSubmenu[1,nPos,5], cText )
ENDIF
ENDIF
RETURN Nil
FUNCTION hwg_DeleteMenuItem( oWnd, nId )
LOCAL aSubMenu, nPos
IF ( aSubMenu := Hwg_FindMenuItem( oWnd:menu, nId, @nPos ) ) != Nil
hwg__DeleteMenu( aSubmenu[1,nPos,5], nId )
ADel( aSubMenu[ 1 ], nPos )
ASize( aSubMenu[ 1 ], Len( aSubMenu[ 1 ] ) - 1 )
ENDIF
RETURN Nil
FUNCTION hwg_gtk_convertkey( nKey )
LOCAL n
IF nKey >= 65 .AND. nKey <= 90
nKey += 32
/*
ELSEIF ( n := Ascan( aKeysTable, { |a|a[1] == nKey } ) ) > 0
nKey := aKeysTable[n,2]
ELSE
nKey += 0xFF00
*/
ENDIF
RETURN nKey
E o menu.prg para API do windows:
Código: Selecionar todos
/*
* $Id: menu.prg 2086 2013-06-23 12:57:56Z alkresin $
*
* HWGUI - Harbour Win32 GUI library source code:
* Prg level menu functions
*
* Copyright 2001 Alexander S.Kresin <alex@kresin.ru>
* www - http://www.kresin.ru
*/
#include "windows.ch"
#include "hbclass.ch"
#include "guilib.ch"
#define MENU_FIRST_ID 32000
#define CONTEXTMENU_FIRST_ID 32900
#define FLAG_DISABLED 1
#define FLAG_CHECK 2
STATIC _aMenuDef, _oWnd, _aAccel, _nLevel, _Id, _oMenu, _oBitmap
CLASS HMenu INHERIT HObject
DATA handle
DATA aMenu
METHOD New() INLINE Self
METHOD END() INLINE Hwg_DestroyMenu( ::handle )
METHOD Show( oWnd, xPos, yPos, lWnd )
ENDCLASS
METHOD Show( oWnd, xPos, yPos, lWnd ) CLASS HMenu
LOCAL aCoor
oWnd:oPopup := Self
IF PCount() == 1 .OR. lWnd == Nil .OR. ! lWnd
IF PCount() == 1
aCoor := hwg_GetCursorPos()
xPos := aCoor[ 1 ]
yPos := aCoor[ 2 ]
ENDIF
Hwg_trackmenu( ::handle, xPos, yPos, oWnd:handle )
ELSE
aCoor := hwg_Clienttoscreen( oWnd:handle, xPos, yPos )
Hwg_trackmenu( ::handle, aCoor[ 1 ], aCoor[ 2 ], oWnd:handle )
ENDIF
RETURN Nil
FUNCTION Hwg_CreateMenu
LOCAL hMenu
IF Empty( hMenu := hwg__CreateMenu() )
RETURN Nil
ENDIF
RETURN { { },,, hMenu }
FUNCTION Hwg_SetMenu( oWnd, aMenu )
IF ! Empty( oWnd:handle )
IF hwg__SetMenu( oWnd:handle, aMenu[ 5 ] )
oWnd:menu := aMenu
ELSE
RETURN .F.
ENDIF
ELSE
oWnd:menu := aMenu
ENDIF
RETURN .T.
/*
* AddMenuItem( aMenu,cItem,nMenuId,lSubMenu,[bItem] [,nPos] ) --> aMenuItem
*
* If nPos is omitted, the function adds menu item to the end of menu,
* else it inserts menu item in nPos position.
*/
FUNCTION Hwg_AddMenuItem( aMenu, cItem, nMenuId, lSubMenu, bItem, nPos )
LOCAL hSubMenu
IF nPos == Nil
nPos := Len( aMenu[ 1 ] ) + 1
ENDIF
hSubMenu := aMenu[ 5 ]
hSubMenu := hwg__AddMenuItem( hSubMenu, cItem, nPos - 1, .T., nMenuId,, lSubMenu )
IF nPos > Len( aMenu[ 1 ] )
IF lSubMenu
AAdd( aMenu[ 1 ], { { }, cItem, nMenuId, 0, hSubMenu } )
ELSE
AAdd( aMenu[ 1 ], { bItem, cItem, nMenuId, 0 } )
ENDIF
RETURN ATail( aMenu[ 1 ] )
ELSE
AAdd( aMenu[ 1 ], Nil )
AIns( aMenu[ 1 ], nPos )
IF lSubMenu
aMenu[ 1, nPos ] := { { }, cItem, nMenuId, 0, hSubMenu }
ELSE
aMenu[ 1, nPos ] := { bItem, cItem, nMenuId, 0 }
ENDIF
RETURN aMenu[ 1, nPos ]
ENDIF
RETURN Nil
FUNCTION Hwg_FindMenuItem( aMenu, nId, nPos )
LOCAL nPos1, aSubMenu
nPos := 1
DO WHILE nPos <= Len( aMenu[ 1 ] )
IF aMenu[ 1, nPos, 3 ] == nId
RETURN aMenu
ELSEIF Len( aMenu[ 1, nPos ] ) > 4
IF ( aSubMenu := Hwg_FindMenuItem( aMenu[ 1, nPos ] , nId, @nPos1 ) ) != Nil
nPos := nPos1
RETURN aSubMenu
ENDIF
ENDIF
nPos ++
ENDDO
RETURN Nil
FUNCTION Hwg_GetSubMenuHandle( aMenu, nId )
LOCAL aSubMenu := Hwg_FindMenuItem( aMenu, nId )
RETURN IIf( aSubMenu == Nil, 0, aSubMenu[ 5 ] )
FUNCTION hwg_BuildMenu( aMenuInit, hWnd, oWnd, nPosParent, lPopup )
LOCAL hMenu, nPos, aMenu, oBmp
IF nPosParent == Nil
IF lPopup == Nil .OR. ! lPopup
hMenu := hwg__CreateMenu()
ELSE
hMenu := hwg__CreatePopupMenu()
ENDIF
aMenu := { aMenuInit,,,, hMenu }
ELSE
hMenu := aMenuInit[ 5 ]
nPos := Len( aMenuInit[ 1 ] )
aMenu := aMenuInit[ 1, nPosParent ]
/* This code just for sure menu runtime hfrmtmpl.prg is enable */
IIf( ValType( aMenu[ 4 ] ) == "L", aMenu[ 4 ] := .f., )
hMenu := hwg__AddMenuItem( hMenu, aMenu[ 2 ], nPos + 1, .T., aMenu[ 3 ], aMenu[ 4 ], .T. )
IF Len( aMenu ) < 5
AAdd( aMenu, hMenu )
ELSE
aMenu[ 5 ] := hMenu
ENDIF
ENDIF
nPos := 1
DO WHILE nPos <= Len( aMenu[ 1 ] )
IF ValType( aMenu[ 1, nPos, 1 ] ) == "A"
hwg_BuildMenu( aMenu,,, nPos )
ELSE
IF aMenu[ 1, nPos, 1 ] == Nil .OR. aMenu[ 1, nPos, 2 ] != Nil
/* This code just for sure menu runtime hfrmtmpl.prg is enable */
IIf( ValType( aMenu[ 1, nPos, 4 ] ) == "L", aMenu[ 1, nPos, 4 ] := .f., )
hwg__AddMenuItem( hMenu, aMenu[ 1, nPos, 2 ], nPos, .T., ;
aMenu[ 1, nPos, 3 ], aMenu[ 1, nPos, 4 ], .F. )
oBmp := Hwg_SearchPosBitmap( aMenu[ 1, nPos, 3 ] )
IF oBmp[ 1 ]
hwg__Setmenuitembitmaps( hMenu, aMenu[ 1, nPos, 3 ], oBmp[ 2 ], "" )
ENDIF
ENDIF
ENDIF
nPos ++
ENDDO
IF hWnd != Nil .AND. oWnd != Nil
Hwg_SetMenu( oWnd, aMenu )
ELSEIF _oMenu != Nil
_oMenu:handle := aMenu[ 5 ]
_oMenu:aMenu := aMenu
ENDIF
RETURN Nil
FUNCTION Hwg_BeginMenu( oWnd, nId, cTitle )
LOCAL aMenu, i
IF oWnd != Nil
_aMenuDef := { }
_aAccel := { }
_oBitmap := { }
_oWnd := oWnd
_oMenu := Nil
_nLevel := 0
_Id := IIf( nId == Nil, MENU_FIRST_ID, nId )
ELSE
nId := IIf( nId == Nil, ++ _Id, nId )
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := ATail( aMenu )[ 1 ]
NEXT
_nLevel ++
AAdd( aMenu, { { }, cTitle, nId, 0 } )
ENDIF
RETURN .T.
FUNCTION Hwg_ContextMenu()
_aMenuDef := { }
_oBitmap := { }
_oWnd := Nil
_nLevel := 0
_Id := CONTEXTMENU_FIRST_ID
_oMenu := HMenu():New()
RETURN _oMenu
FUNCTION Hwg_EndMenu()
IF _nLevel > 0
_nLevel --
ELSE
hwg_BuildMenu( AClone( _aMenuDef ), IIf( _oWnd != Nil, _oWnd:handle, Nil ), ;
_oWnd,, IIf( _oWnd != Nil, .F., .T. ) )
IF _oWnd != Nil .AND. _aAccel != Nil .AND. ! Empty( _aAccel )
_oWnd:hAccel := hwg_Createacceleratortable( _aAccel )
ENDIF
_aMenuDef := Nil
_oBitmap := Nil
_aAccel := Nil
_oWnd := Nil
_oMenu := Nil
ENDIF
RETURN .T.
FUNCTION Hwg_DefineMenuItem( cItem, nId, bItem, lDisabled, accFlag, accKey, lBitmap, lResource, lCheck )
LOCAL aMenu, i, oBmp, nFlag
lCheck := IIf( lCheck == Nil, .F., lCheck )
lDisabled := IIf( lDisabled == Nil, .f., lDisabled )
nFlag := Hwg_BitOr( IIf( lCheck, FLAG_CHECK, 0 ), IIf( lDisabled, FLAG_DISABLED, 0 ) )
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := ATail( aMenu )[ 1 ]
NEXT
IF ! Empty( cItem )
cItem := StrTran( cItem, "\t", Chr( 9 ) )
ENDIF
nId := IIf( nId == Nil .AND. cItem != Nil, ++ _Id, nId )
AAdd( aMenu, { bItem, cItem, nId, nFlag } )
IF lBitmap != Nil .or. ! Empty( lBitmap )
IF lResource == Nil ;lResource := .F. ; ENDIF
IF ! lResource
oBmp := HBitmap():AddFile( lBitmap )
ELSE
oBmp := HBitmap():AddResource( lBitmap )
ENDIF
AAdd( _oBitmap, { .t., oBmp:Handle, cItem, nId } )
ELSE
AAdd( _oBitmap, { .F., "", cItem, nId } )
ENDIF
IF accFlag != Nil .AND. accKey != Nil
AAdd( _aAccel, { accFlag, accKey, nId } )
ENDIF
RETURN .T.
FUNCTION Hwg_DefineAccelItem( nId, bItem, accFlag, accKey )
LOCAL aMenu, i
aMenu := _aMenuDef
FOR i := 1 TO _nLevel
aMenu := ATail( aMenu )[ 1 ]
NEXT
nId := IIf( nId == Nil, ++ _Id, nId )
AAdd( aMenu, { bItem, Nil, nId, 0 } )
AAdd( _aAccel, { accFlag, accKey, nId } )
RETURN .T.
FUNCTION Hwg_SetMenuItemBitmaps( aMenu, nId, abmp1, abmp2 )
LOCAL aSubMenu := Hwg_FindMenuItem( aMenu, nId )
LOCAL oMenu := aSubMenu
oMenu := IIf( aSubMenu == Nil, 0, aSubMenu[ 5 ] )
hwg__Setmenuitembitmaps( oMenu, nId, abmp1, abmp2 )
RETURN Nil
FUNCTION Hwg_InsertBitmapMenu( aMenu, nId, lBitmap, oResource )
LOCAL aSubMenu := Hwg_FindMenuItem( aMenu, nId )
LOCAL oMenu := aSubMenu, oBmp
//Serge(seohic) sugest
IF oResource == Nil .or. ! oResource
oBmp := HBitmap():AddFile( lBitmap )
ELSE
oBmp := HBitmap():AddResource( lBitmap )
ENDIF
oMenu := IIf( aSubMenu == Nil, 0, aSubMenu[ 5 ] )
HWG__InsertBitmapMenu( oMenu, nId, oBmp:handle )
RETURN Nil
FUNCTION Hwg_SearchPosBitmap( nPos_Id )
LOCAL nPos := 1, lBmp := { .F., "" }
IF _oBitmap != Nil
DO WHILE nPos <= Len( _oBitmap )
IF _oBitmap[ nPos ][ 4 ] == nPos_Id
lBmp := { _oBitmap[ nPos ][ 1 ], _oBitmap[ nPos ][ 2 ], _oBitmap[ nPos ][ 3 ] }
ENDIF
nPos ++
ENDDO
ENDIF
RETURN lBmp
FUNCTION hwg_DeleteMenuItem( oWnd, nId )
LOCAL aSubMenu, nPos
IF ( aSubMenu := Hwg_FindMenuItem( oWnd:menu, nId, @nPos ) ) != Nil
ADel( aSubMenu[ 1 ], nPos )
ASize( aSubMenu[ 1 ], Len( aSubMenu[ 1 ] ) - 1 )
hwg_DeleteMenu( hwg_Getmenuhandle( oWnd:handle ), nId )
ENDIF
RETURN Nil
Resumindo, fazer dois, três programas para poder o programador final não ficar limitado a somente um sistema operacional... Eu ainda continuo apostando no HTML e nos navegadores para fazer isso, pois cada fabricante quer dominar tudo, mas sempre criando mais divisões...
No Linux temos os pessoal do QT e do GTK, Gnome x KDE... no Windows temos as API´s, no Androide o Java... a divisão ou dificuldade já vem dos OS´s e não dos criadores de IDE´s...
Quem deseja criar uma IDE multiplataforma tem que saber disso tudo e mais um pouco... Somente LIB´s gráficas e semi gráficas que usam as API´s do "OS" Windows já temos muitas e nem assim conseguem unificar em uma só, imagine no outro nível que é o dos OS´s Linux x Windows x Android x OSX... ?
Poderiam trabalhar na Hwgui por exemplo e melhorarem ela pois já tem muita coisa pronta, mas...
Sem falar na visão equivocada de querer tratar (programar) no Windows como se fosse no (DOS)clipper... tornar a GTWVG por exemplo compatível (igual) a Hwgui ou Minigui ou OOHG, que não tem nada a ver.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
LIB console imitando gráfico
A história sempre foi essa.
Já tem até linguagem de programação da Microsoft pra Linux.
Daqui a pouco vai ter Windows pra Linux.
O problema é um só:
No Harbour evitam código Windows.
Nas LIBs, elas acabam criando seu próprio código C, não compatível com Harbour, pra fazer o que precisa.
Além disso, mesmo que o Harbour tenha essas funções, as LIBs precisam ter compatibilidade com Harbour antigo, xHarbour, etc.
Vão continuar precisando código fonte em C específico.
Citei a GTWVG porque ela faz parte do Harbour, e por estar "crua", dá pra decidir pra que lado avançar.
Esse negócio de Open Source não dá muito certo, porque ao invés de centralizar os esforços, eles se espalham.
No final o Viktor fez mais pra essa centralização do que qualquer um, mesmo não sendo pra essa finalidade.
Fez isso ao centralizar muita coisa na hbwin.
Mas se isso nem sequer foi aproveitado no Harbour 3.2, o que dizer sobre as LIBs.
Por isso na escolha das LIBs eu decidi por MySQL e ADO.
Porque é compatível com qualquer LINGUAGEM DE PROGRAMAÇÃO.
Já tem até linguagem de programação da Microsoft pra Linux.
Daqui a pouco vai ter Windows pra Linux.
O problema é um só:
No Harbour evitam código Windows.
Nas LIBs, elas acabam criando seu próprio código C, não compatível com Harbour, pra fazer o que precisa.
Além disso, mesmo que o Harbour tenha essas funções, as LIBs precisam ter compatibilidade com Harbour antigo, xHarbour, etc.
Vão continuar precisando código fonte em C específico.
Citei a GTWVG porque ela faz parte do Harbour, e por estar "crua", dá pra decidir pra que lado avançar.
Esse negócio de Open Source não dá muito certo, porque ao invés de centralizar os esforços, eles se espalham.
No final o Viktor fez mais pra essa centralização do que qualquer um, mesmo não sendo pra essa finalidade.
Fez isso ao centralizar muita coisa na hbwin.
Mas se isso nem sequer foi aproveitado no Harbour 3.2, o que dizer sobre as LIBs.
Por isso na escolha das LIBs eu decidi por MySQL e ADO.
Porque é compatível com qualquer LINGUAGEM DE PROGRAMAÇÃO.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
LIB console imitando gráfico
Meu conhecimento é limitado, então não dá pra fazer grandes avanços.
Quando chega na parte que precisa inteiro, inteiro longo, etc.... isso não tem no Harbour, mas a API precisa disso.
Não é nenhum controle existente, criei um multicontrole e estou fazendo testes.
O progressbar ainda não funcionou, apesar da criação no fonte, não aparece na tela.
E eu nunca mexi com isso. Deve ser moleza pra quem conhece.
Quando chega na parte que precisa inteiro, inteiro longo, etc.... isso não tem no Harbour, mas a API precisa disso.
Não é nenhum controle existente, criei um multicontrole e estou fazendo testes.
O progressbar ainda não funcionou, apesar da criação no fonte, não aparece na tela.
Código: Selecionar todos
PROCEDURE Main
LOCAL nCont
SetColor( "W/B,W/GR+,,,W/B" )
SetMode( 33, 80 )
CLS
FOR nCont = 1 TO 5
CreateControl( nCont )
NEXT
Inkey(0)
RETURN
STATIC FUNCTION CreateControl( nCont )
LOCAL oControl
oControl := wvgControl():New()
DO CASE
CASE nCont == 1; oControl:WindowsControlName := "GROUPBOX"; oControl:Caption := "Groupbox"
CASE nCont == 2; oControl:WindowsControlName := "FRAME"
CASE nCont == 3; oControl:WindowsControlName := "PUSHBUTTON"; oControl:Caption := "PushButton"
CASE nCont == 4; oControl:WindowsControlName := "IMAGE"; oControl:Caption := "Image"
CASE nCont == 5; oControl:WindowsControlName := "PROGRESSBAR"; oControl:Caption := "ProgressBar"
ENDCASE
oControl:Create( , , { -( nCont * 5 ), -5 }, { -3, -20 } )
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/
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/
LIB console imitando gráfico
Olá Quintas,
Onde está wvgControl ?
Onde está wvgControl ?
►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)
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)

