Página 1 de 1

Modificar clase

Publicado: Jue Mar 06, 2014 3:45 pm
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?

Modificar clase

Publicado: Lun Mar 10, 2014 9:47 am
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

Modificar clase

Publicado: Lun Mar 10, 2014 9:48 am
por rafa
Sorry , me olvide del New
class TOptionItem from XOptionItem
data lClicked init .t.
method New()
method click()
endclass
Saludos

Modificar clase

Publicado: Mar Mar 11, 2014 6:02 pm
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.

Modificar clase

Publicado: Mié Mar 12, 2014 12:05 am
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

Modificar clase

Publicado: Mié Mar 12, 2014 7:08 am
por Quique
No funcionó, agregue REQUEST TOptionItem en uno de los prg y sigue ignorandola.

Modificar clase

Publicado: Mié Mar 12, 2014 9:17 am
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

Modificar clase

Publicado: Vie Mar 14, 2014 11:46 pm
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