como se hace en Harbour?

Post Reply
Ariel
Posts: 378
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

como se hace en Harbour?

Post 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


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.
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: como se hace en Harbour?

Post 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...
regards, saludos

Antonio Linares
www.fivetechsoft.com
Ariel
Posts: 378
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: como se hace en Harbour?

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: como se hace en Harbour?

Post by Antonio Linares »

Prueba asi a ver si te compila bien:

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

Antonio Linares
www.fivetechsoft.com
User avatar
carlos vargas
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: como se hace en Harbour?

Post 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

#include "xhb.ch"


o mejor aun

Code: Select all | Expand

#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
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
Biel EA6DD
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Re: como se hace en Harbour?

Post 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> )
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Ariel
Posts: 378
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: como se hace en Harbour? (SOLUCIONADO)

Post 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


OVERRIDE METHOD KeyDown IN CLASS TXBrowse WITH METHOD xBrwKeyDown
 

y ahora para harbour hice :

Code: Select all | Expand


OVERRIDE METHOD KeyDown IN CLASS TXBrowse WITH xBrwKeyDown
 


De esta forma puedo sobreescribir el metodo del xbrowse sin tocar la clase.
Saludos.
User avatar
Xevi
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: como se hace en Harbour?

Post 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


#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.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: como se hace en Harbour?

Post by cnavarro »

Code: Select all | Expand


Function KeyDown( nKey, nFlags )

   local Self := HB_QSelf()

.../...

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
Xevi
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: como se hace en Harbour?

Post by Xevi »

Con OVERRIDE

Code: Select all | Expand


#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


#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 )
 
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Xevi
Posts: 174
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: como se hace en Harbour?

Post 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!!!
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: como se hace en Harbour?

Post by Antonio Linares »

El límite es tu propia imaginación :-)

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

Antonio Linares
www.fivetechsoft.com
Post Reply