Página 1 de 1

HMG Extended OOP

Enviado: 01 Out 2025 02:09
por JoséQuintas
Fiz só um "rascunho" de como poderia usar OOP em HMG Extended, postei lá no fórum da HMG Extended.

Um exemplo usando o que criei

Código: Selecionar todos

#include "i_var.ch"

*-----------------------------------------------------------------------------*
FUNCTION OBJ_HMG_GetFormControls( cFormName, aUserType )
*-----------------------------------------------------------------------------*
   LOCAL aRetVal := {}
   LOCAL oForm, oControl

  aUserType := iif( aUserType == Nil, "ALL", aUserType )
   IF hb_ISCHAR( aUserType )
      aUserType := { aUserType }
   ENDIF

   oForm := FormByName( cFormName )
   IF oForm == Nil
      RETURN {}
   ENDIF

   FOR EACH oControl IN oHmgApp():AllControls()

      IF oControl:ControlParentHandle == oForm:FormHandle  ;
         .AND. ( aUserType[1] == "ALL" .OR. hb_AScan( aUserType, oControl:ControlType ) != 0 )

         IF hb_ISNUMERIC( oControl:ControlHandle )
            AddIfUnique( aRetVal, oControl:ControlName )

         ELSEIF hb_ISARRAY( oControl:ControlHandle )
            AEval( oControl:ControlHandles, { | e | ;
               AddIfUnique( aRetVal, ControlByIndex( e ):ControlName ) } )
         ENDIF

      ENDIF
   NEXT

RETURN ASort( aRetVal )


STATIC FUNCTION AddIfUnique( aList, cName )

   IF ! Empty( cName ) .AND. AScan( aList, cName, , , .T. ) == 0
      AAdd( aList, cName )
   ENDIF

RETURN Nil
E mais outros:

Código: Selecionar todos

FUNCTION AllFormNames()

   LOCAL aList := {}, oForm

   FOR EACH oForm IN ohmgApp():AllForms()
      AAdd( aList, oForm:FormName )
   NEXT

   RETURN aList

FUNCTION AllControlNames()

   LOCAL aList := {}, oControl

   FOR EACH oControl IN oHmgApp():AllControls()
      AAdd( aList, oControl:ControlName )
   NEXT

   RETURN aList
O conjunto completo em anexo.
É parcial, apenas pro teste em questão.
Passei a idéia pro Grigory pra ver se ele acha interessante.
É no mesmo estilo que alterei a HMG3, que dá pra usar OOP sem mexer na parte interna atual, e só mudar tudo pra classe no término.
Tanto é, que o exemplo funciona com HMG Extended atual.

O HBP é pra minha HMG Extended modificada, precisa ajustar pros nomes das libs oficiais.