FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour NO funciona clase llamada desde otro .prg(SOLUCIONADO)
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
NO funciona clase llamada desde otro .prg(SOLUCIONADO)
Posted: Wed Aug 24, 2011 11:52 PM

Buenas noches,

Estoy creando una peque帽a clase para hacer un formulario MDCHILD la cual esta definina en un archivo MAIN.prg

PUBLIC TBancos := TApplication()
.
.
.
.
.
CLASS TBancos
DATA cCodigo As OBJECT INIT NIL
DATA oNombre As OBJECT INIT NIL
DATA oNumero As OBJECT INIT NIL
DATA oWnd As OBJECT INIT NIL
DATA oFont As OBJECT INIT NIL
DATA oFld As OBJECT INIT NIL
DATA oBtn As OBJECT INIT NIL
DATA cTitle As OBJECT INIT NIL

METHOD New() CONSTRUCTOR
METHOD Activar()
ENDCLASS

METHOD New() CLASS TBancos
DEFINE WINDOW ::oWnd MDICHILD OF oWndPrinc;
FROM 10, 10 TO 300, 200 ;
TITLE ::cTitle ;
RETURN self

METHOD Activar() CLASS TBancos
ACTIVATE WINDOW ::oWnd MAXIMIZED
RETURN NIL

La estoy llamado desde otro archivo .prg de la siguiente manera:

FUNCTION BANCOS()
LOCAL oBancos

oBancos:=TBancos():New()

RETURN NIL

Intenta abrir un formulario pero me arroja el siguiente error

Application

Path and name: C:\MX\main.exe (32 bits)
Size: 2,065,408 bytes
Time from start: 0 hours 0 mins 2 secs
Error occurred at: 24/08/2011, 19:21:12
Error description: Error BASE/1605 Invalid self: NEW
Args:
[ 1] = O TBANCOS
[ 2] = O TMDICHILD

Stack Calls

Called from: C:\MX\PRG\main.PRG => TBANCOS:NEW(257)
Called from: C:\MX\PRG\bancos.PRG => BANCOS(55)
Called from: C:\MX\PRG\main.PRG => (b)MENUPRI(68)
Called from: .\source\classes\MENU.PRG => TMENU:COMMAND(452)
Called from: .\source\classes\WINDOW.PRG => TWINDOW:COMMAND(1046)
Called from: .\source\classes\MDIFRAME.PRG => TMDIFRAME:COMMAND(243)
Called from: => TMDIFRAME:HANDLEEVENT(0)
Called from: .\source\classes\WINDOW.PRG => _FWH(3418)
Called from: => WINRUN(0)
Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE(993)
Called from: C:\MX\PRG\main.PRG => MAIN(51)

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 132
Joined: Thu Mar 08, 2007 06:12 PM
Re: NO funciona clase llamada desde otro .prg
Posted: Thu Aug 25, 2011 01:04 AM

Cambia esto
PUBLIC TBancos := TApplication()
ya que estas declarando una variable tipo public y tambien tienes una clase con el mismo nombre de la variable

Harbour / Bcc / MinGW / Fwh 13.9
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: NO funciona clase llamada desde otro .prg
Posted: Thu Aug 25, 2011 01:41 AM

Compubrion,

Sigue arrojando el mismo error

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: NO funciona clase llamada desde otro .prg
Posted: Thu Aug 25, 2011 02:05 AM
Hola, prueba eliminando el punto y coma:
TITLE ::cTitle ;
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: NO funciona clase llamada desde otro .prg
Posted: Thu Aug 25, 2011 02:16 AM

Funciona de esa forma.

Ahora trato de agregar un titulo al formulario y no me lo permite. Lo hago de esta forma

oBancos:=TBancos():New()
oBancos:cTitle := "Incluye Bancos"

Alguna sugerencia?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: NO funciona clase llamada desde otro .prg
Posted: Thu Aug 25, 2011 02:43 AM

Compuin
no seria mejor que la data ctitle la declares de tipo caracter y no como object
CLASS TBancos
...
...
DATA cTitle

