Dlgauto / bugs de libs com/sem solução

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Como devem ter percebido, procuro ajudar aonde posso, não importa se uso a LIB ou não.

O Dlgauto foi o divisor de águas, que está me fazendo ir frente, em todas as LIBs de uma vez.
É como mexer num aplicativo, precisa o mesmo que um aplicativo, então, acaba sendo equivalente a usar pra valer, sem precisar mexer no aplicativo.
Serve de ajuda pra todo mundo, e está ajudando a descobrir algumas falhas em LIBs.

O que ele faz:

Ele pega a lista dos DBFs na pasta, e cria telas funcionais pra cada DBF, com inclusão, alteração, exclusão, uma listagem simples em txt, e um browse pro DBF.
Basicamente é isso.
1lista.png
2tela.png

Definindo um campo chave do DBF, ele já cria a tela com escolha de código. Não deixa cadastrar código repetido, ou deixa posicionar diretamente em qualquer código.
Crio isso pra alguns DBFs que são criados, porque tem estrutura conhecida
3codigo.png

Definindo um arquivo de validação, ele já pesquisa código e trás descriçào, e valida caso digite um código que não existe.
Também não deixa excluir código em uso.
Crio isso pra alguns DBFs que são criados, porque tem estrutura conhecida.
4validacao.png

Definindo um sub-arquivo, exemplo pedidos e produtos do pedido, DBFs e estruturas do DBF, ele mostra um browse conforme navega.
Crio isso pra alguns DBFs que são criados, porque tem estrutura conhecida.
5browse.png

É praticamente o que se usa nos aplicativos.
Se quiser testar com arquivos próprios, com esses recursos a mais, precisa adicionar configuração.

NÃO CRIEI tela de configuração, porque ainda não sei como fazer, ainda não cheguei nessa parte.
Então, se alguém quiser criar configuração adicional pra arquivos próprios, só colocando no fonte test.prg
Mas, do jeito que está, tem bastante coisa pra testar.

Isso tudo já é interessante, mas na HMG Extended foi incluído nos fontes como FIVEGUI.
O motivo é porque chamou a atenção poder compilar com LIBs diferentes: HWGUI, HMG Extended, HMG 3, OOHG ou GTWVG.
GTWVG esqueçam, não vai avançar mais, pelo menos da forma que foi incluída.
Nas demais, todas estão caminhando juntas.

Quem puder ajudar com dicas de cada LIB vai ser bom, quem puder ajudar apenas testando também vai ser bom.

Não se trata de ajudar o José Quintas, é uma coisa que pode ajudar todo mundo.

Não tem fivewin, porque precisaria da LIB e de outro harbour diferente, mas quem sabe alguém possa fazer isso?

O legal é que ele mostra que todas as LIBs funcionam, e estão fazendo a mesma coisa (ou quase).
Por exemplo: HMG 3 não está mostrando botões com ícone. Será que não mostra ? ou será que sou eu quem não sabe fazer ?
Pode se tornar uma fonte de referência pras Libs, pra quem começa, pra quem quer trocar de lib, etc.

Estou mexendo sem pressa, um pouquinho por semana, quem sabe não podemos acelerar as coisas ?
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Sobre a configuração extra, pra ter algo mais:


CAMPOS CHAVE

DBF e campo chave

Código: Selecionar todos

   /* table, key */
   aKeyList := { ;
      { "DBCLIENT",    "IDCLIENT" }, ;
      { "DBPRODUCT",   "IDPRODUCT" }, ;
      { "DBUNIT",      "IDUNIT" }, ;
      { "DBSELLER",    "IDSELLER" }, ;
      { "DBBANK",      "IDBANK" }, ;
      { "DBGROUP",     "IDGROUP" }, ;
      { "DBSTOCK",     "IDSTOCK" }, ;
      { "DBFINANC",    "IDFINANC" }, ;
      { "DBSTATE",     "IDSTATE" }, ;
      { "DBTICKET",    "IDTICKET" }, ;
      { "DBTICKETPRO", "Str( TPTICKET,10 ) + Str( IDTICKETPRO, 10 )" }, ;
      { "DBDBF",       "IDDBF" }, ;
      { "DBFIELDS",    "IDFIELD" } }
VALIDAÇÃO

DBF origem, campo origem, DBF destino, campo destino, e campo da descrição

