HMG3 pra objeto
Enviado: 25 Ago 2025 18:38
A mudança tá muito interessante.
A classe de controle:
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
Uma primeira alteração pode ser esta
Mais legal ainda é esta:
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.
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.
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, ... )
_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
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
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
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
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.