In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

BaseSocket

Foro público de Xailer en español
Responder
rafa
Mensajes: 119
Registrado: Vie Ene 16, 2009 9:59 am

BaseSocket

Mensaje por rafa »

Esta es la clase esqueleto que estoy portando de Delphi a Xailer.
Cualquier ayuda / sugerencia será bienvenida, ya que de Xailer se el 10%
y del Delphi el 5%, asi que , vamos despacio, cuando tengo un tiempo
libre, pero seguro ;-)
Si ejecutais el proyecto, podeis ver como simplemente el cambiar una
property este lanzará eventos , que era donde más estaba perdido.
Actualmente esta clase NO HACE NADA, es a efectos teoricos/practicos,
pero que será de utilidad cuando termine las funciones de sockets/etc..
Saludos
Rafa Carmona
--
rafa
Mensajes: 119
Registrado: Vie Ene 16, 2009 9:59 am

BaseSocket

Mensaje por rafa »

Por cierto, hay un bug en el debug, si poneis un break point de un
method cualquiera que contenta la variable de instancia FlActive, y
pulsais para ver el contenido de Self, casca;
**************************** Registro de errores
*****************************
Exe: C:Xailersockets_delphisockets.exe
Version: 1.0.0.0
User name: Administrador
Computer name: 9CBFA95150F64AA
Fecha: 02/11/09
Hora: 09:45:58
Memoria libre: 209148
Area actual: 1
------------------------- Información del compilador
--------------------------
Versión Xailer: Xailer 2.0.0 Version 2.0 beta
Compilador: xHarbour build 1.2.0 Intl. (SimpLex) (Rev. 623221)
PCode Version: 9
Compilador C/C++: Borland C++ 5.5.1 (32 bit)
Plataforma: Windows XP Professional 5.01.2600 Service Pack 2
----------------------- Información detallada del error
-----------------------
Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Message not found
Operación: TBASESOCKET:LACTIVE
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TBASESOCKET:LACTIVE (0)
__OBJSENDMSG (0)
DBGGETPROPERTY (119)
XA_DBGGETVAR (219)
TBASESOCKET:_LACTIVE (172)
TFORM1:RADIO1CLICK (58)
TRADIO:ONCLICK (0)
(b)XRADIO:XRADIO (47)
TRADIO:CLICK (0)
(b)XCONTROL:XCONTROL (145)
TRADIO:COMMAND (0)
TSCROLLINGWINCONTROL:WMCOMMAND (254)
TFORM1:WMCOMMAND (899)
RUNFORM (0)
TAPPLICATION:RUN (209)
MAIN (15)
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

BaseSocket

Mensaje por jfgimenez »

Rafa,
me temo que el error se debe a la forma de declarar las propiedades en la
clase. P.ej., la línea:
property lActive INIT .F. read ::FlActive write SetActive
debes dejarla como:
property lActive INIT .F. write SetActive
o mejor aún como:
property lActive INIT .F. write method SetActive
Te explico: Xailer siempre crea automáticamente la DATA interna Fxxxx con el
mismo nombre que la propiedad pero con una F delante, y esa DATA es
PROTECTED. Si no se usa la cláusula READ, Xailer crea una por defecto, que
devuelve el valor de Fxxxx. Lo mismo ocurre para la cláusula WRITE.
Al poner tú la cláusula READ como ::FlActive, se está creando un codeblock
así: {|| ::FlActive }, y al ser FlActive PROTECTED, da un error al acceder
desde fuera de la clase, en este caso desde el debugger. Sí, sé que no
debería dar este error, y lo revisaremos.
En resumen, si quitas completamente la cláusula READ, verás que ya no se
produce el error. Por cierto, el mecanismo interno por defecto de Xailer
para devolver y/o asignar los valores de una propiedad, es decir, sus
métodos READ y WRITE propios, son muchísimo más rápidos y eficientes que los
codeblocks.
Por otro lado, si a la cláusula READ o WRITE le añades METHOD, como en la
tercera línea del ejemplo, estarías indicando expresamente que se trata de
un métod, y Xailer lo resuelve al crear la clase. De la misma forma, si
utilizas READ INLINE o WRITE INLINE estarías indicando expresamente que se
trata de un codeblock. Si pones solamente READ o WRITE, Xailer tiene que
averiguar por su cuenta si es un método o un codeblock, y le cuesta un poco
más.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
rafa
Mensajes: 119
Registrado: Vie Ene 16, 2009 9:59 am

BaseSocket

Mensaje por rafa »

Jose F. Gimenez escribió:
> Rafa,
> property lActive INIT .F. write method SetActive
Muchas gracias por las explicaciones!
>
> Te explico: Xailer siempre crea automáticamente la DATA interna Fxxxx con el
> mismo nombre que la propiedad pero con una F delante, y esa DATA es
> PROTECTED. Si no se usa la cláusula READ, Xailer crea una por defecto, que
> devuelve el valor de Fxxxx. Lo mismo ocurre para la cláusula WRITE.
>
> Al poner tú la cláusula READ como ::FlActive, se está creando un codeblock
> así­: {|| ::FlActive }, y al ser FlActive PROTECTED, da un error al acceder
> desde fuera de la clase, en este caso desde el debugger. Sí­, sé que no
> deberí­a dar este error, y lo revisaremos.
>
Jejeje, ¿ ves como se te habí­a pasado algo por alto ? No te preocupes ,
que a mí­ me pasa de toooo ;-)
Por lo que entiendo, no es necesario especificar el READ/WRITE en la
property, pues implí­citamente devuelve/modifica Fxxxx, con delphi es
explí­citamente ;-)
( Dios, que lí­o mental de clases de objetos..... )
Umm. interesante, voy a cambiarlo todo otras vez.
Saludos
Rafa Carmona
Responder