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

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

Postby goosfancito » Fri Oct 10, 2008 1:16 pm

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



Code: Select all  Expand view  RUN


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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Postby TecniSoftware » Fri Oct 10, 2008 1:23 pm

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
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Postby goosfancito » Fri Oct 10, 2008 1:26 pm

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!
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Postby TecniSoftware » Fri Oct 10, 2008 1:36 pm

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
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Resuelto!

Postby goosfancito » Fri Oct 10, 2008 1:42 pm

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

Code: Select all  Expand view  RUN
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  Expand view  RUN

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

   RETURN (NIL)
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Postby TecniSoftware » Fri Oct 10, 2008 2:18 pm

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
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Postby horacio » Fri Oct 10, 2008 4:18 pm

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
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Postby Lautaro » Fri Oct 10, 2008 4:50 pm

Goosfancito:

Cuando escribes:

Code: Select all  Expand view  RUN
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  Expand view  RUN
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
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Postby Antonio Linares » Fri Oct 10, 2008 6:02 pm

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
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 53 guests