Página 1 de 1

SetFocus vs This - Formulário/Controle em foco

Enviado: 16 Set 2022 10:09
por carlaoonline
Bom dia!

Tenho uma dúvida (MiniGui):

Como Saber o nome do formulário e do controle em foco?


O Form_Main tem um Botao01 que cria vários outros Forms (Form_01, Form_02, Form_03...)

Quando executamos o comando:

Código: Selecionar todos


Form_01.Release   // Fechou o formulario que estava 

DoMethod( "Form_02","SetFocus")  // Mandei para o formulario 2
cFormularioAtual=ThisWindow.Name
DoMethod( "Form_02","Grid_Clientes","SetFocus")  // Reafirmei p foco na grid desse formulario.
cControleAtual=This.name

MsgBox("Form = "+cFormularioAtual+ "      Controle = "+cControleAtual)
Considerando que não haja nenhum ON GOTFOCUS, ONLOSTFOCUS, etc... em nenhum lugar....

a resposta não deveria ser: Form = Form_02 Controle = Grid_Clientes ?

Mesmo colocando após os comandos 'DoMethod' um 'DO EVENTS', aqui está dando Form_Main e o Botao01 após os SetFocus...

Isso tá correto?

SetFocus vs This - Formulário/Controle em foco

Enviado: 16 Set 2022 13:06
por JoséQuintas
Se não tiver outro jeito, TALVEZ, apenas TALVEZ, WVG poderia ajudar nessas horas.
TALVEZ até multithread.
Tudo TALVEZ, depende de testes

Coisa simples:

As GUIs também funcionam normalmente usando GTWVG como default.
Com GTWVG pode ser mais simples criar um ponto de referência pra chamada e retorno dos FORMS.
Nesse caso trabalharia com GTWVG com janela oculta, sem aparecer NADA DA GTWVG na tela.
Nem sei direito se a GTWVG entra, quando não existe tela, mas seria uma ajuda.
NÃO sei se GTNUL poderia dar o mesmo efeito.

Pense nisso, NÃO é um bicho de sete cabeças, e TALVEZ nem precise usar nenhum comando da GTWVG, ou TALVEZ só um.
Só testando pra saber.

Pense nisso TALVEZ como último recurso, já que seria um uso fora do normal, sem suporte.

SetFocus vs This - Formulário/Controle em foco

Enviado: 16 Set 2022 16:48
por carlaoonline
JoséQuintas escreveu:TALVEZ até multithread.
... vou tentar abrir os forms dessa forma pra ver se melhora.

Para saber o form/controle em foco após um SetFocus, percebi que na forma abaixo realmente funciona, ao contrário do ThisWindow.Name/This.Name, os quais, dependendo, precisam esperar sair da função que fez a chamada para mostrar o form/controle setado por SetFocus.

Código: Selecionar todos

      cFormNameEmFoco = GetProperty ( _HMG_aFormNames[_HMG_LastActiveFormIndex ]  , "Name" )   // Nome do Form em foco
      cControleEmFoco = GetProperty (  _HMG_aFormNames[ _HMG_LastActiveFormIndex ]  , "FocusedControl" )  // Nome do Controle em foco

SetFocus vs This - Formulário/Controle em foco

Enviado: 16 Set 2022 17:28
por JoséQuintas
Vixe, de novo problema com a gambiarra de fazer OOP através de CH.

Pelo seu uso, eu tentaria fazer uma OOP básica com a minigui.

É uma pena que provavelmente com OOHG perderia recursos, mas aceitaria OOP de verdade.

A básica, é você ir criando classes conforme for precisando, apenas como intermediárias da HMG real.

NÃO é difícil, mas será trabalhoso, não do ponto de vista de dar trabalho, mas de digitar bastante até ter tudo.
Por isso mencionei de ir fazendo conforme precisar.

SetFocus vs This - Formulário/Controle em foco

Enviado: 16 Set 2022 18:49
por Itamar M. Lins Jr.
Olá!
Como Saber o nome do formulário e do controle em foco?
Se entendi, basta ver se tem ou não o "flag"(opção) para controle.
A Minigui usa "." para acesso das opções.

Como não uso a Minigui, mas não deve ser nada de mais.
Na Hwgui é oObjNome:Handle == hwg_Getfocus(), oObjBotaoA:Setfocus(), oObjBotaoA:Getfocus(), na Minigui seria trocar os dois pontos":" por ponto"."

Se os formulários(janela dialog) tem nomes diferentes. Procurar se existe o objeto. hb_isObject()...
Não entendi a utilidade disso, o propósito.

Saudações,
Itamar M. Lins Jr.

SetFocus vs This - Formulário/Controle em foco

Enviado: 16 Set 2022 19:43
por JoséQuintas
Itamar M. Lins Jr. escreveu:Como não uso a Minigui, mas não deve ser nada de mais.
Na Hwgui é oObjNome:Handle == hwg_Getfocus(), oObjBotaoA:Setfocus(), oObjBotaoA:Getfocus(), na Minigui seria trocar os dois pontos":" por ponto"."
NÃO Itamar.
A minigui funciona bem, mas..... NÃO É CLASSE.
É GAMBIARRA com arquivos CH, #define, e o que tem no fonte NÃO fica disponível pra uso em run-time.
Minha sugestão foi justamente começar a criar classe, pra que OOP seja real.
SEM MODIFICAR MINIGUI, apenas classe pra uso do usuário.

Algo do tipo:

Código: Selecionar todos

CREATE CLASS MyControl
   METHOD SetFocus() INLINE DoMethod( ::Name, "SetFocus" )
   ENDCLASS
Assim usaria no fonte FrmX:SetFocus()
E aos poucos vai ampliando as opções, conforme for precisando, e conforme o resultado.
Já começa meio avançado, porque com herança vai reduzir a quantidade de fonte.
Exemplo de complemento ao anterior:

Código: Selecionar todos

CREATE CLASS MyForm INHERIT MyControl
Porque conforme o controle vai ser de um jeito.

Se futuramente a minigui vai virar OOP real ou não é outra história, mas pelo menos usa classes sem precisar mexer nos fontes da minigui.

OOHG já usa classes, mas acho que não tem muitos dos recursos da HMG Extended.
Quem mantém os fontes procura manter compatibilidade de sintaxe com HMG, acaba funcionando igual HMG ou igual HWGUI (com OOP).

SetFocus vs This - Formulário/Controle em foco

Enviado: 16 Set 2022 19:48
por JoséQuintas
Aliás... acredite se quiser.... cada elemento criado é uma VARIÁVEL PÚBLICA, além de um array único linguição pra tudo.

Como eu disse, funciona bem, mas o por trás das câmeras.... é coisa que a gente não concordaria.
Talvez seja mexer nos #define pra ajudar a usar variável local, talvez não.
Mas isso de fazer OOP através de #defines, deve impedir muita melhoria.

Lembrando:
Tem a HMG original, tem a HMG Extended com mais recursos, tem a OOHG orientada a objetos
Acabam chamando de minigui a todas, então confunde sobre o que cada um usa, apesar que de um modo geral acredito que seja a HMG Extended.