Página 1 de 1

HMG3 pra objeto

Enviado: 25 Ago 2025 18:38
por JoséQuintas
A mudança tá muito interessante.

A classe de controle:

Código: Selecionar todos

METHOD Type( ... )             CLASS _HmgControlclass; RETURN ::SetGetSYSDATA( 1, ... )
METHOD Name( ... )             CLASS _HmgControlclass; RETURN ::SetGetSYSDATA( 2, ... )
METHOD Handle( ... )           CLASS _HmgControlclass; RETURN ::SetGetSYSDATA( 3, ... )
METHOD ParentForm( ... )       CLASS _HmgControlclass; RETURN ::SetGetSYSDATA( 4, ... )
METHOD IsDeleted( ... )        CLASS _HmgControlclass; RETURN ::SetGetSYSDATA( 13, ... )
Porque?
_HMG_SYSDATA[1], é o array com tipos
_HMG_SYSDATA[2] é o array com nomes
_HMG_SYSDATA[3] é o array com handle

um button, por exemplo, que seria o controle 5, o tipo dele fica em _HMG_SYSDATA[ 1, 5 ]
A definição então é _HMG_SYSDATA[ nTipoValor, nControleIndex ]
É exatamente o que é o método usa pra localizar a informação.

Tem esta rotina da bostaurus

Código: Selecionar todos

Function bt_StatusBarHandle (Win)
   LOCAL hWnd := bt_WinHandle (Win)
   LOCAL k, hWndStatusBar := 0
   FOR k := 1 TO HMG_LEN (_HMG_SYSDATA [1])
       IF _HMG_SYSDATA [1] [k] == "STATUSBAR" .AND. _HMG_SYSDATA [4] [k] == hWnd
          hWndStatusBar := _HMG_SYSDATA [3] [k]
       ENDIF
   NEXT
Return hWndStatusBar
Uma primeira alteração pode ser esta

Código: Selecionar todos

Function bt_StatusBarHandle (Win)
   
   LOCAL hWnd := bt_WinHandle (Win)
   LOCAL hWndStatusBar := 0, oControl
   
   FOR EACH oControl IN _oHmgApp():AllControls()
       IF oControl:Type == "STATUSBAR" .AND. oControl:ParentForm == hWnd
          hWndStatusBar := oControl:Handle
       ENDIF
   NEXT

   Return hWndStatusBar
Mais legal ainda é esta:

Código: Selecionar todos

Function bt_StatusBarHandle (Win)
   
   LOCAL hWnd := bt_WinHandle (Win)
   LOCAL hWndStatusBar := 0, oControl
   
   oControl := oHmgApp():ControlByBCode( { | e | e:Type == "STATUSBAR" .AND. e:ParentForm == hWnd } )
   IF oControl != Nil
      hWndStatusBar := oControl:Handle
   ENDIF

   Return hWndStatusBar
Pra que trazer todos, se quero apenas o que atende aquele filtro ?
Mais prático passar o filtro.

Eliminado _HMG_SYSDATA do fonte, trabalhando direto com a classe.

Não mudou nada ?
Lógico que mudou.
Agora é classe.
O array.... todos os fontes usam o array, ele precisa ser mantido.
No final sim, só alterar a classe.

Código: Selecionar todos

VAR Type INIT ""
VAR Name INIT ""
VAR Handle INIT 0
VAR FormParent INIT 0
Só fazer isso, e já era, objeto total.

Se alterar isso agora.... vai dar erro em todas as outras partes do fonte.

É como eu disse: é alterar 6 pra meia dúzia, de um tipo de variável pra outro.
Mas a mágica está pronta, objeto disponível pra uso.
Começa virtual, e alterando algumas linhas depois, vira real.

Não adianta ter pressa.
É muito número, errar número é fácil.

O fonte passa a ser auto-explicativo

Já mexi no coração dos forms, ainda não terminei, agora é no coração dos controles.
É porque TUDO é baseado em Index, Name, handle, Parent
Qualquer erro nisso é fatal.

HMG3 pra objeto

Enviado: 25 Ago 2025 19:56
por JoséQuintas
o que atrapalha é errorsys de lib gráfica.

Código: Selecionar todos

Application Internal Error - d:\github\dlgauto\source\test.exe
Terminated at: 2025-08-25 20:10:43
Unrecoverable error 9003: Too many recursive error handler calls
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from (b)_HMGAPPCLASS(40) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYINDEX(0) in source\_hmgapp.prg
Called from EVENTS(883) in source\h_windows.prg
Called from C_MSGSTOP(0)
Called from SHOWERROR(181) in source\ErrorSys.prg
Called from DEFERROR(129) in source\ErrorSys.prg
Called from (b)ERRORSYS(66) in source\ErrorSys.prg
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from (b)_HMGAPPCLASS(40) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYINDEX(0) in source\_hmgapp.prg
Called from EVENTS(883) in source\h_windows.prg
Called from C_MSGSTOP(0)
Called from SHOWERROR(181) in source\ErrorSys.prg
Called from DEFERROR(129) in source\ErrorSys.prg
Called from (b)ERRORSYS(66) in source\ErrorSys.prg
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from (b)_HMGAPPCLASS(40) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYINDEX(0) in source\_hmgapp.prg
Called from EVENTS(883) in source\h_windows.prg
Called from C_MSGSTOP(0)
Called from SHOWERROR(181) in source\ErrorSys.prg
Called from DEFERROR(129) in source\ErrorSys.prg
Called from (b)ERRORSYS(66) in source\ErrorSys.prg
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from (b)_HMGAPPCLASS(40) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYINDEX(0) in source\_hmgapp.prg
Called from EVENTS(883) in source\h_windows.prg
Called from C_MSGSTOP(0)
Called from SHOWERROR(181) in source\ErrorSys.prg
Called from DEFERROR(129) in source\ErrorSys.prg
Called from (b)ERRORSYS(66) in source\ErrorSys.prg
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from (b)_HMGAPPCLASS(40) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYINDEX(0) in source\_hmgapp.prg
Called from EVENTS(883) in source\h_windows.prg
Called from C_MSGSTOP(0)
Called from SHOWERROR(181) in source\ErrorSys.prg
Called from DEFERROR(129) in source\ErrorSys.prg
Called from (b)ERRORSYS(66) in source\ErrorSys.prg
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from (b)_HMGAPPCLASS(40) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYINDEX(0) in source\_hmgapp.prg
Called from EVENTS(883) in source\h_windows.prg
Called from C_MSGSTOP(0)
Called from SHOWERROR(181) in source\ErrorSys.prg
Called from DEFERROR(129) in source\ErrorSys.prg
Called from (b)ERRORSYS(66) in source\ErrorSys.prg
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from (b)_HMGAPPCLASS(40) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYINDEX(0) in source\_hmgapp.prg
Called from EVENTS(883) in source\h_windows.prg
Called from C_MSGSTOP(0)
Called from SHOWERROR(181) in source\ErrorSys.prg
Called from DEFERROR(129) in source\ErrorSys.prg
Called from (b)ERRORSYS(66) in source\ErrorSys.prg
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from (b)_HMGAPPCLASS(40) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYINDEX(0) in source\_hmgapp.prg
Called from EVENTS(883) in source\h_windows.prg
Called from C_MSGSTOP(0)
Called from SHOWERROR(181) in source\ErrorSys.prg
Called from DEFERROR(129) in source\ErrorSys.prg
Called from (b)ERRORSYS(66) in source\ErrorSys.prg
Called from __ERRRT_SBASE(0)
Called from _HMGAPPCLASS:ERROR(0) in ../../../tobject.prg
Called from (b)HBOBJECT(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:MSGNOTFOUND(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:AADDCONTROL(0) in ../../../tobject.prg
Called from _HMGAPPCLASS:CONTROLCOUNT(295) in source\_hmgapp.prg
Called from _HMGAPPCLASS:CONTROLBYBLOCK(219) in source\_hmgapp.prg
Called from BT_STATUSBARHANDLE(408) in source\BosTaurus\h_BosTaurus.prg
Called from BT_STATUSBARHEIGHT(426) in source\BosTaurus\h_BosTaurus.prg
Called from REPOSITIONTOOLBAR(421) in source\h_toolbar.prg
Called from EVENTS(1466) in source\h_windows.prg
Called from UPDATEWINDOW(0)
Called from EVENTS(898) in source\h_windows.prg
Called from SHOWWINDOW(0)
Called from _SHOWWINDOW(3937) in source\h_windows.prg
Called from _ACTIVATEWINDOW(5462) in source\h_windows.prg
Called from GUI_DIALOGACTIVATE(324) in lib.prg
Called from (b)HMG3CLASS(26) in lib.prg
Called from HMG3CLASS:DIALOGACTIVATE(0) in lib.prg
Called from GUI_DLGMENU(114) in lib.prg
Called from (b)HMG3CLASS(30) in lib.prg
Called from HMG3CLASS:DLGMENU(0) in lib.prg
Called from FRM_DIALOGMENU(25) in frm_DialogMenu.prg
Called from MAIN(52) in test.prg
------------------------------------------------------------------------
Mas já identifiquei o problema.
É que... se dá erro... não adianta querer enfeitar o erro, que só atrapalha.

AADDcontrol, quando deveria ser ADDControl

Com mensagem de erro enfeitada.... se dá erro pra adicionar controle... adicionar mais controle pra mostrar o erro resulta em erros infinitos.

HMG3 pra objeto

Enviado: 26 Ago 2025 13:42
por JoséQuintas
hmg3.png
Janelas dependendo de classe, controles dependendo de classe.
Está funcionando, melhor que antes.

Não sei porque, desde 2023 o programa ficava zumbi ao fechar, e não fica mais.
Sei lá.... só estou alterando pra objeto, e testando se funciona.

Por exempo, pra testar se é textbox, label, browse, grid, etc., isso já está sendo feito pela classe.
Sinal de que está dando certo... kkkk