LIB console imitando gráfico

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

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

LIB console imitando gráfico

Mensagem por JoséQuintas »

Aquele link que coloquei mostra como fazer isso.
Também é wapi_SendMessage()

O problema é: Como criar esta variável no Harbour?

Código: Selecionar todos

typedef struct _LV_ITEM {  
    UINT   mask;        // attributes of this data structure
    int    iItem;       // index of the item to which this structure refers
    int    iSubItem;    // index of the subitem to which this structure refers
    UINT   state;       // Specifies the current state of the item
    UINT   stateMask;   // Specifies the bits of the state member that are valid. 
    LPTSTR  pszText;    // Pointer to a null-terminated string
                        // that contains the item text 
    int    cchTextMax;  // Size of the buffer pointed to by the pszText member
    int    iImage;      // index of the list view item's icon 
    LPARAM lParam;      // 32-bit value to associate with item 
} LV_ITEM;
Se fosse uma rotina em C com o Harbour apenas colocando os valores, atenderia qualquer LIB.
Essa parte, só com ajuda de quem programa em C pra "traduzir".
Ajuda pra criar uma variável desse tipo.
Ou... se isso equivale a array, uma rotina que vai criar qualquer array nesse estilo, e já resolve tudo que aparecer.

Nesse caso, aparentemente são coisas simples que faltam.
Sei o que é, mas não sei fazer.
Tem nos fontes da minigui, hwgui e até nesse link, mas em C, pra usar em C.
Então faltam só duas funçõeszinhas pra fazer a mesma coisa no Harbour, sem precisar LIB.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Quanto mais eu vejo, menos entendo.
Trecho de um arquivo no VS2010, windowsx.h

Código: Selecionar todos

#define Button_GetCheck(hwndCtl)            ((int)(DWORD)SNDMSG((hwndCtl), BM_GETCHECK, 0L, 0L))
#define Button_SetCheck(hwndCtl, check)     ((void)SNDMSG((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L))
#define Button_GetState(hwndCtl)            ((int)(DWORD)SNDMSG((hwndCtl), BM_GETSTATE, 0L, 0L))
#define Button_SetState(hwndCtl, state)     ((UINT)(DWORD)SNDMSG((hwndCtl), BM_SETSTATE, (WPARAM)(int)(state), 0L))
No C.... usam o nome das funções.

Traduzido pra Harbour:

Código: Selecionar todos

FUNCTION Button_GetCheck( hWnd ) ;            RETURN wapi_SendMessage( hWnd, BM_GETCHECK, 0, 0 )
FUNCTION Button_SetCheck( hWnd, Check ) ;    RETURN wapi_SendMessage( hWnd, BM_SETCHECK, Check, 0 )
FUNCTION Button_GetState( hWnd ) ;              RETURN wapi_SendMessage( hWnd, BM_GETSTATE, 0, 0 )
FUNCTION Button_SetState( hWnd, State ) ;     RETURN wapi_SendMessage( hWnd, BM_SETSTATE, State, 0 )
A única explicação seria para o caso disso mudar a cada versão do Windows, mas não sei se acontece.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Também dá pra usar rotinas da minigui/oohg.
'Só não sei se isso poderia ser incorporado ao Harbour, ou quem daria manutenção nisso, considerando rotinas em C.
Quebraria o galho até ter uma rotina própria do Harbour.
Digo isso, porque certamente há regras pra fontes no Harbour, e pode acontecer do fonte não atender essas regras.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Uia... joguei um default no tstText:
Como vou usar no console... pego a cor default.
Nada impede de alterar a cor durante ou depois de criar o controle, pra qualquer cor do Windows.
Alterando a cor do texto pra azul:

Código: Selecionar todos

   SetColor( "B/W" )
gtwvg.png
Fiz isso criando esta parte:

Código: Selecionar todos

METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   ::clr_FG := Substr( SetColor(), 1, At( ",", SetColor() ) + 1 )
   ::clr_BG := ::Clr_FG
   ::tstAny:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
   RETURN Self
Apesar de mais interessante FontColor, ForeColor, BackColor, parece que isso é padrão XbpParts, a GTWVG usa clr_FG e clr_BG.
Então melhor seguir o padrão, até mesmo pra continuar compatível.
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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

LIB console imitando gráfico

Mensagem por alxsts »

Olá!

Belo trabalho de pesquisa e desenvolvimento!

