¿porque me dice que no encuentra el metodo cuando lo esta?

Post Reply
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

¿porque me dice que no encuentra el metodo cuando lo esta?

Post by goosfancito »

Me salta en este. a ver si me dan una mano.


Code: Select all

 

CLASS TABMUSUARIOS
   METHOD cargarSeteos(oDatos, vDatos)
   METHOD definirTree()

ENDCLASS
    
     // Sigue el codigo...


     oBtns[2]:bAction:={|| oDlg:END() }

   ACTIVATE DIALOG oDlg CENTERED ON INIT (::definirTree(), ::cargarSeteos())

   RETURN (NIL)

//-------------------------------

METHOD cargarSeteos(oDatos, vDatos) CLASS TABMUSUARIOS

   ::oConexion:selectDb("seteos")
   ::cQuery:= "SELECT * FROM seteos"
   ::oQuery:query(::cQuery)

   RETURN (NIL)

METHOD definirTree() CLASS TABMUSUARIOS

   LOCAL oMenu    := array(3), ;
         oSubMenu := array(10)

   oMenu[1]:= ::oTree:ADD("Principal")
      oSubMenu[1]:= oMenu[1]:ADD("Imprimir...")

   oMenu[2]:= ::oTree:ADD("Proyectos")
      oSubMenu[6]:= oMenu[2]:ADD("Definir Proyectos")
      oSubmenu[7]:= oMenu[2]:ADD("Actualización datos")

   ::oTree:expand()

   RETURN (NIL)

El error:
Error description: Error BASE/1004 Message not found: TDIALOG:DEFINIRTREE

Stack Calls
===========
Called from: tobject.prg => TDIALOG:ERROR(172)
Gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Post by TecniSoftware »

Amigo

No se como es la clase que estas haciendo, pero debe estás
poniendo mal:

ACTIVATE DIALOG oDlg CENTERED ON INIT (::definirTree(), ::cargarSeteos())

Al poner :: y no el objeto que has creado, entiende que te estas refiriendo a la clase TDialog().

Saludos!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Post by goosfancito »

Entonces?
Como deberia de hacerlo?
Esos metodos son de la clase que estoy creando. de la TABMUSUARIOS.

TecniSoftware wrote:Amigo

No se como es la clase que estas haciendo, pero debe estás
poniendo mal:

ACTIVATE DIALOG oDlg CENTERED ON INIT (::definirTree(), ::cargarSeteos())

Al poner :: y no el objeto que has creado, entiende que te estas refiriendo a la clase TDialog().

Saludos!
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Post by TecniSoftware »

Como creas el objeto de la clase TABMUSUARIOS ???

Cual el metodo CONSTRUCTOR de la clase ?

Por ejemplo, creas el objteo oObj := TAbmUsuarios():New()

y entones sería:

ACTIVATE DIALOG oDlg CENTERED ON INIT ( oObj:definirTree(),
oObj:cargarSeteos())


Saludos!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Resuelto!

Post by goosfancito »

Hay que guardar la instancia del objeto en una variable y luego si hacer referencia a ese objeto.

Code: Select all

METHOD pantalla() CLASS TABMUSUARIOS
   LOCAL oDlg
   LOCAL oObj = SELF


   DEFINE DIALOG oDlg resource "DLG_USUARIOS"


   ACTIVATE DIALOG oDlg CENTERED ON INIT (oObj:definirTree(), oObj:cargarSeteos())

   RETURN (NIL)
Que no es lo mismo que poner asi... y esto no lo entiendo.

Code: Select all


   ACTIVATE DIALOG oDlg CENTERED ON INIT (SELF:definirTree(), SELF:cargarSeteos())

   RETURN (NIL)
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Post by TecniSoftware »

Ahora caigo... no me habia dado cuenta que cuando hacías:

ACTIVATE DIALOG oDlg CENTERED ON INIT (::definirTree(), ::cargarSeteos())

era dentro de la misma clase!

Yo uso xHarbour y tengo muchas clases hechas y no me da error, por ejemplo:

::Browse()

ACTIVATE WINDOW ::oWnd;
MAXIMIZED;
ON PAINT ( ::oWnd:SetControl( ::oBrw ),;
::oBrw:SetFocus() )


Saludos!
Alejandro Cebolido
Buenos Aires, Argentina
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Post by horacio »

Fijate si probás así
ACTIVATE DIALOG oDlg CENTERED ON INIT ( Self:definirTree(), Self:cargarSeteos())
He tenido alguna vez ese problema y me parece que así lo resolví.
saludos
User avatar
Lautaro
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile
Contact:

Post by Lautaro »

Goosfancito:

Cuando escribes:

Code: Select all

ACTIVATE DIALOG oDlg CENTERED ON INIT (SELF:definirTree(), SELF:cargarSeteos()) 

   RETURN (NIL) 
y usas self: cuando eso se ejecute usara el self: de la clase tdialog ya que es dentro de ella en donde se ejecutara ese codigo, para solucionarlo usa el truco que especificaste mas arriba :

Code: Select all

 LOCAL oDlg 
   LOCAL oObj = SELF 


   DEFINE DIALOG oDlg resource "DLG_USUARIOS" 


   ACTIVATE DIALOG oDlg CENTERED ON INIT (oObj:definirTree(), oObj:cargarSeteos()) 

   RETURN (NIL) 

Atte.,

Lautaro Moreira
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Gustavo,

Es debido a que al evaluar la claúsula ON INIT el "Self" proporcionado es la caja de diálogo y no el "Self" del método en donde estas.

Por eso es preciso hacer lo que comentas, igual que te dice Lautaro:

local oThis := Self

...

ACTIVATE DIALOG ... ON INIT ( oThis:... )
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply