Página 1 de 1

Quem tiver conta no hmgforum.com

Enviado: 25 Ago 2025 12:21
por JoséQuintas
Favor quem tiver conta no hmgforum.com, informar que estou mudando hmg 3 pra objeto.

Não é grande coisa, é praticamente renomear variáveis.
hmg3obj.png
Mas pra dar uma idéia, falta renomear quase 16.000 ocorrências.

É um longo trabalho, vai ser terrível perder as mudanças se sair versão nova.
Além disso, são necessários testes.
As mudanças são totalmente compatíveis, basta usar a qualquer momento, não precisa esperar terminar.

Supondo que testem a cada 200 mudanças ... em caso de pane geral é reavaliar as 200 mudanças, ou até anular as 200 mudanças.
Não vai ser tão simples, depois de milhares de mudanças....

Uma amostra de fonte atual, meio alterado e funcionando:

Código: Selecionar todos

         i := oFormI:Index
			oFormI:IsDeleted         := .T.
			oFormI:Handle            := 0
			oFormI:Name              := ""
			oFormI:IsActive          := .f.
			oFormI:Type              := ""
			oFormI:ParentHandle := 0
			oFormI:InitProcedure     := ""
			oFormI:ReleaseProcedure  := ""
			oFormI:TooltipHandle     := 0
			oFormI:FormContextMenuHandle	:= 0
			_HMG_SYSDATA [ 75 ] [i]	:= ""
			_HMG_SYSDATA [ 76 ] [i]	:= ""
			_HMG_SYSDATA [ 77 ] [i]	:= ""
			_HMG_SYSDATA [ 78 ] [i]	:= ""
                      _HMG_SYSDATA [ 79 ] [I]	:= Nil
			_HMG_SYSDATA [ 80 ] [i]	:= ""
			_HMG_SYSDATA [ 81 ] [i]	:= .F.
			_HMG_SYSDATA [ 82 ] [i] := ''
			_HMG_SYSDATA [ 83 ] [i] := ''
			_HMG_SYSDATA [ 84 ] [i] := ''
			_HMG_SYSDATA [ 87 ] [i] := 0
			_HMG_SYSDATA [ 88 ] [I] := 0
			_HMG_SYSDATA [ 89 ] [i] := {}
			_HMG_SYSDATA [ 90 ] [i] := {}
			oFormI:VirtualHeight     := 0
			_HMG_SYSDATA [ 85 ] [i] := ""
			_HMG_SYSDATA [ 86 ] [i] := ""
			oFormI:VirtualWidth      := 0
			_HMG_SYSDATA [ 93 ] [i] := .f.
			_HMG_SYSDATA [ 94 ] [i] := ""
			_HMG_SYSDATA [ 95 ] [i] := ""

Quem tiver conta no hmgforum.com

Enviado: 02 Set 2025 19:06
por JoséQuintas
hmg3obj.png
Uia.
Eram quase 16.000 ocorrências de _HMG_SYSDATA, a variável pública linguição.
Agora menos de 6.000

E ainda funciona !!!

O array... de 508 elementos.... agora só tem 102.
Alterando mais radical e sumindo com o array.
Esses agora já são as propriedades de forms e controles.

Esses tem que ser manual, não dá pro harbour ajudar.

Como definir nome é complicado, apelei pra usar APPnnn, FORMnnn, e CONTROLnnn, conforme a classe destino.
É...... o array _HMG_SYSDATA[66] agora é Form:Name, tem Form:Handle, Form:Index, e Form:FORM100, Form:FORM101, Form:GraphTasks
Depois que decidir um bom nome, será só trocar geral automático, não dá pra ficar errando digitação na mudança.

Comecei, agora quero acabar, fazer o que....

Quem tiver conta no hmgforum.com

Enviado: 04 Set 2025 09:50
por JoséQuintas
resta.png
Restam 3.321
De 15.976 pra 3.321... mais de 15.000 alterações.
Com certeza, aonde deu, usei o harbour pra ajudar.

Apesar da proporção, essas restantes são as que precisam de mais cuidado.
Usando o esquema de compatibilidade, depois de ter resetado várias vezes por bug.

Quem tiver conta no hmgforum.com

Enviado: 04 Set 2025 14:53
por JoséQuintas
Aqui tem algo interessante.
Vou alterar isto no final.