Código: Selecionar todos

   /* table, field, table to search, key field, field to show */
   aSeekList := { ;
      { "DBCLIENT",  "CLSELLER",  "DBSELLER",  "IDSELLER",  "SENAME" }, ;
      { "DBCLIENT",  "CLBANK",    "DBBANK",    "IDBANK",    "BANAME" }, ;
      { "DBCLIENT",  "CLSTATE",   "DBSTATE",   "IDSTATE",   "STNAME" }, ;
      { "DBPRODUCT", "IEUNIT",    "DBUNIT",    "IDUNIT",    "UNNAME" }, ;
      { "DBSTOCK",   "STCLIENT",  "DBCLIENT",  "IDCLIENT",  "CLNAME" }, ;
      { "DBSTOCK",   "STPRODUCT", "DBPRODUCT", "IDPRODUCT", "PRNAME" }, ;
      { "DBSTOCK",   "STGROUP",   "DBGROUP",   "IDGROUP",   "GRNAME" }, ;
      { "DBFINANC",  "FICLIENT",  "DBCLIENT",  "IDCLIENT",  "CLNAME" }, ;
      { "DBFINANC",  "FIBANK",    "DBBANK",    "IDBANK",    "BANAME" } }
BROWSE DE SUB-ITENS

DBF origem, campo origem, DBF destino, campo destino, campo chave do DBF destino, e se permite edição (uso futuro)

Código: Selecionar todos

   /* Related browse */
   aBrowseList := { ;
      { "DBTICKET", "IDTICKET", "DBTICKETPRO", "TPTICKET", "IDTICKEDPRO", .F. }, ;
      { "DBDBF",    "NAME",     "DBFIELDS",    "DBF",  "IDFIELD", .F. } }
A parte básica funciona sempre.
Essa configuração é pra ter algo mais.
Se quiser ver os recursos a mais encima de seus próprios arquivos é acrescentar nas listas.

Lógico... no momento o dlgauto considera:
- campo chave sempre numérico
- sempre com campo para descrição
- sub-dbf campos chave sempre campos numéricos indexados por str(x,10) ou campo string livre

Isso é suficiente pra ter arquivo de clientes, fornecedores, produtos, pedidos x produtos, financeiro, estoque, notas fiscais, portadores, contabilidade, categoria, etc., com validação ou não, com sub-itens ou não, etc.
É quase um aplicativo, sem precisar nenhuma linha 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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Querem mais ?

TUDO que roda DENTRO do DLGAUTO também roda FORA DELE.
Se a tela resolver seu problema, é só executar diretamente pelo aplicativo.
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Vamos inverter o título, quem sabe dá resultado.

Basta testar DLGAUTO e confirmar BUGS e/ou soluções
Economiza tempo de programação/teste.
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

HWGUI e browse

Não funciona o acionamento inicial.
Já tentei refresh, posicionar registro, setfocus no browse e nada dá resultado.
É um bug hwgui ainda sem solução.
É obrigado a primeiro navegar no browse, pra só depois teclar ENTER
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

HMG Extended e browse, com uso de SET SCOPE

Confirmado
Esse teve quebra-galho, é posicionar o registro antes do refresh
No caso do bug, já informado e confirmado, "talvez" seja corrigido na versão 2024.02
Trata-se de alterar uma linha no fonte.

Código: Selecionar todos

FUNCTION gui_BrowseRefresh( xDlg, xControl )

   // on older hmge versions, need to set browse value/recno()
   SetProperty( xDlg, xControl, "VALUE", RecNo() )
   DoMethod( xDlg, xControl, "REFRESH" )
   (xDlg)

   RETURN Nil
Nota: a alteração definitiva é alterar no fonte da hmg extended, fonte h_browse.prg

Código: Selecionar todos

      IF IndexOrd() != 0
         IF ordKeyVal() == Nil .OR. ! Empty( OrdScope() )
            GO TOP
         ENDIF
      ENDIF
CORRIGIDO NA VERSÃO ATUAL
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

HMG Extended e GETBOX e GET

Confirmado
A hmg Extended troca a classe get do harbour por outra, pra funcionar o getbox.
Se compilar com a do harbour, dá erro em getbox.
Se compilar com a da hmg extended, dá erro no get de console.

