Page 1 of 1

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

Posted: Fri Oct 10, 2008 1:16 pm
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.

Posted: Fri Oct 10, 2008 1:23 pm
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!

Posted: Fri Oct 10, 2008 1:26 pm
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!

Posted: Fri Oct 10, 2008 1:36 pm
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!

Resuelto!

Posted: Fri Oct 10, 2008 1:42 pm
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)

Posted: Fri Oct 10, 2008 2:18 pm
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!

Posted: Fri Oct 10, 2008 4:18 pm
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

Posted: Fri Oct 10, 2008 4:50 pm
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

Posted: Fri Oct 10, 2008 6:02 pm
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:... )