Código: Selecionar todos

   T01 :=   _HMG_SYSDATA [ 1 ]      [j]
   T02 :=   _HMG_SYSDATA [   2 ]      [j]
   T03 :=   _HMG_SYSDATA [   3 ]      [j]
   T04 :=   _HMG_SYSDATA [   4 ]   [j]
   T05 :=   _HMG_SYSDATA [ 5 ]      [j]
   T06 :=   _HMG_SYSDATA [ 6 ]      [j]
   T07 :=   _HMG_SYSDATA [ 7 ]      [j]
   T08 :=   _HMG_SYSDATA [ 8 ]      [j]
   T09 :=   _HMG_SYSDATA [ 9 ]      [j]
   T10 :=   _HMG_SYSDATA [ 10 ]   [j]
   T11 :=   _HMG_SYSDATA [ 11 ]   [j]
   T12 :=   _HMG_SYSDATA [ 12 ]   [j]
   T13 :=   _HMG_SYSDATA [ 13 ]      [j]
   T14 :=   _HMG_SYSDATA [ 14 ]      [j]
   T15 :=   _HMG_SYSDATA [ 15 ]      [j]
   T16 :=   _HMG_SYSDATA [ 16 ]      [j]
   T17 :=   _HMG_SYSDATA [ 17 ]      [j]
   T18 :=   _HMG_SYSDATA [ 18 ]      [j]
   T19 :=   _HMG_SYSDATA [ 19 ]      [j]
   T20 :=   _HMG_SYSDATA [ 20 ]      [j]
   T21 :=   _HMG_SYSDATA [ 21 ]      [j]
   T22 :=   _HMG_SYSDATA [ 22 ]      [j]
   T23 :=   _HMG_SYSDATA [ 23 ]   [j]
   T24 :=   _HMG_SYSDATA [ 24 ]   [j]
   T25 :=   _HMG_SYSDATA [ 25 ]      [j]
   T26 :=   _HMG_SYSDATA [ 26 ]   [j]
   T27 :=   _HMG_SYSDATA [ 27 ]      [j]
   T28 :=   _HMG_SYSDATA [ 28 ]      [j]
   T29 :=   _HMG_SYSDATA [ 29 ]   [j]
   T30 :=   _HMG_SYSDATA [ 30 ]      [j]
   T31 :=   _HMG_SYSDATA [ 31 ]      [j]
   T32 :=   _HMG_SYSDATA [ 32 ]      [j]
   T33 :=   _HMG_SYSDATA [ 33 ]      [j]
   T34 :=   _HMG_SYSDATA [ 34 ]      [j]
   T35 :=   _HMG_SYSDATA [ 35 ]      [j]
   T36 :=   _HMG_SYSDATA [ 36 ]      [j]
   T37 :=   _HMG_SYSDATA [ 37 ]   [j]
   T38 :=   _HMG_SYSDATA [ 38 ]      [j]
   T39 :=   _HMG_SYSDATA [ 39 ]      [j]
   T40 :=   _HMG_SYSDATA [ 40 ]      [j]


   _HMG_SYSDATA [ 1 ]      [j] := _HMG_SYSDATA [ 1 ]      [k]
   _HMG_SYSDATA [   2 ]      [j] := _HMG_SYSDATA [   2 ]      [k]
   _HMG_SYSDATA [   3 ]      [j] := _HMG_SYSDATA [   3 ]      [k]
   _HMG_SYSDATA [   4 ]   [j] := _HMG_SYSDATA [   4 ]   [k]
   _HMG_SYSDATA [ 5 ]      [j] := _HMG_SYSDATA [ 5 ]         [k]
   _HMG_SYSDATA [ 6 ]      [j] := _HMG_SYSDATA [ 6 ]      [k]
   _HMG_SYSDATA [ 7 ]      [j] := _HMG_SYSDATA [ 7 ]      [k]
   _HMG_SYSDATA [ 8 ]      [j] := _HMG_SYSDATA [ 8 ]      [k]
   _HMG_SYSDATA [ 9 ]      [j] := _HMG_SYSDATA [ 9 ]      [k]
   _HMG_SYSDATA [ 10 ]   [j] := _HMG_SYSDATA [ 10 ]   [k]
   _HMG_SYSDATA [ 11 ]   [j] := _HMG_SYSDATA [ 11 ]   [k]
   _HMG_SYSDATA [ 12 ]   [j] := _HMG_SYSDATA [ 12 ]   [k]
   _HMG_SYSDATA [ 13 ]      [j] := _HMG_SYSDATA [ 13 ]      [k]
   _HMG_SYSDATA [ 14 ]      [j] := _HMG_SYSDATA [ 14 ]      [k]
   _HMG_SYSDATA [ 15 ]      [j] := _HMG_SYSDATA [ 15 ]      [k]
   _HMG_SYSDATA [ 16 ]      [j] := _HMG_SYSDATA [ 16 ]      [k]
   _HMG_SYSDATA [ 17 ]      [j] := _HMG_SYSDATA [ 17 ]      [k]
   _HMG_SYSDATA [ 18 ]      [j] := _HMG_SYSDATA [ 18 ]         [k]
   _HMG_SYSDATA [ 19 ]      [j] := _HMG_SYSDATA [ 19 ]         [k]
   _HMG_SYSDATA [ 20 ]      [j] := _HMG_SYSDATA [ 20 ]      [k]
   _HMG_SYSDATA [ 21 ]      [j] := _HMG_SYSDATA [ 21 ]      [k]
   _HMG_SYSDATA [ 22 ]      [j] := _HMG_SYSDATA [ 22 ]      [k]
   _HMG_SYSDATA [ 23 ]   [j] := _HMG_SYSDATA [ 23 ]   [k]
   _HMG_SYSDATA [ 24 ]   [j] := _HMG_SYSDATA [ 24 ]   [k]
   _HMG_SYSDATA [ 25 ]      [j] := _HMG_SYSDATA [ 25 ]      [k]
   _HMG_SYSDATA [ 26 ]   [j] := _HMG_SYSDATA [ 26 ]   [k]
   _HMG_SYSDATA [ 27 ]      [j] := _HMG_SYSDATA [ 27 ]      [k]
   _HMG_SYSDATA [ 28 ]      [j] := _HMG_SYSDATA [ 28 ]      [k]
   _HMG_SYSDATA [ 29 ]   [j] := _HMG_SYSDATA [ 29 ]   [k]
   _HMG_SYSDATA [ 30 ]      [j] := _HMG_SYSDATA [ 30 ]      [k]
   _HMG_SYSDATA [ 31 ]      [j] := _HMG_SYSDATA [ 31 ]      [k]
   _HMG_SYSDATA [ 32 ]      [j] := _HMG_SYSDATA [ 32 ]      [k]
   _HMG_SYSDATA [ 33 ]      [j] := _HMG_SYSDATA [ 33 ]      [k]
   _HMG_SYSDATA [ 34 ]      [j] := _HMG_SYSDATA [ 34 ]      [k]
   _HMG_SYSDATA [ 35 ]      [j] := _HMG_SYSDATA [ 35 ]      [k]
   _HMG_SYSDATA [ 36 ]      [j] := _HMG_SYSDATA [ 36 ]      [k]
   _HMG_SYSDATA [ 37 ]   [j] := _HMG_SYSDATA [ 37 ]      [k]
   _HMG_SYSDATA [ 38 ]      [j] := _HMG_SYSDATA [ 38 ]      [k]
   _HMG_SYSDATA [ 39 ]      [j] := _HMG_SYSDATA [ 39 ]      [k]
   _HMG_SYSDATA [ 40 ]      [j] := _HMG_SYSDATA [ 40 ]      [k]


   _HMG_SYSDATA [ 1 ]      [k] := T01
   _HMG_SYSDATA [   2 ]      [k] := T02
   _HMG_SYSDATA [   3 ]      [k] := T03
   _HMG_SYSDATA [   4 ]   [k] := T04
   _HMG_SYSDATA [ 5 ]      [k] := T05
   _HMG_SYSDATA [ 6 ]      [k] := T06
   _HMG_SYSDATA [ 7 ]      [k] := T07
   _HMG_SYSDATA [ 8 ]      [k] := T08
   _HMG_SYSDATA [ 9 ]      [k] := T09
   _HMG_SYSDATA [ 10 ]   [k] := T10
   _HMG_SYSDATA [ 11 ]   [k] := T11
   _HMG_SYSDATA [ 12 ]   [k] := T12
   _HMG_SYSDATA [ 13 ]      [k] := T13
   _HMG_SYSDATA [ 14 ]      [k] := T14
   _HMG_SYSDATA [ 15 ]      [k] := T15
   _HMG_SYSDATA [ 16 ]      [k] := T16
   _HMG_SYSDATA [ 17 ]      [k] := T17
   _HMG_SYSDATA [ 18 ]      [k] := T18
   _HMG_SYSDATA [ 19 ]      [k] := T19
   _HMG_SYSDATA [ 20 ]      [k] := T20
   _HMG_SYSDATA [ 21 ]      [k] := T21
   _HMG_SYSDATA [ 22 ]      [k] := T22
   _HMG_SYSDATA [ 23 ]   [k] := T23
   _HMG_SYSDATA [ 24 ]   [k] := T24
   _HMG_SYSDATA [ 25 ]      [k] := T25
   _HMG_SYSDATA [ 26 ]   [k] := T26
   _HMG_SYSDATA [ 27 ]      [k] := T27
   _HMG_SYSDATA [ 28 ]      [k] := T28
   _HMG_SYSDATA [ 29 ]   [k] := T29
   _HMG_SYSDATA [ 30 ]      [k] := T30
   _HMG_SYSDATA [ 31 ]      [k] := T31
   _HMG_SYSDATA [ 32 ]      [k] := T32
   _HMG_SYSDATA [ 33 ]      [k] := T33
   _HMG_SYSDATA [ 34 ]      [k] := T34
   _HMG_SYSDATA [ 35 ]      [k] := T35
   _HMG_SYSDATA [ 36 ]      [k] := T36
   _HMG_SYSDATA [ 37 ]      [k] := T37
   _HMG_SYSDATA [ 38 ]      [k] := T38
   _HMG_SYSDATA [ 39 ]      [k] := T39
   _HMG_SYSDATA [ 40 ]      [k] := T40