Deu certo alterar a get da hmg extended pra hmg_get, e alterar dentro do getbox aonde usa (uma linha)

Não sei se vai ser alterado na oficial

Código: Selecionar todos

#ifdef __XHARBOUR__
   oget := Get()
#else
   oGet := hmg_Get()
#endif
Nota: nesse caso é alterar fonte da HMG Extended, e não do aplicativo.

CORRIGIDO NA VERSÃO ATUAL
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

HMG Extended e SET MAIN WINDOW OFF

Confirmado.
Isso existe apenas pra compatibilidade, só pra poder compilar fontes HMG3.
Isso trás problemas.

USAR MULTITHREAD, OU SEM MAIN HMG TEM RESULTADOS IMPREVISÍVEIS
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

HMG3 e OOHG tenho feito poucos testes, ficam sempre pro final.
Ícone no button não funcionou na HMG3, mas considero que seja falta de conhecimento meu.

Apesar de todas aparentemente fazerem a mesma coisa....

Então...
O dlgauto é um aplicativo.
Apenas vou testando quando dá vontade...
O funcionamento é tão interessante, que empolga, e até esqueço desses defeitos nas LIBs.
Pensar no aplicativo com esses defeitos.... desanima... mas o dlgauto continua em frente.

Quem quiser testar lib, é só testar o dlgauto.
É procurar defeitos e soluções.
É pensar nos recursos que gostaria de ter no aplicativo, e simular no dlgauto, ou sugerir que ele tenha o recurso.
Dá pra tentar acrescentar todo tipo de teste nele, até mudança de visual.
Várias cabeças pensam melhor do que uma sozinha.
Vários testando acham mais defeitos do que um só.
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Comentei no DLGAUTO que não encontrei SET MAIN WINDOW OFF na OOHG.
Mas... USO SEM MAIN no dlgauto.

Em HMG, se quiser criar aplicativo sem MAIN, precisa usar SET WINDOW MAIN OFF.
Na OOHG, se quiser sem MAIN, é só não criar MAIN.

Então... o recurso na OOHG passou a existir natualmente, sem necessidade de comando extra.
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Se comparar o fonte das miniguis, vai perceber algumas diferenças.

HMG Extended

Código: Selecionar todos

FUNCTION gui_BrowseRefresh( xDlg, xControl )

   // on older hmge versions, need to set browse value/recno()
   SetProperty( xDlg, xControl, "VALUE", RecNo() )
   DoMethod( xDlg, xControl, "REFRESH" )
   (xDlg)

   RETURN Nil
HMG3 e OOHG

Código: Selecionar todos

FUNCTION gui_BrowseRefresh( xDlg, xControl )

   DoMethod( xDlg, xControl, "REFRESH" )
   (xDlg)

   RETURN Nil
bug na HMG Extended ?
sim, mas provavelmente porque foram adicionados mais recursos nela.
E um bug com solução.
Certos bugs não impedem de usar a lib, apenas precisam da precaução pra evitar o bug, até uma solução definitiva.
O uso igual ao DLGAUTO fica até interessante, já resolve o bug em todo aplicativo de uma vez, sem código extra.

No caso das miniguis tem algo mais a considerar:

De certa forma elas são compatíveis, mas....
Todas podem ter EDIT, mas nem todas tem GETBOX
Todas podem ter GRID, mas nem todas tem BROWSE
HMG Extended tem o TSBROWSE

Diferença no comportamento entre elas pode ser por usar controle diferente.

Quem souber, ou tiver paciência, pode procurar se existe alternativa em cada lib que tiver bug.

De um modo geral, achei mais interessante a sintaxe alternativa, é mais flexível.
Uso quando possível e quando funciona, pode ter diferença entre as miniguis - HMG 3 (original), HMG Extended (mais recursos), OOHG (OOP)
De um modo geral, a parte básica usa mesmos comandos em todas.
No DLGAUTO usando o fonte HMG padrão pra todas, exceto exceções.
Qualquer coisa diferente precisa tempo, paciência e vontade, e isso é mais difícil do que programar.
Quem estiver usando ou estiver disposto a usar, vai ter mais vontade e paciência pra isso.

E tem a questão de VERSÕES:
Tem quem use HWGUI 2.17, ou versão modificada das coisas, aí não dá pra usar a referência oficial pra esse uso.

