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