No final vai ser assim:

Código: Selecionar todos

WITH OBJECT oHmgApp()
   oTmp := :aControlList[ J ]
   :aControlList[ J ] := :aControlList[ K ]
   :aControlList[ K ] := oTmp
   :aControlList[ J ]:Index := J
   :aControlList[ K ]:Index  := K
ENDWITH
É interessante isso.
Fica visível que classe é só um formato de variável.
E que o formato pode facilitar a programação.

Por enquanto, pra CONTROLES, que é esse o caso, está funcionando compatível através do array, até o término da mudança.
Como vantagem, não preciso alterar esse fonte agora.
E a vantagem após alterar pra objeto... a mudança de um fonte pro outro mostra uma delas

Cada objeto está em um elemento do array, só preciso trocar os elementos de lugar.
E como o INDEX é a referência da posição, alterar ele também.

Isso depois... por enquanto a classe é só uma passagem pra permitir mudança nos fontes sem quebrar o funcionamento.

Hoje a classe é isto:

Código: Selecionar todos

METHOD Name( ... )               SETGET
METHOD Name( ... )             CLASS _HmgControlclass; RETURN ::SetGetSYSDATA(  2, ... )
Name pega um elemento do array.
Depois VAR Name, e fim do array, a própria classe vai ter o name.