É só baixar as LIBs e usar ?
Se baixar as LIBs oficiais, vai acontecer igual descrito aqui, que acontece com o DLGAUTO.
O DLGAUTO é uma demonstração do que vai acontecer com o seu aplicativo.

Nota: quem usa as LIBs pode acabar esquecendo de mencionar os bugs, e quem está começando pode pensar que está fazendo errado.
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Código: Selecionar todos

STATIC FUNCTION gui_DlgKeyDown( xDlg, xControl, nKey, workarea, cField, xValue, aDlgKeyCodeList )

   LOCAL nPos, cType, cFocusedControl

   nPos := hb_AScan( aDlgKeyCodeList, { | e | GetProperty( xDlg, "FOCUSEDCONTROL" ) == e[1] .AND. nKey == e[ 2 ] } )
   IF nPos != 0
      Eval( aDlgKeyCodeList[ nPos ][ 3 ], cField, @xValue, xDlg, xControl )
   ENDIF
   IF nKey == VK_RETURN .AND. hb_ASCan( aDlgKeyCodeList, { | e | e[ 2 ] == VK_RETURN } ) != 0
      cFocusedControl := GetProperty( xDlg, "FOCUSEDCONTROL" )
      //gui_MsgBox( cFocusedControl )
      cType := GetProperty( xDlg, cFocusedControl, "TYPE" )
      //gui_MsgBox( cType )
      IF hb_AScan( { "GETBOX", "MASKEDTEXT", "TEXT" }, { | e | e == cType } ) != 0
         _SetNextFocus()
      ENDIF
   ENDIF
   (xControl); (workarea)

   RETURN .T.
Essa parte funciona em HMG Extended, TYPE de GETBOX retorna GETBOX
Também funciona em HMG3, TYPE retorna TEXT se for texto, ou MASKEDTEXT se for numérico
Em OOHG TYPE retorna vazio.

RESOLVIDO OOHG: misturando OOP
Encontrei Type em classe, então, procurei alguma forma de converter o nome pra objeto.
Encontrei GetControlObjByHandle(), e handle já sabemos como obter.

Código: Selecionar todos

cFocusedControl := GetProperty( xDlg, "FOCUSEDCONTROL" )
nHandle := GetProperty( cFocusedControl, "HANDLE" )
oObj := GetControlObjectByHandle( nHandle )
cTYpe := oObj:Type
Isso resolve o Type na OOHG.

CORRIGIDO NA VERSÃO ATUAL
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

JoséQuintas escreveu:Isso resolve o Type na OOHG.
Interessante....
Funcionou para o browse.
Mas não entra na parte do EDIT, porque retorna SCROLLBAR
Mas não faz falta, essa parte era pra resolver defeito de SET NAVIGATION EXTENDED, e na OOHG o defeito não existe.
edit.png
CORRIGIDO NA VERSÃO ATUAL
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Apenas comentário:

Código: Selecionar todos

#xcommand DEFINE BUTTON <name> ;
        =>;
        _HMG_SYSDATA \[ 416 \]              := <(name)> ;;
        _HMG_SYSDATA \[ 417 \]                := NIL      ;;
   _HMG_SYSDATA \[ 432 \]     := NIL      ;;
   _HMG_SYSDATA \[ 431 \]     := NIL      ;;
        _HMG_SYSDATA \[ 418 \]           := NIL      ;;
        _HMG_SYSDATA \[ 419 \]            := NIL      ;;
        _HMG_SYSDATA \[ 420 \]             := NIL      ;;
        _HMG_SYSDATA \[ 421 \]            := NIL      ;;
        _HMG_SYSDATA \[ 422 \]              := NIL      ;;
        _HMG_SYSDATA \[ 423 \]              := NIL      ;;
        _HMG_SYSDATA \[ 424 \]           := NIL      ;;
        _HMG_SYSDATA \[ 425 \]              := .F.      ;;
        _HMG_SYSDATA \[ 426 \]        := NIL      ;;
        _HMG_SYSDATA \[ 427 \]       := NIL      ;;
        _HMG_SYSDATA \[ 428 \]         := .F.      ;;
        _HMG_SYSDATA \[ 429 \]            := NIL      ;;
        _HMG_SYSDATA \[ 430 \]         := .F.      ;;
        _HMG_SYSDATA \[ 431 \]               := NIL      ;;
        _HMG_SYSDATA \[ 432 \]               := NIL      ;;
        _HMG_SYSDATA \[ 433 \]           := NIL      ;;
        _HMG_SYSDATA \[ 463 \]     := .T.    ;;
   _HMG_SYSDATA \[ 412 \]     := .F.      ;;
   _HMG_SYSDATA \[ 413 \]  := .F.      ;;
   _HMG_SYSDATA \[ 414 \]  := .F.      ;;
   _HMG_SYSDATA \[ 353 \]  := .F.      ;;
   _HMG_SYSDATA \[ 415 \]  := .F.
