Una de clases - SOLUCIONADO

Post Reply
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Una de clases - SOLUCIONADO

Post by leandro »

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

::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

********************************************************************************
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

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 ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Una de clases

Post by horacio »

Prueba así

Code: Select all


Local oSelf := Self

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

 
Saludos
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Una de clases

Post by leandro »

Excelente Horacio :D

Muchas gracias.
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Una de clases - SOLUCIONADO

Post by carlos vargas »

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

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

#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

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

METHOD MyMethod CLASS MyClass
oThis := QSelf()
...
ACTION (oThis :dibujaOpciones(oDlgItm,oGnom))
...
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
Post Reply