Muito interessante isso.
Talvez possa ser aplicado em telas.

Quem tiver conta no hmgforum.com

Enviado: 05 Set 2025 15:15
por JoséQuintas
hmg3.png
Aí por exemplo, é erro esperado.
Reduzi o array pra 40, e tá tentando iniciar o 54.

Código: Selecionar todos

   VAR    APP054                         INIT _GETDDLMESSAGE()
Ele já consta na classe.
Apenas não tinha apagado essa linha.

Os 40 elementos restantes são referentes a controles.
É a última parte que estou mexendo.
Hoje confirmando se tudo ok para os elementos acima de 40.

É isso mesmo.
Não tem mais compatibilidade pra elementos de 40 a 518, viraram classe definitivamente.
Só resta classe "simulada" para os elementos de 40 pra baixo, que são os controles.
Se alterar pra real, nada mais funciona até terminar.
Com a simulada... vou testando...

Seria uma pena perder todas essas alterações.... ou... criar uma nova versão só por não conseguir contato no fórum.

Quem tiver conta no hmgforum.com

Enviado: 05 Set 2025 17:24
por JoséQuintas
converte.png
Pra certas coisas, coloco o harbour pra ajudar.
Encontro o padrão e troco automático.

mais de 16.000 alterações.... só com harbour ajudando.
O que sobrar... vai manual mesmo.

Isso deixa claro que é como eu disse:
Alterar pra classe, é como trocar o tipo de variável

Tanto é que um "replace all" está fazendo isso.

Quem tiver conta no hmgforum.com

Enviado: 05 Set 2025 17:44
por JoséQuintas
propr.png
Depois da troca.

O que é a propriedade CTRL039 ?
Sei lá... é a mesma que tava no array _HMG_SYSDATA[ 39 ]

