Clipper On Line • Ver Tópico - GTWVG: Meu modo de trabalho

GTWVG: Meu modo de trabalho

Outras bibliotecas visuais e IDEs para Harbour/xHarbour (xHGTK/HbWxW/GtWvT/GtWvW/WvWtools.etc)

Moderador: Moderadores

 

GTWVG: Meu modo de trabalho

Mensagempor JoséQuintas » 23 Nov 2020 16:27

Talvez alguns exemplos existentes:

browse, achoice, PROMPT, GETSYS

Ao usar um browse, é o browse quem manda, como se fosse um elemento GUI.
O ESC é no browse, não na janela do aplicativo.
O mesmo acontece com os demais.

Mas.....

É diferente no Clipper 5.2 e Clipper 5.3.
No Clipper 5.3, a GETSYS abrange browse, e outros.
E o Clipper 5.3 tinha a opção gráfica, digamos meio GUI.
Tinha até esquecido.... o 5.3 acaba mostrando parte disso.
Nunca usei, então não sei mais detalhes.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 15499
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 897 vezes

GTWVG: Meu modo de trabalho

Mensagempor JoséQuintas » 23 Nov 2020 16:39

De qualquer jeito, as pesquisas são interessantes.....
Acabo de encontrar isto nos fontes do Harbour:

/*
* MySQL TBrowse
* A TBrowse on a MySQL Table / query


Estou pesquisando sobre hb_KeyStd(), por outro motivo, mas que talvez até seja interessante em GUI....
Tem muito nos fontes do Harbour.

      nKeyStd := hb_keyStd( nKey := Inkey( 0, hb_bitOr( Set( _SET_EVENTMASK ), HB_INKEY_EXT ) ) )

      IF ( bBlock := SetKey( nKey ) ) != NIL .OR. ;
         ( bBlock := SetKey( nKeyStd ) ) != NIL


Talvez seja a resposta pra alguns Inkey() zerados que aparecem de vez em quando.

Dúvida:
Esse hb_bitOr(), não vai retornar HB_INKEY_EXT de qualquer jeito ?
Não seria mais prático indicar diretamente HB_INKEY_EXT ?
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 15499
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 897 vezes

GTWVG: Meu modo de trabalho

Mensagempor MSDN » 23 Nov 2020 16:53

Entendi novamente o que vc quer fazer, o teu foco é melhorar o visual mas sem perder a Getsys, vc quer ter o núcleo do Clipper mas com o poder da GUI !
Nesse caso, vc mesmo já se auto-respondeu, pega todos os comandos e funções novos que apareceram no Clipper 5.3 e analisa como foi feito.
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 847
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 121 vezes

GTWVG: Meu modo de trabalho

Mensagempor JoséQuintas » 24 Nov 2020 10:17

MSDN escreveu:Entendi novamente o que vc quer fazer, o teu foco é melhorar o visual mas sem perder a Getsys


Eu só acho que é muito trabalho pra pouca coisa.
Um aplicativo comercial não é a mesma coisa de um programa de edição.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 15499
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 897 vezes

GTWVG: Meu modo de trabalho

Mensagempor JoséQuintas » 24 Nov 2020 21:25

O que eu não quero mesmo... é perder o redimensionamento automático.

O aplicativo funciona direitinho no recurso do Windows 10, de dividir a janela em duas !!!

É arrastar o aplicativo pra direita ou esquerda, e ele fica em meia janela.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 15499
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 897 vezes

GTWVG: Meu modo de trabalho

Mensagempor microvolution » 17 Dez 2020 21:26

JoséQuintas escreveu:Nem sei se mais alguém usa GTWVG.
euzinho aqui uso. Mas, como não tem documentação do autor sobre como funciona, estou apenas no básico mesmo. Nem gráfico consegui fazer funcionar, apenas uma wvgCRT pra dar a impressão visual de forms da HMG.
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: 1204
Data de registro: 02 Set 2011 22:17
Curtiu: 58 vezes
Mens.Curtidas: 13 vezes

GTWVG: Meu modo de trabalho

Mensagempor JoséQuintas » 18 Dez 2020 00:08

microvolution escreveu: apenas uma wvgCRT pra dar a impressão visual de forms da HMG.


Eu só usei wvgCrt() este ano, está mais adiantado que eu kkkk
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 15499
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 897 vezes

GTWVG: Meu modo de trabalho

Mensagempor microvolution » 23 Dez 2020 00:30

JoséQuintas escreveu:Eu só usei wvgCrt() este ano, está mais adiantado que eu kkkk
KKKK
Eu não consigo entender:
- (1) os conflitos (erros estranhos que fazem o sistema encerrar) que existem quando uso DEFINE F_MAIN da HMG com o CONSOLE da WVG;
- (2) eliminar as 2 telas que precisam para o sistema híbrido funcionar: DEFINE WINDOW (FORM) e a TELA PADRÃO da HMG;

para o erro/conflito (1), vou citar 2 exemplos:
20-1222 - TELA ERRO estranho - HMG x WVG - 1.png

20-1222 - TELA ERRO estranho - HMG x WVG - 2.png

do nada esses erros aparecem e tantos outros. Se acontecessem no mesmo lugar, era fácil de compreender, mas, nem sempre no mesmo lugar da tela ou de um código fonte.

kkk

Já para eliminar a tela padrão da WVG e ter apenas a tela HMG(form define window) num tópico postado pelo ASIMOES, baixei HMG_WVG e HMG_WVG_2 mas, também, no exemplo acontecem erros.

Então, a coisa é mais estranha ou complexa do que se pode parecer.
kkk
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: 1204
Data de registro: 02 Set 2011 22:17
Curtiu: 58 vezes
Mens.Curtidas: 13 vezes

GTWVG: Meu modo de trabalho - que tal UNIR todas as LIBs????

Mensagempor microvolution » 23 Dez 2020 00:50

microvolution escreveu:está mais adiantado

nem tanto mestre!
kkk

Mas, estou usando esses 3 tipos:
    SWITCH nTIPO_CRT
      CASE 1
         oCrt_TELA_PADRAO          := WvgCrt():New   ( , , { 0 , 0 }, { MaxRow(), MaxCol() }, , .t. )
         oCrt_TELA_PADRAO:title     := "Sistema | "+ PROGRAMA + " | " + SUB_TITULO + " | " + dtoc ( date() )
         oCrt_TELA_PADRAO:lModal    := lMODAL
         oCrt_TELA_PADRAO:icon      := "AppIcon"
         oCrt_TELA_PADRAO:resizable := .F.
         oCrt_TELA_PADRAO:closable  := .F.
         oCrt_TELA_PADRAO:minMax    := .F.
         oCrt_TELA_PADRAO:lbDblClick( )
      CASE 2
         oCrt_TELA_PADRAO         := WvgDialog():New( , , { 0 , 0 }, { MaxRow(), MaxCol() }, , .t. )
         oCrt_TELA_PADRAO:title     := "Sistema | "+ PROGRAMA + " | " + SUB_TITULO + " | " + dtoc ( date() )
         oCrt_TELA_PADRAO:lModal    := lMODAL
         oCrt_TELA_PADRAO:icon      := "AppIcon"
         oCrt_TELA_PADRAO:resizable := .F.
         oCrt_TELA_PADRAO:closable  := .F.
         oCrt_TELA_PADRAO:lbDblClick( )
      CASE 3
         oCrt_TELA_PADRAO:= WvtDialog():New( MaxRow(), MaxCol(), "Sistema | " + PROGRAMA + " | " + SUB_TITULO + " | " + dtoc ( date() ), , )
    ENDSWITCH   

Mas, ainda não dá pra usar definitivo pois o erros/conflitos existentes quando se aplica o DEFINE WINDOW, fica estranho e acontecem os tais erros já mencionados ou não compreendidos.

Talvez, é como o nobre Quintas tem dito ao longo dos anos:

"se quem entende do código fonte de todas as LIBs: HMG, HMGE/HMEE, HWGUI, GTWVG, GTWVW, etc, se unissem e perdessem a VAIDADE que existe por detrás do 'pano de fundo', para tornar o código delas em apenas um, enxuto e bem limpo e não duplicar os comandos, funções, classes, sei lá, talvez, aí sim, teríamos uma linguagem HARBOUR muito forte e competitiva, perdendo apenas para JAVA e C++ que são a base de todas"

!!!
microvolution
Usuário Nível 5

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

GTWVG: Meu modo de trabalho

Mensagempor JoséQuintas » 23 Dez 2020 09:43

Erro de sintaxe: &


Vamos com calma nessa hora.
Por enquanto aí tem o símbolo de macro, e sabemos que macro causa problemas.
Macro pode conter uma expressão que existia quando foi criada, mas agora não existe mais.

Tente pela lista fornecida pela mensagem de erro, chegar a um possível erro, não basta olhar a última linha.

De repente o erro está numa macro, e apesar de dar erro na execução dela, o erro foi na criação.

Principalmente em GUI, a ordem sequencial não existe, talvez variáveis também não existam, pode ser que na execução aquela variável que pensava que iria existir sempre, não existe na execução.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 15499
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 897 vezes

GTWVG: Meu modo de trabalho

Mensagempor microvolution » 23 Dez 2020 17:58

JoséQuintas escreveu:Erro de sintaxe: &

aí a gente sofre demais... pois os erros aparecem do nada kkkk
são intermitentes... melhor fazer como alguém falou aqui... "vender pipoca" kkkk
veja aí mais um desses erros intermitentes:
20-1223 - ERRO TELA HMG x WVG.png

kkkk
microvolution
Usuário Nível 5

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

GTWVG: Meu modo de trabalho

Mensagempor microvolution » 23 Dez 2020 18:36

microvolution escreveu:veja aí mais um desses erros intermitentes:
vamos por partes então:
Date:23/12/2020 Time: 17:52:24
Error BASE/1070 Erro nos parÉmetros: ==

Called from _HMG_ONKEY_ONMOUSE_CONTROLS(259)
Called from EVENTPROCESS(161)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5694)
Called from MCI10998(4681)
Called from MAIN(1435)

linha MAIN(1435):
MCI10998(TECLAS,SALVA_COR)

a linha MCI10998(4681) é:
ACTIVATE WINDOW Form_Main

já as linhas:
_HMG_ONKEY_ONMOUSE_CONTROLS(259)
EVENTPROCESS(161)
DOMESSAGELOOP(0)
_ACTIVATEWINDOW(5694)

essas linhas, onde ocorreram os erros devem ser da WVG ou HMG - códigos fontes internos das LIBs, dos quais nada entendo.

Esse "suposto erro" aparece, simplesmente ao mover o MOUSE sobre a tela FORM_WINDOOW, sem clicar em nada. Nem sempre ele aparece.

PS: o conteúdo das variáveis (são array) TECLAS, SALVA_COR, foram inicializadas de forma LOCAL no início da FUNCTION MAIN(), da qual esta linha 1435 pertence.

as linhas são 234 e 235:
   Local    SALVA_COR   := setcolor (),;
            TECLAS    := {}
microvolution
Usuário Nível 5

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

GTWVG: Meu modo de trabalho

Mensagempor microvolution » 23 Dez 2020 19:06

ah!
na mensagem de erro não aparece, mas, a função MCI10998, começa e termina nas linhas:
4499 a 4752.
essas linhas montam o MENU PRINCIPAL e a TELA PADRÃO WVG ou TELA PADRÃO HMG.
para isso, dentro dessa função existe a seguinte condição:
                  if .not. lGUI
                    if nTPMENU = 1
                        MCI10000 ()  // esta linha executa um menu console
                    elseif nTPMENU = 2
                        MCI10000_wvg () // esta linha executa um menu wvg
                    elseif nTPMENU = 3
                        MCI10000_wvg_cui () // esta linha executa um menu misto (console/gui)
                    endif
                  else
                     // SET WINDOW MAIN ON
                     DEFINE WINDOW Form_Main ;

(...)

                     hWnd1:=GetFormHandle("Form_Main")
                     MenuHMG()
                     ACTIVATE WINDOW Form_Main (linha4681) - onde apresenta o erro

só pra conhecimento:
→ a condição lGUI (.t. ou .f.) é uma condição pra decidir se será WVG ou HMG como TELA CONSOLE/FORM PRINCIPAL
→ já a variável nTPMENU numérica, carrega apenas 1, 2 ou 3, que significam:
1 - menu horizontal/vertical estilo MSDOS
2 - menu gráfico da própria WVG
3 - menu gráfico da WVG em conjunto com o menu CONSOLE juntos.
microvolution
Usuário Nível 5

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

GTWVG: Meu modo de trabalho

Mensagempor microvolution » 23 Dez 2020 20:04

JoséQuintas escreveu:Tente pela lista fornecida pela mensagem de erro, chegar a um possível erro, não basta olhar a última linha.

então... é o q estamos tentando fazer.
dentro das possibilidades dos erros, temos a linha:
Called from _HMG_ONKEY_ONMOUSE_CONTROLS(259)

esta linha, pertence à função ABAIXO que está na pasta:
hmg.3.5\SOURCE\h_winapimisc.prg (1 hits)
FUNCTION _HMG_OnKey_OnMouse_Controls
LOCAL i:=0, k, nSubIndex1:=0, ret := NIL

   IF ( EventIsKeyboardMessage() == .T. .OR. EventIsMouseMessage() == .T. ) .AND.  EventIsHMGWindowsMessage() == .F.

      FOR k = 1 TO HMG_LEN (_HMG_SYSDATA [3])
         IF HMG_CompareHandle (_HMG_SYSDATA [3] [k],  EventHWND(), @nSubIndex1) == .T. // esta é a linha 259
            i := k
            EXIT
         ENDIF
      NEXT

      IF i > 0 .AND. EventIsKeyboardMessage() == .T.
         IF ValType ( _HMG_SYSDATA [41] [i] [1]) == "B"
            HMG_GetOnKeyControlIndex (NIL, i, nSubIndex1)
            ret := EVAL ( _HMG_SYSDATA [41] [i] [1])   // OnKey Event
         ENDIF
      ENDIF

      IF i > 0 .AND. EventIsMouseMessage() == .T.
         IF ValType ( _HMG_SYSDATA [41] [i] [2]) == "B"
            HMG_GetOnMouseControlIndex (NIL, i, nSubIndex1)
            ret := EVAL ( _HMG_SYSDATA [41] [i] [2])   // OnMouse Event
         ENDIF
      ENDIF

      HMG_GetOnKeyControlIndex   (NIL, 0, 0)
      HMG_GetOnMouseControlIndex (NIL, 0, 0)

   ENDIF
RETURN ret

IF HMG_CompareHandle (_HMG_SYSDATA [3] [k], EventHWND(), @nSubIndex1) == .T. // esta é a linha 259
microvolution
Usuário Nível 5

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

GTWVG: Meu modo de trabalho

Mensagempor microvolution » 23 Dez 2020 20:27

já a linha: Called from EVENTPROCESS(161), está presente na função abaixo, que pertence ao arquivo \hmg.3.5\SOURCE\h_EventCB.prg :

*------------------------------------------------------------------------------------------------------------------------------*
Function EventProcess (hWnd, nMsg, wParam, lParam, IsKeyboardMessage, IsMouseMessage, IsHMGWindowsMessage, nHookID, nHookCode)
*------------------------------------------------------------------------------------------------------------------------------*
LOCAL nIndex
LOCAL cProcName, Ret := NIL
LOCAL lProcessMessage

   FOR nIndex = 1 TO EventCount()

      IF ValType ( _HMG_EventData [ nIndex ] ) <> "A"   // avoids processing the events removed
         LOOP
      ENDIF

      lProcessMessage := .F.
      IF EventProcessAllHookMessage (nIndex) == .T.
         lProcessMessage := .T.
      ELSEIF EventProcessHMGWindowsMessage (nIndex) == .T. .AND. IsHMGWindowsMessage == .T.
         lProcessMessage := .T.
      ELSEIF EventProcessKeyboardMessage   (nIndex) == .T. .AND. IsKeyboardMessage   == .T.
         lProcessMessage := .T.
      ELSEIF EventProcessMouseMessage      (nIndex) == .T. .AND. IsMouseMessage      == .T.
         lProcessMessage := .T.
      ENDIF

      IF lProcessMessage == .T.                              .AND. ;
         EventSTOP (nIndex) <> .T.                           .AND. ;
         EventCompareParam (_HMG_EventData[nIndex][2], hWnd) .AND. ;
         EventCompareParam (_HMG_EventData[nIndex][3], nMsg)

         EventSTOP (nIndex, .T.)   // avoids re-entry
         _PushEventInfo()
            _HMG_EventIsInProgress        := .T.
            _HMG_EventIsKeyboardMessage   := IsKeyboardMessage
            _HMG_EventIsMouseMessage      := IsMouseMessage
            _HMG_EventIsHMGWindowsMessage := IsHMGWindowsMessage
            _HMG_EventHookID              := nHookID
            _HMG_EventHookCode            := nHookCode
            _HMG_EventINDEX               := nIndex
            _HMG_EventHWND                := hWnd
            _HMG_EventMSG                 := nMsg
            _HMG_EventWPARAM              := wParam
            _HMG_EventLPARAM              := lParam
            _HMG_EventPROCNAME := EventGetPROCNAME (nIndex)

            IF ValType( _HMG_EventPROCNAME ) <> "C"
               Ret := Eval( _HMG_EventPROCNAME )   // is codeblock
            ELSE
               cProcName := _HMG_EventPROCNAME
               IF hb_URight(cProcName, 1) <> ")"
                  Ret := &cProcName()
               ELSE
                  Ret := &cProcName
               ENDIF
            ENDIF

            _HMG_EventIsInProgress        := .F.
            _HMG_EventIsKeyboardMessage   := .F.
            _HMG_EventIsMouseMessage      := .F.
            _HMG_EventIsHMGWindowsMessage := .F.
            _HMG_EventHookID              := -1
            _HMG_EventHookCode            := -1
            _HMG_EventINDEX               := 0
            _HMG_EventHWND                := 0
            _HMG_EventMSG                 := 0
            _HMG_EventWPARAM              := 0
            _HMG_EventLPARAM              := 0
            _HMG_EventPROCNAME            := ""
         _PopEventInfo()
         EventSTOP (nIndex, .F.)   // restore entry
         IF ValType (Ret) == "N"
            Return Ret
         ENDIF
      ENDIF
   NEXT
Return Ret

a linha 161 que está no código acima é:
Ret := &cProcName
ou seja, o nobre professor JQUINTAS disse que macro sempre é problema, então, POR QUE o Roberto Lopez está usando-a no seu código original?

KKKK

se formos debulhar ou debugar o código, não acharemos um causador do(s) problema(s)...
microvolution
Usuário Nível 5

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

Anterior Próximo



Retornar para Outras Bibliotecas Visuais e IDEs

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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