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.

Modificar clase

Foro público de Xailer en español
Responder
Quique
Mensajes: 16
Registrado: Lun Abr 27, 2009 9:05 pm

Modificar clase

Mensaje por Quique »

Tengo esto código en mi programa

class TOptionItem from XOptionItem
msgInfo( "TOptionItem" )
data lClicked init .t.
method click()
endclass
method click class TOptionItem
msgInfo( "oK" )
return nil

pero nunca aparece ninguno de los mensaje, y siempre ejecuta lo que dice el evento OnClick cuando, según yo, no deberí­a hacerlo ¿que tengo que hacer para que me funciones?
rafa
Mensajes: 119
Registrado: Vie Ene 16, 2009 9:59 am

Modificar clase

Mensaje por rafa »

El 06/03/2014 15:45, Quique escribió:> Tengo esto código en mi programa
>
>
> class TOptionItem from XOptionItem
> msgInfo( "TOptionItem" )
> data lClicked init .t.
> method click()
> endclass
>
> method click class TOptionItem
> msgInfo( "oK" )
> return nil
>
>
> pero nunca aparece ninguno de los mensaje, y siempre ejecuta
> lo que dice el evento OnClick cuando, según yo, no deberí­a
> hacerlo ¿que tengo que hacer para que me funciones?
Creo que te hicistes un lio ;-)
A no ser que Xailer lo permite, lo dudo, no puedes meter código en la
definicion de la clase.
Es más. ¿ Como estás llamando a esta clase ? Simple curiosidad.
El arreglo;
class TOptionItem from XOptionItem
data lClicked init .t.
method click()
endclass
method new() class TOoptionItem
msgInfo( "TOptionItem" )
return Self
method click() class TOptionItem
msgInfo( "oK" )
return nil
Pero una clase por si sola, no hace, nada. Asi que tienes que instanciarla;
o := TOptionItem():New()
o:Click()
Saludos
rafa
Mensajes: 119
Registrado: Vie Ene 16, 2009 9:59 am

Modificar clase

Mensaje por rafa »

Sorry , me olvide del New
class TOptionItem from XOptionItem
data lClicked init .t.
method New()
method click()
endclass
Saludos
Quique
Mensajes: 16
Registrado: Lun Abr 27, 2009 9:05 pm

Modificar clase

Mensaje por Quique »

Hola Rafa, gracias por responder, te comento
¿donde hago el llamado a la clase? muy simple en el diseño de la ventana, en el archivo menuPrincipal.xfm creado al diseñar la ventana se crea un código algo como este

WITH OBJECT ::Opciones := TOptionList():New( ::oExplorerBar1 )
:SetBounds( 11, 36, 178, 302 )
:nHotStyle := hsMENUXP
:nItemHeight := 38
WITH OBJECT :oImageList
:nWidth := 32
:nHeight := 32
:Add( "consulta" )
:Add( "remesas" )
:Add( "Dictamen" )
:Add( "ActPend" )
:Add( "SegundaVisita" )
:Add( "LeerOtros" )
:Add( "Citas" )
:Add( "MySql" )
:Add( "BitacoraTel" )
END
WITH OBJECT :AddItem( " Leer archivos excel", 1 )
:OnClick := "OpcionesItem1Click"
END
WITH OBJECT :AddItem( "Histórico de Remesas", 2 )
:OnClick := "OpcionesItem2Click"
END

TOptionList() no tiene método addItem(), pero hereda de XOptionList, donde en el método addItem dice

METHOD AddItem( cText, nImage, nType, lMultiline, lEnabled, lChecked, lCollapsable, lExpanded, nChildIndent, nImageDisabled ) CLASS XOptionList
RETURN TOptionItem():Create( Self, -1, cText, nImage, nType, lMultiline, lEnabled, lChecked, lCollapsable, lExpanded, nChildIndent, nImageDisabled )

ahi es donde hago el llamado a TOptionItem().
Ahora, en xailer la clase TOptionItem está definida asi

CLASS TOptionItem FROM XOptionItem
ENDCLASS