A diferença é que agora é oControl:CTRL039, ou pegando da lista de classes ControlByIndex( n ):CTRL039
Ao que parece, contém muita coisa dentro.
Se eu for nomear tudo isso agora... seria um perigo, melhor manter nome compatível.

Código: Selecionar todos

oButton:CTRL039 := xxxxx
ou, seguindo o estilo anterior que cada controle tem um número:

Código: Selecionar todos

ControlByIndex( n ):CTRL039
Lembrando que as variáveis públicas também contém número, caso não saibam.

Lembram disto ?

Código: Selecionar todos

INIT WINDOW JANELACLI
Isso cria a variável pública JANELACLI que contém um número.
No estilo antigo: _HMGSYSDATA[ 66, JANELACLI ) retorna o NAME
No estilo novo: FormByIndex( JANELACLI ):NAME

E se forem várias coisas da janelacli

Código: Selecionar todos

oForm := FormByIndex( JANELACLI )
? oForm:Name
? oForm:Handle
? oForm:Index
? oForm:IsDeleted
? oForm:FORM070 // não defini nome
Lógico, com tudo em classe muitos desses ControlByIndex() poderão ser eliminados e usados diretamente a classe.

Mas está claro aí: só trocando nomes/tipos de variáveis
A idéia foi boa, de como fazer a mudança, mas de um modo geral é trabalho braçal mesmo.
Só usando harbour pra agilizar, e não virar uma eternidade pra fazer a mudança.
Com a vantagem de evitar erros de digitação.

Quem tiver conta no hmgforum.com

Enviado: 05 Set 2025 18:09
por JoséQuintas
isdeleted.png
_HMG_SYSDATA[ 13 ] era a propriedade ISdeleted, se o controle foi excluído, CADA controle na lista.
Pra saber sobre o controle era _HMG_SYSDATA[ 13, qualcontrole ]

Na alteração sem saber nome, alterei pra qualcontrole:CTRL013
E agora, esse já tem nome, altero para qualcontrole:IsDeleted

A classe atual, durante mudança:

Código: Selecionar todos

METHOD IsDeleted( ... )          SETGET
METHOD    CTRL013                SETGET
METHOD CTRL013( ... )       CLASS _HmgControlClass; RETURN ::SetGetSYSDATA( 13, ... )
METHOD IsDeleted( ... )        CLASS _HmgControlclass; RETURN ::SetGetSYSDATA( 13, ... )
qualquer coisa que usar no fonte funciona.
Isso permite mudar sem medo.
Processo concluído, alterar IsDeleted pra VAR IsDeleted INIT .F. e processo concluído de mudança pra classe

Achei muito interessante fazer desse jeito.
É tudo pronto, sem estar pronto.
É mudar pra classe, sem perder o funcionamento atual de fonte não alterado.
É testar se deu problema a qualquer momento.
É usar o harbour pra ajudar no serviço.

Acho que na HMG Extended não foi usado um esquema desse tipo, e por isso demorando mais.

Quem tiver conta no hmgforum.com

Enviado: 05 Set 2025 18:28
por JoséQuintas
test.png
Se tiver que dar erro.... dá erro
Aí é só resolver.

Quem tiver conta no hmgforum.com

Enviado: 05 Set 2025 18:33
por JoséQuintas

Código: Selecionar todos

      IF i > 0 .AND. ValType ( ControlByIndex( I ):CTRL041 [ 3 ] ) == "A"
Está testando o elemento 3 da propriedade 41, e dá erro.

Código: Selecionar todos

   VAR    CTRL041                INIT Nil  // array --> { OnKeyControlEventProc, OnMouseControlEventProc, ToolTip_CustomDrawData }
Lógico... deixei até a anotação que é um array de 3 elementos, e iniciei como Nil... kkkkk

Quem tiver conta no hmgforum.com

Enviado: 05 Set 2025 18:58
por JoséQuintas
gitsoft.png
Pra que serve o GIT ?
Nessas horas faz toda a diferença.

Talvez na troca automática, alterei a variável X pra I
É anular tudo, por via das dúvidas, já que o automático alterou geral.
E fazer de novo automático....

Mas... aproveitar as alterações em classe.

É pra isso que serve o GIT.
Alterações sob controle, fazendo certo ou errado.

E é por isso que eu queria mais gente testando, pra pegar erros mais rápido.
Estou testando só o que posso.
E fica mais fácil localizar o erro quando estamos com a mão na massa.