como se hace en Harbour?

Post Reply
Ariel
Posts: 309
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

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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
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: 309
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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
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: 1421
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

#include "xhb.ch"
o mejor aun

Code: Select all

#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/ma ... xhb/xhb.ch
https://github.com/harbour/core/blob/ma ... /xhbcls.ch
salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
Biel EA6DD
Posts: 680
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: 309
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

OVERRIDE METHOD KeyDown IN CLASS TXBrowse WITH METHOD xBrwKeyDown
 
y ahora para harbour hice :

Code: Select all

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: 168
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

#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: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: como se hace en Harbour?

Post by cnavarro »

Code: Select all

Function KeyDown( nKey, nFlags )

   local Self := HB_QSelf()

.../...

 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: como se hace en Harbour?

Post by Xevi »

Con OVERRIDE

Code: Select all

#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

#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: 168
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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
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