Existem outros controles disponíveis? Ex: TreeView, Panel, Slider,StatusBar...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Se tem o Harbour, então tem a pasta GTWVG

Código: Selecionar todos

3state.prg
activex.prg
bitmap.prg
checkbox.prg
class.prg
combobox.prg
crt.prg
dataref.prg
dialog.prg
drawarea.prg
genrc.prg
htmlview.prg
listbox.prg
menubar.prg
mle.prg
paint.prg
parthdlr.prg
progrbar.prg
pushbut.prg
radiobut.prg
scrollbr.prg
sle.prg
statbar.prg
static.prg
syswnd.prg
tabpage.prg
toolbar.prg
treeview.prg
tstpushbut.prg
wnd.prg
Panel - Não sei qual é

Slider - O que a minigui chama de slider é o trackbar, vai encontrá-lo na tela que foi mostrada

Nota: os que apresentei não tem nada a ver com esses existentes na GTWVG
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Tava aqui pensando numa coisa....

Se a "conversa" entre os controles é por mensagens do Windows....
E com os fontes podemos deixar iguais as propriedades/métodos existentes...
O que impede juntar GTWVG e OOHG?
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Nem sei o que pensar. O fonte:

Código: Selecionar todos

 #include "inkey.ch"

PROCEDURE Main

   LOCAL nCont, aControl, nRow := 1, nCol := 1

   aControl := { "COMCTL.Slider", "COMCTL.TabStrip", "COMCTL2.UpDown", "Control0.PauseButton", ;
   "Control0.Axis", "Control0.Cube", "Control0.Knob", "Control0.LEDMeter", "Control0.Effect", ;
   "Control0.SurroundLED", "COntrol0.LEDMeter.1" }

   SetMode(40,100)
   CLS
   FOR nCont = 1 TO Len( aControl )
      BuildActivex( nRow, nCol, aControl[ nCont ] )
      nRow += 5
      IF nRow > MaxRow() - 5
         nRow := 1
         nCol += 20
      ENDIF
   NEXT
   Inkey(0)
   RETURN

FUNCTION BuildActivex( nRow, nCol, cNome )

   LOCAL oCom

   oCom := WvgActiveXControl():New( wvgSetAppWindow(), , { -nRow, -nCol }, { -4, -15 }, , .T. )
   oCom:CLSID := cNome //
   oCom:create()
   RETURN NIL
o resultado na tela:
teste.png
Vai criar controle no Harbour pra que?
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LIB console imitando gráfico

Mensagem por asimoes »

Voltando ao assunto:

Tem como criar uma progressbar em harbour com percentual indicativo no meio da barra ?

Ex.:
images.jpg
images.jpg (7.16 KiB) Exibido 5463 vezes
►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)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Sempre tem a opção de criar um controle próprio.
Ou usa a "pintura" automática do Windows, ou cria rotina própria pra isso.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LIB console imitando gráfico

Mensagem por asimoes »

Esse tipo de progressbar eu procurei na hwgui e na minigui e não achei exemplo.
►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)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

LIB console imitando gráfico

Mensagem por JoséQuintas »

Talvez com ajuda da Bostaurus?
Desenhar o gradiente indicando o retângulo desejado, e escrever o texto do percentual por cima.
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

LIB console imitando gráfico

Mensagem por Itamar M. Lins Jr. »

Ola!
As únicas libs que na minha opinião merecem atenção é a Hwgui e Minigui e a QtContribs essa porque leio nos foruns o pessoal afirmando que usa sem problemas.
Essas outras só aparecem para pulverizar mais os usuários.
Para ver se uma LIB gráfica presta para uso é só testar o BROWSE e se tem alguma IDE, caso contrário fico aguardando o amadurecimento.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

LIB console imitando gráfico

Mensagem por Itamar M. Lins Jr. »

Ola!
Vc está na fronteira, rsrsr
Infelizmente na minha minha época de usar essas libs, a única que funcionava no Linux/Win era a WVT.
Eu fiz algumas telas para simular o ambiente windows/Linux com fundo/bordas lateral direita e a borda de baixo usando 'w/+w'...
Na época usava nCurses no Linux. Ficava bem parecido com essas telas que vc postou.
Mas no caso das telas do Norton pode esquecer, VGA... Nem compensa ficar "encurralado" nessas antigas "ideias" na minha opinião.
sci.png

Código: Selecionar todos

