Clipper On Line • Ver Tópico - Desabilitar/Habilirar todos os Componentes de Tela

Desabilitar/Habilirar todos os Componentes de Tela

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor asimoes » 14 Mai 2020 10:19

Tem como desabilitar/habilitar todos os componentes de tela inclusive botões com uma simples chamada por aEval ?
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor JoséQuintas » 14 Mai 2020 11:08

asimoes escreveu:Tem como desabilitar/habilitar todos os componentes de tela inclusive botões com uma simples chamada por aEval ?


Não conheço hwgui, então responder com outra pergunta: tem como obter todos os controles e deixar num array?

No VB era for EACH oControl IN ME.Controls

ME = tradução mim = formulário atual = na classe Harbour é SELF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor asimoes » 14 Mai 2020 11:54

Quintas,

Eu indentifiquei nos fontes da hwgui a variável aConstrols mas não seu se essa variável contém todos os objetos de tela e como acessar a propriedade para colocar enable / disable
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor JoséQuintas » 14 Mai 2020 11:59

Veja se na criação de um controle, se é adicionado algum elemento ao "controle pai".
Se for adicionado ao form, seria pegar do form.
Se existir a indicação no controle de quem é o pai, verifique se existe uma lista geral.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor alxsts » 14 Mai 2020 12:08

Olá!

Escrevi este código há algum tempo mas depois não precisei usar. Nem compilei. Veja se funciona. Acho que com AEval() não seria uma boa...
//------------------------------------------------------------------------------------------------------------------
FUNCTION LockUnlockControls( oDlg, lOper )

   LOCAL o

   If Hb_IsObject( oDlg )
      If Hb_IsLogical( lOper )
         For Each o In oDlg:aControls
            Try
               If lOper
                  // habilitar
                  If ! o:enabled()
                     o:enable()
                  Endif
               Else
                  // desabilitar
                  If o:enabled()
                     o:disable()
                  Endif
               Endif
            Catch
               // caso algum controle não tenha os métodos enable() / disable()
            End Try
         Next
         oDlg:refresh()
      Endif
   Endif

RETURN NIL
//------------------------------------------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor Itamar M. Lins Jr. » 14 Mai 2020 12:11

Ola!
Uma função que já vi, mas não lembro o nome agora... DisableEnableALL...bla... etc
2019-02-19 11:35 UTC+0300 Alexander Kresin <alex@...>
  * source/gtk/hcwindow.prg
  * source/winapi/hcwindow.prg
    * New function hwg_GetItemByName( arr, cName ) has been added, which looks for
      an object in an array by the object's name (:objname), for example:
         oDlg := GetItemByName( HDialog():aModalDialogs, "ODLG1" )
         oFont := GetItemByName( HFont():aFonts, "OFONTBOLD" )


Não uso, não precisei desligar todos os controles de uma Window/Dialog, mas acredito que o caminho é por essas funções.
FUNCTION hwg_CreateGetList( oDlg )

   LOCAL i, j, aLen1 := Len( oDlg:aControls ), aLen2

   FOR i := 1 TO aLen1
      IF __ObjHasMsg( oDlg:aControls[i], "BSETGET" ) .AND. oDlg:aControls[i]:bSetGet != Nil
         AAdd( oDlg:GetList, oDlg:aControls[i] )
      ELSEIF !Empty( oDlg:aControls[i]:aControls )
         aLen2 := Len( oDlg:aControls[i]:aControls )
         FOR j := 1 TO aLen2
            IF __ObjHasMsg( oDlg:aControls[i]:aControls[j], "BSETGET" ) .AND. oDlg:aControls[i]:aControls[j]:bSetGet != Nil
               AAdd( oDlg:GetList, oDlg:aControls[i]:aControls[j] )
            ENDIF
         NEXT
      ENDIF
   NEXT

   RETURN Nil


   LOCAL aControls := oWnd:aControls, oItem

   FOR EACH oItem IN aControls
      IF oItem:bSize != NIL
         Eval( oItem:bSize, oItem, hwg_Loword( lParam ), hwg_Hiword( lParam ) )
      ENDIF
   NEXT


