Page 1 of 1

como se hace en Harbour?

PostPosted: Fri Jul 08, 2016 10:11 pm
by Ariel
Hola,
esto lo hago en xharbour y me funciona ok, pero al quere pasarlo a harbour me da error :
Code: Select all  Expand view

Function ModifyClass()

OVERRIDE METHOD KeyDown IN CLASS TXBrowse WITH METHOD xBrwKeyDown

EXTEND CLASS TXBrowse WITH DATA bMyKeyDown

Return NIL

//----------------------------------------------------------------------------------------------------------------------------------------------------//

Function xBrwKeyDown( nKey, nFlags )
....
return
 


Gracias.

Re: como se hace en Harbour?

PostPosted: Sat Jul 09, 2016 6:57 am
by Antonio Linares
Ariel,

Prueba a cambiar esta línea:

OVERRIDE METHOD KeyDown IN CLASS TXBrowse WITH METHOD xBrwKeyDown

así

EXTEND CLASS TXBrowse WITH MESSAGE xBrwKeyDown INLINE ...tu código...

Re: como se hace en Harbour?

PostPosted: Sun Jul 10, 2016 11:53 am
by Ariel
Antonio,
gracias x responder, he puesto:

EXTEND CLASS TXBrowse WITH MESSAGE xBrwKeyDown IN LINE bMyKeyDown

y al compilar me dice:

Syntax Error "sintax error at 'CLASS'"

Saludos

Re: como se hace en Harbour?

PostPosted: Tue Jul 12, 2016 3:46 pm
by Antonio Linares
Prueba asi a ver si te compila bien:

EXTEND CLASS TXBrowse WITH MESSAGE xBrwKeyDown IN LINE MsgInfo( "ok" )

Re: como se hace en Harbour?

PostPosted: Tue Jul 12, 2016 4:24 pm
by carlos vargas
lo unico que habria que hacer es inlcuir el fichero cabezera y la libreria siguientes:

en los fuentes donde incluyas estas extenciones al lenguaje, haz:

Code: Select all  Expand view
#include "xhb.ch"


o mejor aun

Code: Select all  Expand view
#include "xhbcls.ch"


y el proceso de elnazado incluye la lib:

xhb.lib


no se si en los build de harbour de fivetech estan incluido, por lo que tocaria revisar.

esto por que estas extenciones estan el la carpeta contrib de harbour, y no son parte del nucleo de harbour.

https://github.com/harbour/core/blob/master/contrib/xhb/xhb.ch
https://github.com/harbour/core/blob/master/contrib/xhb/xhbcls.ch
salu2
carlos vargas

Re: como se hace en Harbour?

PostPosted: Thu Jul 14, 2016 6:38 am
by Biel EA6DD
La solución que te aporta Carlos te funcionará correctamente.

También puedes hacerlo directamente con el uso de las funciones,

__objModMethod( <oObject>, <cMethodName>, <nFuncPtr> ) //<nFunCprt> se debe pasar por referencia
__objAddData( <oObject>, <cDataName> )

Re: como se hace en Harbour? (SOLUCIONADO)

PostPosted: Thu Jul 14, 2016 11:18 pm
by Ariel
Bueno, gracias a todos x la ayuda lo pude resolver de este modo :

1) incluir "xhbcls.ch"
2) yo tenia esto en xhrb :
Code: Select all  Expand view

OVERRIDE METHOD KeyDown IN CLASS TXBrowse WITH METHOD xBrwKeyDown
 

y ahora para harbour hice :
Code: Select all  Expand view

OVERRIDE METHOD KeyDown IN CLASS TXBrowse WITH xBrwKeyDown
 


De esta forma puedo sobreescribir el metodo del xbrowse sin tocar la clase.
Saludos.

Re: como se hace en Harbour?

PostPosted: Tue Dec 19, 2017 11:48 pm
by Xevi
Ariel,

el fichero "xhbcls.ch", donde lo encuentro???

Para mi caso, modificar el método KeyDown de la clase TEDIT...

Code: Select all  Expand view

