Página 1 de 1

¿Quantos controles tem uma janela?

Enviado: 19 Jun 2011 23:44
por Adalberto
Amigos e amigas do foro, boa noite

Agora meu pedido de ajuda a vocês e por o seguinte:

Como saber quantos controles tem em uma janela e daí dar o foco para ao primeiro logo ao segundo e assim.

Aguardo sua atenciosa resposta.

Graças a todos e todas!

¿Quantos controles tem uma janela?

Enviado: 21 Jun 2011 10:23
por MARCELOG
OLá companheiro,
montei essa procedure para apagar os controles.
Talvez lhe sirva.

Código: Selecionar todos

PROCEDURE LIMPATELA()

LOCAL aControle, i, c 

aControle := _GetArrayOfAllControlsForForm('SPLIT2')

IF !EMPTY(aControle)

   FOR i := 1 TO LEN(aControle)

       c := aControle[i]

       IF c == 'OTBR'

          OTBR:DESTROY()

       ELSEIF c == 'OTBR1'

          OTBR1:DESTROY()

       ELSE

          DOMETHOD('SPLIT2',c,'RELEASE')

          // RELEASE CONTROL &c OF SPLIT2

       ENDIF

   NEXT i

ENDIF

INVALIDATERECT(GETFORMHANDLE('SPLIT2'),0)

RETURN

//============================================================================

Function _GetArrayOfAllControlsForForm ( cFormName )

Local nFormHandle, nControlCount, i, aRetVal := {}, x

nFormHandle := GetFormHandle (cFormName)

nControlCount := Len(_HMG_aControlHandles)

For i := 1 To nControlCount

    If _HMG_aControlParentHandles[i] == nFormHandle
       If ValType(_HMG_aControlHandles[i]) == 'N'
          IF ! Empty(_HMG_aControlNames[i])
             If Ascan(aRetVal,_HMG_aControlNames[i]) == 0
                Aadd(aRetVal, _HMG_aControlNames[i])
             EndIf
          ENDIF
       ElseIf ValType(_HMG_aControlHandles [i]) == 'A'
          For x := 1 To Len (_HMG_aControlHandles[i])
             IF !Empty(_HMG_aControlNames[i])
                If Ascan(aRetVal,_HMG_aControlNames[i]) == 0
                   Aadd(aRetVal,_HMG_aControlNames [i])
                EndIf
             ENDIF
          Next x
       EndIf
    EndIf

Next i

Return aRetVal

¿Quantos controles tem uma janela?

Enviado: 21 Jun 2011 23:16
por Adalberto
Ola Marcelo,
Testei tua função e funciono certinho mesmo, se eu tenho 3 controles a função da o nomes das três mais DummyMenuName1 e DummyMenuName2, que e isso?
No foro MiniGui Brasil compartilharam outra função, o resultado e o mesmo, com os Dummy citados, quer ver?

Código: Selecionar todos

//
FUNCTION ControlesdeFormulario( cFormName , lMostrar )
//
LOCAL acControles, nParentHandle, nLen, nControl, cTempStr, cControl
//
lMostrar       := IF(VALTYPE(lMostrar)  <> "L" , .F., lMostrar)
cFormName      := IF(VALTYPE(cFormName) <> "C" , ThisWindow.Name, cFormName)
nParentHandle  := GetFormHandle(cFormName)
nLen        := LEN(_HMG_aControlParenthandles)
cTempStr    := ""
acControles := {}
FOR nControl := 1 TO nLen
   IF _HMG_aControlParenthandles[nControl] == nParentHandle
      cControl := _HMG_aControlNames[nControl]
      IF !EMPTY(ALLTRIM(cControl))
         AADD(acControles, cControl)
         cTempStr += cControl + CRLF
      ENDI
   ENDI
NEXT nControl
IF lMostrar
   MSGBOX(cTempStr, PADR(cFormName, 50))
ENDIF
Marcelo, muito obrigado, de verdade.

Adalberto