For n:=1 to len(HDialog:aControls)
   HDialog:aControls[n]:Disable()
Next


Não testei.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6959
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor asimoes » 14 Mai 2020 12:21

Itamat,

Funcionou:
For n:=1 to len(ThisForm:aControls)
   ThisForm:aControls[n]:Disable()
Next
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor asimoes » 14 Mai 2020 12:24

Fiz assim também:
   FOR EACH oElemento IN ThisForm:aControls
      IF Hb_IsObject( oElemento )
          oElemento:disable()
      ENDIF
   NEXT
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor JoséQuintas » 14 Mai 2020 12:28

Essa última dá pra transformar em AEval

AEval( HDialog:aControls, { | e | e:Disable() } )


Não resisti.... comparem com meu uso de GTWVG

   METHOD GUIEnable()     INLINE AEval( ::aGuiButtons, { | oElement | oElement[ 3 ]:Enable() } )
   METHOD GUIDisable()    INLINE AEval( ::aGuiButtons, { | oElement | oElement[ 3 ]:Disable() } )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor Itamar M. Lins Jr. » 14 Mai 2020 20:04

Ola!
O problema em ficar insistindo em tecnologias obsoletas gera um cansaço extra.
Qualquer GT do Harbour é ponto de partida. Apenas para acelerar a migração do velho Clipper(DOS) para um meio termo que são as GT's.
Até a Hwgui, progride muito lentamente, não tem a quantidade de usuários para fazer progredir mais rápido.
Muitos que chegaram na Hwgui, o que fizeram foi travar a Hwgui, criando mais um fork, mais um xDesigner, mais um não sei o quê, no final de 5,6 anos não tem mais nada.
Imagine qualquer GT do Harbour com meia dúzia de usuários.
Estou vendo o Lazarus, o progresso que fez todo esse tempo, quantas pessoas estão usando, etc.. Só na parte de conexão com DB, já tem uma infinidade, relatórios etc... tudo ok com milhões de usuários e exemplos pra tudo que é controle que está na RAD(IDE).
Captura de tela de 2020-05-14 19-57-18.png

Até o Linux, o Ubuntu está melhor que o Windows 10 em muita coisa. O PrintScreen por exemplo que tirei, já gravou na pasta \Download\... Um arquivo com o nome "Captura de tela de 2020-05-14 19-57-18.png"
Vamos dizer que com essas ferramentas 70% do que precisamos basta saber qual controle o resto são as linhas de códigos que digitamos.
No Harbour ainda é 70% de códigos que temos que digitar e 30% é que está pronto.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6959
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor JoséQuintas » 14 Mai 2020 20:56

Itamar M. Lins Jr. escreveu:O problema em ficar insistindo em tecnologias obsoletas gera um cansaço extra.


Sei lá o que significa isso.
Na prática, nem lembro mais como mexer em GTWVG.
A única coisa que comentei foi de fazer funcionar os controles extras no 3.2.
E, tirar proveito do que existe, coisa que ninguém faz, nem mesmo das libs gráficas oficiais que fazem parte do Harbour. (core, não contribuição)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Desabilitar/Habilirar todos os Componentes de Tela

Mensagempor rossine » 18 Mai 2020 14:47

Olá,

Eu uso a Qt5Xhb, e optei em todas as telas, ter um objeto GroupBox abrangendo toda tela e coloco todos os objetos dentro destes GroupBox, e quando quero desabilitar todos os objetos, desabilito somente o GroupBox e pronto.

Talvez na HWGui isto também funcione.
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
rossine
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 313
Data de registro: 06 Ago 2007 09:57
Cidade/Estado: Divinópolis-MG
Curtiu: 1 vez
Mens.Curtidas: 21 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro