Una de clases - SOLUCIONADO

Una de clases - SOLUCIONADO

Postby leandro » Mon Aug 19, 2019 8:52 pm

Buenas tardes para todos,
Tengo entendido, y hasta en momento lo he venido usando así, que el llamado a un método dentro la clase lo debo hacer de la siguiente manera:
Code: Select all  Expand view
::mimetodo()

Y funcionaba de maravilla, resulta que ahora requiero hacer el llamado al método desde la clase, pero utilizando un GET, de la siguiente manera:
Code: Select all  Expand view

********************************************************************************
METHOD Dibuja() CLASS cItem

DEFINE DIALOG oDlgItm RESOURCE "ORFACT1" OF oDlgFct
        ...........
    REDEFINE GET oGnom VAR ::hDatos["nombre"] ID 140 OF oDlgItm UPDATE BITMAP "Bbusc" ;
            ACTION (::dibujaOpciones(oDlgItm,oGnom))

         ..........................
ACTIVATE DIALOG oDlgItm
 

Pero al llamar al método desde la clase, parece que se confunde y asume que estoy llamando un método de la clase tget. El error es el siguiente:
Code: Select all  Expand view
Application
===========
   Path and name: C:\DLYMA\dlyma.exe (32 bits)
   Size: 6,137,856 bytes
   Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613)
   FiveWin  version: FWH 19.06
   C compiler version: Borland/Embarcadero C++ 7.3 (32-bit)
   Windows version: 6.2, Build 9200

   Time from start: 0 hours 0 mins 32 secs
   Error occurred at: 19/08/2019, 15:11:08
   Error description: Warning BASE/1004  Message not found: TGET:DIBUJAOPCIONES

Stack Calls
===========
   Called from: source\rtl\tobject.prg => TGET:ERROR( 0 )
   Called from: source\rtl\tobject.prg => TGET:MSGNOTFOUND( 0 )
   Called from: source\rtl\tobject.prg => TGET:DIBUJAOPCIONES( 0 )
   Called from: c:\dlyma\prg\Afact.prg => (b)CITEM:DIBUJA( 438 )
   Called from: .\source\classes\TGET.PRG => (b)TGET:CREATEBUTTON( 952 )
   Called from: .\source\classes\BUTTON.PRG => TBUTTONBMP:CLICK( 179 )
   Called from: .\source\classes\CONTROL.PRG => TBUTTON:HANDLEEVENT( 1755 )
   Called from: .\source\classes\BUTTONB.PRG => TBUTTONBMP:HANDLEEVENT( 261 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3546 )
   Called from:  => SENDMESSAGE( 0 )
   Called from: .\source\classes\WINDOW.PRG => TGET:COMMAND( 1130 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1801 )
   Called from: .\source\classes\TGET.PRG => TGET:HANDLEEVENT( 1160 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3546 )
   Called from:  => DIALOGBOX( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 304 )
   Called from: c:\dlyma\prg\Afact.prg => CITEM:DIBUJA( 455 )
   Called from: c:\dlyma\prg\R32_fact.prg => GESITEM( 587 )
   Called from: c:\dlyma\prg\R32_fact.prg => (b)MANTEFACTURAS( 242 )
   Called from: .\source\classes\XBROWSE.PRG => TXBRWCOLUMN:FOOTERLBUTTONUP( 14354 )
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:LBUTTONUP( 4802 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1791 )
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:HANDLEEVENT( 11218 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3546 )
   Called from:  => DIALOGBOX( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 304 )
   Called from: c:\dlyma\prg\R32_fact.prg => MANTEFACTURAS( 391 )
   Called from: c:\dlyma\prg\R32_fact.prg => (b)FFACTURAS( 82 )
   Called from: .\source\classes\URLLINK.PRG => TURLLINK:LBUTTONDOWN( 180 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1788 )
   Called from: .\source\classes\URLLINK.PRG => TURLLINK:HANDLEEVENT( 168 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3546 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 1078 )
   Called from: c:\dlyma\prg\R32_menu.prg => MAIN( 530 )


Como puedo solucionar ese problema? de antemano gracias.
Last edited by leandro on Tue Aug 20, 2019 4:31 pm, edited 1 time in total.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Una de clases

Postby horacio » Mon Aug 19, 2019 10:17 pm

Prueba así

Code: Select all  Expand view


Local oSelf := Self

REDEFINE GET oGnom VAR oSelf:hDatos["nombre"] ID 140 OF oDlgItm UPDATE BITMAP "Bbusc" ;
            ACTION (oSelf:dibujaOpciones(oDlgItm,oGnom))

 


Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Una de clases

Postby leandro » Tue Aug 20, 2019 4:31 pm

Excelente Horacio :D

Muchas gracias.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Una de clases - SOLUCIONADO

Postby carlos vargas » Thu Aug 22, 2019 5:07 pm

Es bastante comun que los que que usamos clases propias queramos hacer llamadas de los metodos o datos de nuestra clases en las clausulas action, onchange o similar de las definiciones de controles de fwh,
lo normal es que intentemos hacer:
Code: Select all  Expand view

REDEFINE ... ACTION ( ::MyData := ::MyMehod(),...)
 

esto hace que nos de el error indicado por Leandro, en la definicion del comando redefine get tenemos:
Code: Select all  Expand view

#xcommand REDEFINE GET [ <oGet> VAR ] <uVar> ;
...
[ ACTION <uAction> ] ;
=> ;
[ <oGet> := ] TGet():ReDefine( <nId>, bSETGET(<uVar>), <oDlg>,;
...
<.spin.>, <{SpnUp}>, <{SpnDn}>, <{Min}>, <{Max}>, [\{|self| <uAction> \}], <cBmpName>, <"uVar">,;
 

como podemos ver ya aca se esta definiendo un parametro en el codigo de bloque para la accion ( {|self| <uAction> } ), por lo que cuando se encuentra esto:
Code: Select all  Expand view

ACTION (::dibujaOpciones(oDlgItm,oGnom))
 

::dibujaOpcion o Self:dibujaOpcion, se estaria refiriendo al get ( oGnom:dibujaOpcion el cual obviamente no existe) y no a nuestro objeto, es por ello que la solucion es la que plantea horacio, y que asignemos la instancia de nuestro clase a una variable y que la usemos en lugar del :: o Self, para evitar confuciones.
Code: Select all  Expand view

METHOD MyMethod CLASS MyClass
oThis := QSelf()
...
ACTION (oThis :dibujaOpciones(oDlgItm,oGnom))
...
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 73 guests