HMG Extended OOP

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

HMG Extended OOP

Mensagem 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.
Anexos
testobj.zip
(3.82 KiB) Baixado 150 vezes
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/
Responder