FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour DATA para programador
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
DATA para programador
Posted: Fri Jan 30, 2009 04:24 PM

Antonio,

Existe en la clase TWINDOW alguna DATA que esté destinada para que el programador haga con ella lo que quiera? es decir que sea de uso exclusivo del programador?

No me gusta tener que compilar y lincar una versión de las clases junto con mis PRG. Dile manía, chorrada o como quieras, simplemente no me gusta. Así evito tener que estar atento a "que debo haber modificado" para aplicarlo a la nueva versión de FiveWin cuando llega el caso.

De ahí que te pida si es posible añadir a la clase TWINDOW una DATA destinada al uso del programador exclusivamente, por ejemplo DATA 'uDevelop' dado que el tipo de valor dependerá del uso que le de el programador.
He podio ver que la DATA 'cargo' en algunas clases es usada y por tanto podría generarse un conflicto entre el código del programador y el tuyo.

Cómo lo ves?

Saludos
Carlos G.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: DATA para programador
Posted: Fri Jan 30, 2009 05:07 PM
Por lo menos en xharbour existe la posibilidad de:
Agregar datas y method
ademas de modificar datas y method ya creados.
EXTEND CLASS TWINDOW WITH DATA lMyData
OVERRIDE METHOD NEW CLASS TWINDOW WITH MyNew

FUNCTION MyNew() CLASS TWINDOW
 LOCAL oSelf := QSelf()
 lMiData := "Esta es una prueba"
 oSelf:New()
return Self


OVERRIDE CLASS:
---------------

The OVERRIDE CLASS syntax allows the xHarbour developer to override the
behaviour of any existing class (including native type classes) using the
flowwing syntax:

   OVERRIDE METHOD <SomeMethod> [IN] CLASS <SomeClass> WITH [METHOD] <SomeFunc>
   [SCOPE <Scope>]

For sample usage please review tests\override.prg


EXTEND CLASS:
-------------

The EXTEND CLASS syntax allows the xHarbour developer to extend any existing
class (including native type classes) using the flowwing syntax:

   EXTEND CLASS <SomeClass> WITH DATA|VAR <SomeVar>
      [SCOPE <Scope>] [<Persistent: PERSISTENT> ] [<Case: NOUPPER>]
   EXTEND CLASS <SomeClass> WITH METHOD <SomeFunc>
   EXTEND CLASS <SomeClass> WITH MESSAGE <SomeMessage> METHOD <SomeFunc>
   EXTEND CLASS <SomeClass> WITH MESSAGE <SomeMessage> INLINE <SomeCode>

For sample usage please review tests\extend.prg

esto esta documentado en el xdiff.txt de xharbour

yo lo he usado para modificar el comportameinto de algunos metodos de la clase Tprint sin problemas.
en harbour no si si exista algo asi.

salu2
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: DATA para programador
Posted: Fri Jan 30, 2009 05:14 PM
En tWindow, así como en la mayoria de clases tienes el data Cargo que esta a disposicion del programador.
Como bien te apunta Carlos tambien puedes añadirle Datas nuevos (tanto en Harbour como xHarbour).

Add a DATA to an already existing class

Syntax

__objAddData( <oObject>, <cDataName> ) --> oObject

Arguments

<oObject> is the object to work on.


<cDataName> is the symbol name of the new DATA to add.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: DATA para programador
Posted: Fri Jan 30, 2009 09:31 PM
Biel EA6DD wrote:En tWindow, así como en la mayoria de clases tienes el data Cargo que esta a disposicion del programador.
Como bien te apunta Carlos tambien puedes añadirle Datas nuevos (tanto en Harbour como xHarbour).

Add a DATA to an already existing class

Syntax

__objAddData( <oObject>, <cDataName> ) --> oObject

Arguments

<oObject> is the object to work on.


<cDataName> is the symbol name of the new DATA to add.


Hola Biel y Carlos,