**********************************************************
Function Janela(l,c,altura,larg,men,core,cord,corm,sombra)
**********************************************************

* Paramentros passados
*                                                 |--------------
* Linha,Coluna,Altura,Largura,Menssagem(opcional),core,cord,corm(opcionais)
*
*PARAMETERS l,c,altura,larg,men,core,cord,corm,sombra
PRIVATE linha1,linha2,linha3,borda1,borda2,borda3,N,titulo
*IF PCOUNT() = 4
*   l --
*   altura ++
*ENDIF
//HB_CDPSELECT([PT850])
if valtype(cord)= "U"
   cord = 'n/w'
endi
if valtype(core)= "U"
  core = 'w+/w'
endi
if valtype(corm)= "U"
  corm = 'w+/b'
endi
if valtype(sombra)="U"
  sombra = .f.
endif

linha1 := eval({|| "Ú"+REPLICATE("Ä",larg) })
linha2 := "³"+space(larg) //REPLICATE(CHR(32),larg)
linha3 := eval({||REPLICATE("Ä",larg)+"Ù" })
borda1 := "¿" //CHR(191)
borda2 := "³" //CHR(179)
borda3 := "À" //CHR(192)
 //Wvt_DrawLine( maxrow()-2,0,maxrow()-2,maxcol(),WVT_LINE_HORZ,WVT_LINE_RECESSED,WVT_LINE_BOTTOM )
@ l,c        say linha1 color core
@ l,larg+c+1 say borda1 color cord

for N := 1 to altura
    @ l+N,c        say linha2 color core
    @ l+n,larg+c+1 say borda2 color cord
next

@ l+n,c+1 say linha3 color cord
@ l+n,c   say borda3 color core
if sombra
   sombra(l,c,l+altura+1,c+larg+1)
endif

if valtype(men) # 'U'
   @ l+1,c+2 say repl(" ",larg-2) color corm
   @ l+1,c+3 say men color corm
endif
//HB_CDPSELECT([PTISO])
Return  .t.

Código: Selecionar todos

ml := maxrow()/2
mc := (maxcol()-40)/2

janela(ml  ,mc  ,5,40,,'w+/w','n/w','w+/w',.t.)
janela(ml+1,mc+1,3,38,,'n/w','w+/w','n/w')

Código: Selecionar todos

******************************
Function confirma(texto,opcao)
******************************
*
*
largjan:=len(texto)+1
if largjan<25
   largjan:=25
endif
ces:=(maxcol()-largjan)/2
les:=maxrow()-9

telavelha := savescreen(les,0,les+6,79)
CorVf     := setcolor('n/w')

janela(les,ces,4,largjan,,'w+/w','n/w','w+/w',.t.)
@ les+1,ces+1 say texto color 'n/w'
coluna:=(largjan-9)/2
janela(les+2,ces+6,1,3,,'w+/w','n/w','w+/w')
janela(les+2,ces+15,1,3,,'w+/w','n/w','w+/w')

@ les+3,ces+7  prom "Sim" //color "r/w,+w/r,r/w,r/w"
@ les+3,ces+16 prom "Nao" //color "r/w,+w/r,r/w,r/w"

if opcao
   confirm=2
endif
menu to confirm
if confirm = 1
   janela(les+2,ces+6,1,3,,'n/w','w+/w','n/w')
   @ les+3,ces+7  say "Sim" color 'n/w'
else
   janela(les+2,ces+15,1,3,,'n/w','w+/w','n/w')
   @ les+3,ces+16 say "Nao" color 'n/w'
endif
INKEY(.1)
setcolor(CorVf)
restscreen(les,0,les+6,79,telavelha)
return confirm
Ps; Nessa época ainda usava Joiner.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
portelainfo
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 24 Ago 2014 02:23
Localização: Vitoria da Conquista/Bahia

LIB console imitando gráfico

Mensagem por portelainfo »

Olá!

E, se houvesse um jeito de "capturar" as funções TUI dos programas antigos (PC Tools/Norton), sem ter que decompilar?

Eu encontrei um projeto no github que faz basicamente isso. Mas, pelo que vi, roda em linux.

O link é: github.com/endrazine/wcc

Tem um vídeo onde o desenvolvedor menciona o projeto. Voces podem encontrar no canal "Papo Binário" com o título: "Papo Binário #12 - Engenharia Reversa e Witchcraft Compiler Collection".
Portela Info (Mauricio Portela)
Responder