La definición que hice hace lo mismo, toma toda la herencia de XOptionItem con excepción de que agregue una variable de instancia y modifique el método click, en este caso no deberí­a realizar la accion, solo mostrar un mensaje, y no lo hace, ignora la definición de mi clase y toma la de xailer, porque ni siquiera entra a mi clase al momento de crear la instancia, no muestra el mensaje que puse en la definción, el cual deberí­a aparecer la primera vez que se hace referencia a la clase.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5707
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Modificar clase

Mensaje por jfgimenez »

Quique,
> ignora la definición de mi clase y toma la de
> xailer, porque ni siquiera entra a mi clase al momento de
> crear la instancia, no muestra el mensaje que puse en la
> definción, el cual deberí­a aparecer la primera vez que se
> hace referencia a la clase.
Me temo que es un "efecto colateral" del enlazador de MinGW. Para
solucionarlo, basta con poner un REQUEST TOptionItem en algún punto de
tu programa.
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
Quique
Mensajes: 16
Registrado: Lun Abr 27, 2009 9:05 pm

Modificar clase

Mensaje por Quique »

No funcionó, agregue REQUEST TOptionItem en uno de los prg y sigue ignorandola.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5707
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Modificar clase

Mensaje por jfgimenez »

Quique,
> No funcionó, agregue REQUEST TOptionItem en uno de los prg
> y sigue ignorandola.
Asegúrate de que pones el REQUEST en algún prg del proyecto del
ejecutable. Que no esté en ninguna librerí­a, sino en el ejecutable
principal.
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
Quique
Mensajes: 16
Registrado: Lun Abr 27, 2009 9:05 pm

Modificar clase

Mensaje por Quique »

Si puse el REQUEST en uno de los fuentes del proyecto, inclusive en uno de las opciones mas usadas.
La definición de la clase tambien esta incluida en un fuente del proyecto, este fuente casi no se utiliza, pero si se carga, el fuente define dos clases, una que si funciona correctamente y la del problema. Este es el fuente, actualmente está definida en la parte inferior, se que no tiene nada que ver, pero también ya lo intenté poniendola al principio, solo debajo de #include:

#include "Xailer.ch"
class qSQLQuery from XSQLQuery
ERROR HANDLER onError()
endClass
METHOD onError( uParam ) CLASS qSQLQuery
local cField := __GetMessage()
DO CASE
// Revisa si existe la variable
CASE XA_WLSearch( ::hFieldsList, cField ) <> 0
return __objSendMsg( ::super, cField, uParam )
// Revisa si quita el prefico DC
CASE aScan( { "DCCOLONIA", "DCCP", "DCESTADO", "DCNOMBRE", "DCTELEFONO" }, { | x | x == cField } ) > 0
return __objSendMsg( ::super, subStr( cField, 3 ), uParam )
CASE cField == "DCCALLEYNUM"
return __objSendMsg( ::super, "CALLE", uParam )
CASE cField == "DCDELYMPIO"
return __objSendMsg( ::super, "DELEG", uParam )
CASE cField == "NOMSUCURSAL"
IF XA_WLSearch( ::hFieldsList, "SUCURSALSOLI" ) <> 0
return __objSendMsg( ::super, "SUCURSALSOLI", uParam )
ENDIF
// Revisa si es un campo que debe marcar error o devolver vací­o
CASE aScan( { "NUMSUCURSAL" }, { | x | x == cField } ) == 0
return __objSendMsg( ::super, cField, uParam )
ENDCASE
return ""
//--------------------------------------------------------------------------
//CLASS TSQLTable FROM XSQLTable
//ENDCLASS
//--------------------------------------------------------------------------
//CLASS TSQLQueryReport FROM XSQLQueryReport
//ENDCLASS
//--------------------------------------------------------------------------
class TOptionItem from XOptionItem
msgInfo( "TOptionItem" )
data lClicked init .t.
method click()
endclass
method click class TOptionItem
local xReturn
msgInfo( "oK" )
IF ::lClicked
::lClicked := .f.
xReturn := ::super:click()
::lClicked := .t.
ENDIF
return xReturn
Responder