Desabilitar/Habilirar todos os Componentes de Tela

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por asimoes »

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

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por JoséQuintas »

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 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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por asimoes »

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

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por JoséQuintas »

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 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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por alxsts »

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

Código: Selecionar todos

//------------------------------------------------------------------------------------------------------------------
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)
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

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por Itamar M. Lins Jr. »

Ola!
Uma função que já vi, mas não lembro o nome agora... DisableEnableALL...bla... etc

Código: Selecionar todos

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.

Código: Selecionar todos

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

Código: Selecionar todos

   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

Código: Selecionar todos

For n:=1 to len(HDialog:aControls)
   HDialog:aControls[n]:Disable()
Next
Não testei.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por asimoes »

Itamat,

Funcionou:

Código: Selecionar todos

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por asimoes »

Fiz assim também:

Código: Selecionar todos

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

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por JoséQuintas »

Essa última dá pra transformar em AEval

Código: Selecionar todos

AEval( HDialog:aControls, { | e | e:Disable() } )
Não resisti.... comparem com meu uso de GTWVG

Código: Selecionar todos

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

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por Itamar M. Lins Jr. »

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

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por JoséQuintas »

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 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/
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Desabilitar/Habilirar todos os Componentes de Tela

Mensagem por rossine »

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