Página 1 de 1

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 10:19
por asimoes
Tem como desabilitar/habilitar todos os componentes de tela inclusive botões com uma simples chamada por aEval ?

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 11:08
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

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 11:54
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

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 11:59
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.

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 12:08
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
//------------------------------------------------------------------------------------------------------------------

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 12:11
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.

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 12:21
por asimoes
Itamat,

Funcionou:

Código: Selecionar todos

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

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 12:24
por asimoes
Fiz assim também:

Código: Selecionar todos

   FOR EACH oElemento IN ThisForm:aControls
      IF Hb_IsObject( oElemento )
          oElemento:disable()
      ENDIF
   NEXT

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 12:28
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() } )

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 20:04
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.

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 14 Mai 2020 20:56
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)

Desabilitar/Habilirar todos os Componentes de Tela

Enviado: 18 Mai 2020 14:47
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.