Es cierto dispongo de la DATA 'cargo', lo que ocurre es que esta DATA en algunas clases se está usando desde el propio FiveWin.
Por otro lado lo que deseo es disponer en la definición de la clase de una DATA, o al menos poder añadir a una clase una DATA como bien dice Carlos V.
No deseo crear una DATA una vez que ya existe el objeto, esto me obligaría a añadirla cada vez que creo el objeto.

Intentaré a ver si lo que dice Carlos V. de xHarbour es aplicable a Harbour.

DEBO añadir algún include en especial?
He probado en Harbour añadir esta línea:
EXTEND CLASS TWINDOW WITH DATA uDeveloper

y no se lo traga, no le gusta, me dice:
Error E0030 Syntax error: "syntax error at 'CLASS'"

Saludos y gracias a ambos
Carlos G.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: DATA para programador
Posted: Sat Jan 31, 2009 02:41 PM
Cierto Carlos que en algunas clases se utiliza Cargo internamente, en tWindow en concreto veo que no, pero si prefieres separarlo para tener un Data exclusivo para tu uso, lo mejor es que hagas uso de extend, o bien que heredes de la clase original, para así no tener que cambiar la clase.

El problema que tienes en la compilación, prueba a añdir
#include hbclass.ch
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: DATA para programador
Posted: Sun Feb 01, 2009 08:22 PM
Biel EA6DD wrote:Cierto Carlos que en algunas clases se utiliza Cargo internamente, en tWindow en concreto veo que no, pero si prefieres separarlo para tener un Data exclusivo para tu uso, lo mejor es que hagas uso de extend, o bien que heredes de la clase original, para así no tener que cambiar la clase.

El problema que tienes en la compilación, prueba a añdir
#include hbclass.ch


Gracias Biel,

pero no ha sido suficiente con el 'include', da el mismo resultado.

Estoy usando FiveWin 8.03 y su Harbour, no se si será por la versión que ya tiene casi 1 año.

Saludos y gracias de nuevo
Carlos G.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: DATA para programador
Posted: Sun Feb 01, 2009 09:05 PM

Carlos,
EXTEND CLASS solo esta disponible con xHarbour.

Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: DATA para programador
Posted: Sun Feb 01, 2009 10:18 PM

Carlos,

> Intentaré a ver si lo que dice Carlos V. de xHarbour es aplicable a Harbour

Que sepamos, Harbour no lo soporta.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: DATA para programador
Posted: Mon Feb 02, 2009 09:15 AM
Antonio Linares wrote:Carlos,

> Intentaré a ver si lo que dice Carlos V. de xHarbour es aplicable a Harbour

Que sepamos, Harbour no lo soporta.


Antonio y Biel,

gracias a ambos, esperaré encontrar una solución que me satisfaga.

Saludos
Carlos G.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: DATA para programador
Posted: Tue Feb 10, 2009 10:40 AM
Carlos,

hace un tiempo sugerí un método para poder modificar el comportamiento de las clases, incluyendo las originales de FW, para que sea compatible con cambios que puiesen aparecer en nuevas versiones.
Para tu caso:

1) En windows.prg, ( clase tWindow ) añadir la siguiente línea:

#translate CLASS TWindow => CLASS __TWindow


2) Creas un nuevo prg, por ejemplo MyWindow.prg con la definición de una nueva clase:

#include 'hbclass.ch'

Class TWindow From __TWindow
    <aca añades tus datas y/o métodos>
End Class


en tu proyecto tienes que añadir ambos prgs para que reemplacen la twindows original.
Esta receta es un patrón que se llama Variaciones Protegidas, y sirve para poder inyectar código en jerarquías de clases sin perder compatibilidad.
Yo lo uso con varias clases: TSBrowse, THeaders, Toolbar, etc y funciona perfecto. He actualizado de FW7.07 a FW8.12 y solo he tenido que añadir la línea del translate en las clases originales.

Por cierto... Antonio, esto podría venir "de fábrica" así, es decir que la lib viniese con la clase vacía para poder sobrecargarla sin tener que meter mano al código original.

Un saludo,

Carlos.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"

Continue the discussion