DATA para programador

DATA para programador

Postby FiveWiDi » Fri Jan 30, 2009 4: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 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1064
Joined: Mon Oct 10, 2005 2:38 pm

Re: DATA para programador

Postby carlos vargas » Fri Jan 30, 2009 5:07 pm

Por lo menos en xharbour existe la posibilidad de:
Agregar datas y method
ademas de modificar datas y method ya creados.
Code: Select all  Expand view
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



Code: Select all  Expand view
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)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: DATA para programador

Postby Biel EA6DD » Fri Jan 30, 2009 5: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/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: DATA para programador

Postby FiveWiDi » Fri Jan 30, 2009 9: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 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1064
Joined: Mon Oct 10, 2005 2:38 pm

Re: DATA para programador

Postby Biel EA6DD » Sat Jan 31, 2009 2: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
Code: Select all  Expand view
#include hbclass.ch
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: DATA para programador

Postby FiveWiDi » Sun Feb 01, 2009 8: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
Code: Select all  Expand view
#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 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1064
Joined: Mon Oct 10, 2005 2:38 pm

Re: DATA para programador

Postby Biel EA6DD » Sun Feb 01, 2009 9:05 pm

Carlos,
EXTEND CLASS solo esta disponible con xHarbour.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: DATA para programador

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41332
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: DATA para programador

Postby FiveWiDi » Mon Feb 02, 2009 9: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 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1064
Joined: Mon Oct 10, 2005 2:38 pm

Re: DATA para programador

Postby Carlos Mora » 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:

Code: Select all  Expand view
#translate CLASS TWindow => CLASS __TWindow


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

Code: Select all  Expand view
#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"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 9 guests