HMG3 pra objeto

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

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

HMG3 pra objeto

Mensagem 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.
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

HMG3 pra objeto

Mensagem 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.
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

HMG3 pra objeto

Mensagem 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
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