Ejemplo Sobrecarga en clase TDbNavigator
Publicado: Vie Ene 30, 2009 1:22 pm
Estoy feliz y dichoso probando la sobrecarga de clases. Con esta
funcionalidad Xailer es realmente, muy potente.
En concreto, para quiero añadir al dbnavigator dos botones de "impresión" y
"búsqueda". Solo me falta un pequeño detalle, que es añadir la imagen LUPA
al botón desde los recursos de mi proyecto, pues no me lo reconoce.
Por lo demás, ahí os dejo el ejemplo.
Saludos
Karl
//---------------------------------------------------------- --------------------
CLASS TDBNavigator FROM XDBNavigator
PUBLISHED:
PROPERTY lBtnPrint INIT .T. WRITE INLINE ::FlBtnPrint := Value,
::aItems[ 11 ]:lVisible := Value, ::Adjust()
PROPERTY lBtnLupa INIT .T. WRITE INLINE ::FlBtnLupa := Value,
::aItems[ 12 ]:lVisible := Value, ::Adjust()
EVENT OnClickPrint( oSender ) // --> Nil | lResult
EVENT OnClickBusca( oSender ) // --> Nil | lResult
METHOD Command( nNotifyCode, nId )
PUBLIC:
CONSTRUCTOR New( oParent )
ENDCLASS
//---------------------------------------------------------- ----------------
METHOD New( oParent ) CLASS TDBNavigator
Super:New( oParent )
ASize( ::aTooltips, 12 )
::AddImages( { "XA_BMP_PRINTER" } )
::AddImages( { "LUPA" } )
::AddItem( "", 11, ::aToolTips[ 11 ],,,,, ::FlBtnPrint )
::AddItem( "", 12, ::aToolTips[ 12 ],,,,, ::FlBtnLupa )
RETURN Self
METHOD Command( nNotifyCode, nId ) CLASS TDBNavigator
LOCAL lOk
IF nNotifyCode == BN_CLICKED .AND. ! Empty( ::oDataSet ) .AND.
::oDataSet:lOpen
nId -= TB_ID_FIRST
IF nId == 1
IF ( lOk := ::OnClickFirst() ) == Nil .OR. lOk
::oDataSet:GoTop()
ENDIF
ELSEIF nId == 2
IF ( lOk := ::OnClickPrevious() ) == Nil .OR. lOk
::oDataSet:nSkip( -1 )
ENDIF
ELSEIF nId == 3
IF ( lOk := ::OnClickNext() ) == Nil .OR. lOk
::oDataSet:nSkip()
ENDIF
ELSEIF nId == 4
IF ( lOk := ::OnClickLast() ) == Nil .OR. lOk
::oDataSet:GoBottom()
ENDIF
ELSEIF nId == 5
IF ( lOk := ::OnClickInsert() ) == Nil .OR. lOk
::oDataSet:AddNew()
ENDIF
ELSEIF nId == 6
IF ( lOk := ::OnClickDelete() ) == Nil .OR. lOk
::oDataSet:Delete()
ENDIF
ELSEIF nId == 7
IF ( lOk := ::OnClickEdit() ) == Nil .OR. lOk
::oDataSet:Edit()
ENDIF
ELSEIF nId == 8
IF ( lOk := ::OnClickUpdate() ) == Nil .OR. lOk
::oDataSet:Update()
ENDIF
ELSEIF nId == 9
IF ( lOk := ::OnClickCancel() ) == Nil .OR. lOk
::oDataSet:Cancel()
::oDataSet:Skip( 0 )
ENDIF
ELSEIF nId == 10
IF ( lOk := ::OnClickRefresh() ) == Nil .OR. lOk
::oDataSet:RefreshCurrent()
ENDIF
ELSEIF nId == 11
//Aquí se produce el evento de impresión
::OnClickPrint()
ELSEIF nId == 12
//Aquí se produce el evento de búsqueda
::OnClickBusca()
ENDIF
RETURN 0
ENDIF
RETURN Nil
//---------------------------------------------------------- --------------------
EN EL FORMINITIALIZE DE MI FORMULARIO CREO LOS EVENTOS
::oDBNavigator1:OnClickPrint:={|| msginfo("Imprime en formulario"),.T.}
::oDBNavigator1:OnClickBusca:={|| msginfo("Busca en formulario"),.T.}
Y CHACHI!
funcionalidad Xailer es realmente, muy potente.
En concreto, para quiero añadir al dbnavigator dos botones de "impresión" y
"búsqueda". Solo me falta un pequeño detalle, que es añadir la imagen LUPA
al botón desde los recursos de mi proyecto, pues no me lo reconoce.
Por lo demás, ahí os dejo el ejemplo.
Saludos
Karl
//---------------------------------------------------------- --------------------
CLASS TDBNavigator FROM XDBNavigator
PUBLISHED:
PROPERTY lBtnPrint INIT .T. WRITE INLINE ::FlBtnPrint := Value,
::aItems[ 11 ]:lVisible := Value, ::Adjust()
PROPERTY lBtnLupa INIT .T. WRITE INLINE ::FlBtnLupa := Value,
::aItems[ 12 ]:lVisible := Value, ::Adjust()
EVENT OnClickPrint( oSender ) // --> Nil | lResult
EVENT OnClickBusca( oSender ) // --> Nil | lResult
METHOD Command( nNotifyCode, nId )
PUBLIC:
CONSTRUCTOR New( oParent )
ENDCLASS
//---------------------------------------------------------- ----------------
METHOD New( oParent ) CLASS TDBNavigator
Super:New( oParent )
ASize( ::aTooltips, 12 )
::AddImages( { "XA_BMP_PRINTER" } )
::AddImages( { "LUPA" } )
::AddItem( "", 11, ::aToolTips[ 11 ],,,,, ::FlBtnPrint )
::AddItem( "", 12, ::aToolTips[ 12 ],,,,, ::FlBtnLupa )
RETURN Self
METHOD Command( nNotifyCode, nId ) CLASS TDBNavigator
LOCAL lOk
IF nNotifyCode == BN_CLICKED .AND. ! Empty( ::oDataSet ) .AND.
::oDataSet:lOpen
nId -= TB_ID_FIRST
IF nId == 1
IF ( lOk := ::OnClickFirst() ) == Nil .OR. lOk
::oDataSet:GoTop()
ENDIF
ELSEIF nId == 2
IF ( lOk := ::OnClickPrevious() ) == Nil .OR. lOk
::oDataSet:nSkip( -1 )
ENDIF
ELSEIF nId == 3
IF ( lOk := ::OnClickNext() ) == Nil .OR. lOk
::oDataSet:nSkip()
ENDIF
ELSEIF nId == 4
IF ( lOk := ::OnClickLast() ) == Nil .OR. lOk
::oDataSet:GoBottom()
ENDIF
ELSEIF nId == 5
IF ( lOk := ::OnClickInsert() ) == Nil .OR. lOk
::oDataSet:AddNew()
ENDIF
ELSEIF nId == 6
IF ( lOk := ::OnClickDelete() ) == Nil .OR. lOk
::oDataSet:Delete()
ENDIF
ELSEIF nId == 7
IF ( lOk := ::OnClickEdit() ) == Nil .OR. lOk
::oDataSet:Edit()
ENDIF
ELSEIF nId == 8
IF ( lOk := ::OnClickUpdate() ) == Nil .OR. lOk
::oDataSet:Update()
ENDIF
ELSEIF nId == 9
IF ( lOk := ::OnClickCancel() ) == Nil .OR. lOk
::oDataSet:Cancel()
::oDataSet:Skip( 0 )
ENDIF
ELSEIF nId == 10
IF ( lOk := ::OnClickRefresh() ) == Nil .OR. lOk
::oDataSet:RefreshCurrent()
ENDIF
ELSEIF nId == 11
//Aquí se produce el evento de impresión
::OnClickPrint()
ELSEIF nId == 12
//Aquí se produce el evento de búsqueda
::OnClickBusca()
ENDIF
RETURN 0
ENDIF
RETURN Nil
//---------------------------------------------------------- --------------------
EN EL FORMINITIALIZE DE MI FORMULARIO CREO LOS EVENTOS
::oDBNavigator1:OnClickPrint:={|| msginfo("Imprime en formulario"),.T.}
::oDBNavigator1:OnClickBusca:={|| msginfo("Busca en formulario"),.T.}
Y CHACHI!