Cada vez que se coloca DEFINE BUTTON no fonte, na sintaxe alternativa, entra tudo isso no fonte.
Isso pode tornar o fonte compilado quilométrico, porque temos muitos buttons no aplicativo, e o EXE gigantesco.
No caso do DLGAUTO, isso aparece apenas uma única vez em todos os fontes !!!!!
Nesse caso é HMG3. Quer melhorar a HMG3 em tamanho de EXE, tempo de compilação, etc?
É muito simples: é só criar uma função: DefineButton(), colocar isso nela, e trocar esse define pela chamada da função.
Ou começar a criar classe verdadeira pra isso, sei lá...
Me refiro apenas a tratar a mudança simples como algo que poderá ser expandido no futuro, não uma mudança radical.

exemplo:

Código: Selecionar todos

CREATE CLASS button
   METHOD New( name )
   ENDCLASS
METHOD New( name ) CLASS button
        _HMG_SYSDATA [ 416 ]              := name
        _HMG_SYSDATA [ 417 ]                := NIL      
   _HMG_SYSDATA [ 432 ]     := NIL      
   _HMG_SYSDATA [ 431 ]     := NIL      
        _HMG_SYSDATA [ 418 ]           := NIL      
        _HMG_SYSDATA [ 419 ]            := NIL     
        _HMG_SYSDATA [ 420 ]             := NIL    
        _HMG_SYSDATA [ 421 ]            := NIL     
        _HMG_SYSDATA [ 422 ]              := NIL   
        _HMG_SYSDATA [ 423 ]              := NIL   
        _HMG_SYSDATA [ 424 ]           := NIL      
        _HMG_SYSDATA [ 425 ]              := .F.    
        _HMG_SYSDATA [ 426 ]        := NIL      
        _HMG_SYSDATA [ 427 ]       := NIL      
        _HMG_SYSDATA [ 428 ]         := .F.     
        _HMG_SYSDATA [ 429 ]            := NIL 
        _HMG_SYSDATA [ 430 ]         := .F.      
        _HMG_SYSDATA [ 431 ]               := NIL      
        _HMG_SYSDATA [ 432 ]               := NIL      
        _HMG_SYSDATA [ 433 ]           := NIL      
        _HMG_SYSDATA [ 463 ]     := .T.    
   _HMG_SYSDATA [ 412 ]     := .F.      
   _HMG_SYSDATA [ 413 ]  := .F.      
   _HMG_SYSDATA [ 414 ]  := .F.      
   _HMG_SYSDATA [ 353 ]  := .F.      
   _HMG_SYSDATA [ 415 ]  := .F.
   RETURN Self
Pronto.
Não mudou nada nem no uso, e nem no funcionamento, apenas vai servir pra reduzir fonte compilado.
Mas vai acender a vontade pra muitas possibilidades.

Só mostrando.
Estou apenas trabalhando no DLGAUTO com as libs originais, mas isso não impede de ver possibilidades.

Qualquer alteração na LIB tem que ser feita na versão oficial, e não em versão isolada.
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

Dlgauto / bugs de libs com/sem solução

Mensagem por JoséQuintas »

Achei alternativas pra OOHG:

Código: Selecionar todos

GetControlHandle( cControl, cDlg )
GetControlObject( cControl, cDlg )
GetControlType( cControl, xDlg )
A ordem é contrária a GetProperty() de HMG, talvez dialog seja opcional.

Código: Selecionar todos

oControl := GetControlObject( cControl, cDlg )
? oControl:Type
? oControl:hWnd
? oControl:Name
? GetControlObject( cControl, cDlg ):Type 
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/
Responder