METHOD New() CLASS TBancos
::cTitle = ""
DEFINE WINDOW ::oWnd MDICHILD OF oWndPrinc;
FROM 10, 10 TO 300, 200 ;
TITLE ::cTitle
RETURN self

fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: NO funciona clase llamada desde otro .prg
Posted: Thu Aug 25, 2011 02:48 AM

CLASS TBancos
DATA cCodigo As OBJECT INIT NIL
DATA oNombre As OBJECT INIT NIL
DATA oNumero As OBJECT INIT NIL
DATA oWnd As OBJECT INIT NIL
DATA oFont As OBJECT INIT NIL
DATA oFld As OBJECT INIT NIL
DATA oBtn As OBJECT INIT NIL
DATA cTitle AS CHARACTER INIT NIL

METHOD New() CONSTRUCTOR
METHOD Activar()
ENDCLASS

METHOD New() CLASS TBancos
DEFINE WINDOW ::oWnd MDICHILD OF oWndPrinc;
FROM 0, 0 TO 400, 600 ;
BORDER NONE NOMAXIMIZE COLOR 0, 14215660 PIXEL ;
TITLE ::cTitle

Ya la declare pero al querer cambar el titulo desde el otro prg. no hace nada

oBancos:=TBancos():New()
oBancos:cTitle :=" Incluiye Bancos"

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: NO funciona clase llamada desde otro .prg
Posted: Thu Aug 25, 2011 03:07 AM
Compuin pasa el nombre como parametro
y en el metodo activar colocas el define window ....
asi:
Code (fw): Select all Collapse
CLASS TBancos
DATA cTitle AS CHARACTER INIT NIL
METHOD New() CONSTRUCTOR
METHOD Activar()
ENDCLASS
METHOD New(ctitulo) CLASS TBancos
::cTitle:=ctitulo
return self

METHOD Activar() CLASS TBancos
DEFINE WINDOW ::oWnd MDICHILD OF oWndPrinc;
FROM 0, 0 TO 400, 600 ;
BORDER NONE NOMAXIMIZE COLOR 0, 14215660 PIXEL ;
TITLE ::cTitle
ACTIVATE WINDOW ::oWnd MAXIMIZED
Return nil

FUNCTION BANCOS()
LOCAL oBancos

oBancos:=TBancos():New("incluye bcos")
oBancos:activar()

RETURN NIL
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: NO funciona clase llamada desde otro .prg
Posted: Thu Aug 25, 2011 03:18 AM

Artur01,

Muchisimas gracias. De esa manera, logro funcionar!

Saludos

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: NO funciona clase llamada desde otro .prg(SOLUCIONADO)
Posted: Tue Aug 30, 2011 11:24 PM
Si ya est谩 solucionado bien...
En programaci贸n orientada al objeto hay un patr贸n de programaci贸n que se llama "Factor铆a de objetos"
Creo que aqu铆 se podr铆a aplicar perfectamente.

Code (fw): Select all Collapse
function getBanco( cTitle )
   static Banco := TBancos():new()

   Banco:oWnd:setText( cTitle )

return( Banco )


As铆 deber铆a funcionar tu c贸digo original
S贸lo tendr铆as que hacer una llama a esa funci贸n para obtener un objeto banco con el titulo que quieras.

oBanco := getBanco( "Este es el t铆tulo de la ventana" )

L贸gicamente no tendr铆as que declarar nada como public...

Soy de la vieja escuela las variables public y privates estaban casi prohibidas en clipper ya que consum铆an entradas en la tabla de s铆mbolos y era limitada.
En mi c贸digo no uso ni una sola... eso me lo ense帽贸 hace muchos a帽os un maestro :-)
______________________________________________________________________________

Sevilla - Andaluc铆a
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: NO funciona clase llamada desde otro .prg(SOLUCIONADO)
Posted: Wed Aug 31, 2011 02:40 AM

Lo probare y te comento

Gracias nuevamente

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Continue the discussion