#include "xhbcls.ch"
OVERRIDE METHOD KeyDown IN CLASS TEdit WITH xEditKeyDown

FUNCTION xEditKeyDown( nKey, nFlags )

   IF nKey == VK_UP
      ::oWnd:GoPrevCtrl( ::hWnd )
      return 0    // We don't want API default behavior

   ELSEIF nKey == VK_RETURN .or. nKey == VK_DOWN
      ::oWnd:GoNextCtrl( ::hWnd )
      return 0    // We don't want API default behavior
   ENDIF

return ::Super:KeyDown( nKey, nFlags )
 


Seria así???

al compilar me da errores
sintax error 'METHOD' y que no encuentra la variable self,

Es por falta del fichero "xhbcls.ch" ???

Gracias.

Re: como se hace en Harbour?

PostPosted: Wed Dec 20, 2017 12:26 am
by cnavarro
Code: Select all  Expand view

Function KeyDown( nKey, nFlags )

   local Self := HB_QSelf()

.../...

 

Re: como se hace en Harbour?

PostPosted: Wed Dec 20, 2017 9:25 am
by Xevi
Con OVERRIDE

Code: Select all  Expand view

#include "FiveWin.ch"
#include "D:\XeviFWproves\include\xhbcls.ch"

//...
OVERRIDE METHOD KeyDown IN CLASS TEdit WITH xEditKeyDown
//...

FUNCTION xEditKeyDown( nKey, nFlags )
   Local Self := HB_QSelf()

   FWLOG ValType( Self ), ::ClassName()

   IF nKey == VK_UP
      ::oWnd:GoPrevCtrl( ::hWnd )
      return 0    // We don't want API default behavior

   ELSEIF nKey == VK_RETURN .or. nKey == VK_DOWN
      ::oWnd:GoNextCtrl( ::hWnd )
      return 0    // We don't want API default behavior
   ENDIF

return ::Super:KeyDown( nKey, nFlags )
 


Con EXTEND CLASS
Code: Select all  Expand view

#include "FiveWin.ch"
#include "D:\XeviFWproves\include\xhbcls.ch"

//...
EXTEND CLASS TEdit WITH METHOD KeyDown
//...

FUNCTION KeyDown( nKey, nFlags )
   Local Self := HB_QSelf()

   FWLOG ValType( Self ), ::ClassName()

   IF nKey == VK_UP
      ::oWnd:GoPrevCtrl( ::hWnd )
      return 0    // We don't want API default behavior

   ELSEIF nKey == VK_RETURN .or. nKey == VK_DOWN
      ::oWnd:GoNextCtrl( ::hWnd )
      return 0    // We don't want API default behavior
   ENDIF

return ::Super:KeyDown( nKey, nFlags )
 

Re: como se hace en Harbour?

PostPosted: Wed Dec 20, 2017 9:54 am
by Xevi
Además... UIiiii lo que he visto!!!

EXTEND CLASS TEdit WITH DATA cMiData

Me puedo permitir el "lujo" de crear/sobrecargar de DATAs a una Clase.
Por ejemplo crearme una clase TAppData, e ir creando datas que voy a utilizar en la aplicación, ya que estoy acostumbrado de esta manera... o eso sobrecarga la aplicación si utilizo una sola clase con por.ej. 20 o 50 datas???
Mejor utilizar funciones para no sobrecargar la aplicación???

No se, pensando en datos que estan guardados en un fichero, no estar abriendo/cerrando el fichero cada vez que voy a consultar un campo que lo voy a estar utilizando en cualquier parte de la aplicación, guardo esa data (vaya, como si estuviera utilizando una variable pública)...

Y... para entorno de MariaDB, abro una conexión, la guardo en una data de la clase AppData, y ya la tengo accesible en toda la aplicación, hasta que no la cierre.


No se, ¿cómo lo veis?
Dadme opniniones, necesito escuchar!!!

Re: como se hace en Harbour?

PostPosted: Wed Dec 20, 2017 11:14 am
by Antonio Linares
El límite es tu propia imaginación :-)

La belleza de Harbour es su enorme grado de libertad ;-)