SetFocus vs This - Formulário/Controle em foco

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
carlaoonline
Usuário Nível 3
Usuário Nível 3
Mensagens: 190
Registrado em: 24 Ago 2014 22:38
Localização: Porto Alegre-RS

SetFocus vs This - Formulário/Controle em foco

Mensagem 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?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

SetFocus vs This - Formulário/Controle em foco

Mensagem 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.
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
carlaoonline
Usuário Nível 3
Usuário Nível 3
Mensagens: 190
Registrado em: 24 Ago 2014 22:38
Localização: Porto Alegre-RS

SetFocus vs This - Formulário/Controle em foco

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

SetFocus vs This - Formulário/Controle em foco

Mensagem 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.
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

SetFocus vs This - Formulário/Controle em foco

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

SetFocus vs This - Formulário/Controle em foco

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

SetFocus vs This - Formulário/Controle em foco

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