FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Duda con MDI y oWndClient
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Duda con MDI y oWndClient
Posted: Sat Dec 05, 2015 08:24 PM
Saludos Colegas:

Estoy trabajando con ventanas MDI y MDIChild, estoy apenas empezando y ya tengo inconvenientes, la verdad nunca me ha gustado trabajar con MDI pero siempre hay una primera vez.. La cuestión es la siguiente:

Intento abrir archivos de texto ya sea arrastrando el archivo a mi aplicación o desde el menu, si el programa ya esta abierto se muestra y abre el archivo, si no se abre desde cero. El problema viene cuando mi programa ya esta abierto e intento abrir otro archivo en una ventana diferente, me aparece el error:

Error BASE/1004 No Exported Method: OWNDCLIENT


Al parecer el objeto oWnd de la ventana padre no la esta reconociendo, porque la detecta como "NIL"

Como corregir este fallo, les dejo el código de lo que tengo..

Code (fw): Select all Collapse
#include "FiveWin.ch"

#define GW_CHILD        5
#define GW_HWNDNEXT     2
#define SW_RESTORE      9

STATIC oWnd, oFon, oMru, oMenu

#xcommand MENUITEM [ <oMenuItem> PROMPT ] [<cPrompt>] ;
             [ MESSAGE <cMsg> ] ;
             [ <checked: CHECK, CHECKED, MARK> ] ;
             [ <Enable: ENABLED, DISABLED> ] ;
             [ <FILE: FILE, FILENAME, DISK> <cBmpFile> ] ;
             [ <RESOURCE: RESOURCE, RESNAME, NAME> <cResName> ] ;
             [ ACTION <uAction,...> ] ;
             [ BLOCK <bAction> ] ;
             [ <OF: OF, MENU, SYSMENU> <oMenu> ] ;
             [ ACCELERATOR <nState>, <nVirtKey> ] ;
             [ <help: HELP> ] ;
             [ <HelpId: HELP ID, HELPID> <nHelpId> ] ;
             [ WHEN <uWhen> ] ;
             [ <Degrade: DEGRADE> ] ;
             [ <BREAK: BREAK> ] ;
             [ FONT <oFont> ] ;
             [ COLORMENU  <nClrMenu>, <nClrMenutxt> ] ;
             [ COLORBMP  <nClrBkBa>, <nClrToBa> ] ;
             [ COLORSELECT  <nClrHiLi>, <nClrHiLf>, <nClrHitx> ] ;
             [ COLORSEPARATOR  <nClrHiBr> ] ;
             [ <lVert: LINESVERT> ] ;
             [ <lColors: COLORS> ] ;
             [ CHARICON <cCharBmp> ] ;
             [ HSYSBITMAP <hBmp> ] ;
       => ;
          [ <oMenuItem> := ] MenuAddItem( <cPrompt>, <cMsg>,;
             <.checked.>, [ UPPER(<(Enable)>) == "ENABLED" ],;
             [\{|<oMenuItem>|<uAction>\}],;
             <cBmpFile>, <cResName>, <oMenu>, <bAction>, <nState>, <nVirtKey>,;
             <.help.>, <nHelpId>, [<{uWhen}>], <.BREAK.>, ,<.Degrade.>, .F., ;
             <oFont>, <nClrMenu>, <nClrMenutxt>, <nClrBkBa>, <nClrToBa>, ;
             <nClrHiLi>, <nClrHiLf>, <nClrHitx>, <nClrHiBr>, <.lColors.>, ;
             <.lVert.>, <cCharBmp>,,,,, <hBmp> )
             
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
FUNCTION Main(cFileName)     
 
    IF IsExeRunning( cFileName( HB_ARGV( 0 ) ) )
       ShowApplication(cFileName)
   ELSE
       Principal(cFileName)
  ENDIF

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION ShowApplication( cFileName )

LOCAL hWnd:= FindWnd( cFileNoExt("RC_Edit") )

   IF hWnd != Nil
      
      IF IsIconic( hWnd )
         ShowWindow( hWnd, SW_RESTORE )
      ENDIF
      
      SetForeGroundWindow( hWnd )
      AbreRC(cFileName)
      
   ENDIF

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION FindWnd( cTitle )

   LOCAL hWnd := GetWindow( GetDesktopWindow(), GW_CHILD )

   WHILE hWnd != 0
      IF UPPER( cTitle ) $ UPPER( GetWindowText( hWnd ) )
         RETURN hWnd
      ENDIF

      hWnd = GetWindow( hWnd, GW_HWNDNEXT )
   END

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION Principal(cFileName)

LOCAL oIco
  
   DEFINE FONT   oFon NAME "Segoe UI Symbol" SIZE 0, -14 WEIGHT 300
   DEFINE ICON   oIco RESOURCE "00"    
   DEFINE WINDOW oWnd TITLE "RC_Edit - Editor de Recursos RC" ICON oIco MDI MENU MiMenu()
   
   SET MESSAGE OF oWnd TO "Listo" NOINSET CLOCK DATE KEYBOARD 2010
  
   oWnd:bInit:= {|| IF(EMPTY(cFileName) == .F.,(RevisaRC(cFileName)),(SysRefresh()))}
  
   ACTIVATE WINDOW oWnd MAXIMIZED

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION MiMenu()

 
MENU oMenu FONT oFon
  MENUITEM "Archivo"
     MENU 
          MENUITEM "Abrir"     RESOURCE "ABRIR"                  ACTION RevisaRC()
          SEPARATOR
          MENUITEM "Nuevo"     RESOURCE "NUEVO"                 //ACTION SysRefresh()
          SEPARATOR
          MENUITEM "Recientes" RESOURCE "RECIENTE"    
          MENU
             MRU oMru FILENAME ".\RcEdit.ini" SECTION  "FILES"  //ACTION SysRefresh()
          ENDMENU   
     ENDMENU     
ENDMENU

 
RETURN oMenu



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION RevisaRC(cFileName)

IF EMPTY(cFileName)
   cFileName:= cGetFile("Archivo de Recursos en texto     (*.rc)|*.rc|", "Agregar Archivo Recurso", 1,)
ENDIF

IF !EMPTY(cFileName) .AND. LEN(ALLTRIM(cFileNoPath(cFileName))) > 3 .AND. cFileExt(cFileName) == "rc"
    AbreRC(cFileName)
ENDIF

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION AbreRC(cFileName)

LOCAL oWndCh
LOCAL oIco

  DEFINE ICON   oIco   RESOURCE "00"
  DEFINE WINDOW oWndCh TITLE ""+ cFileName +"" MDICHILD OF oWnd ICON oIco
ACTIVATE WINDOW oWndCh

RETURN Nil



Gracias..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Duda con MDI y oWndClient
Posted: Sat Dec 05, 2015 09:04 PM

Victor, has visto como esta hecho en el Fivedit que hizo Antonio?

https://bitbucket.org/fivetech/fivewin- ... ivEdit.zip

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Duda con MDI y oWndClient
Posted: Sun Dec 06, 2015 03:51 AM

Saludos Cristobal:

Si lo he revisado, pero lo toma como si fuera una clase, yo intento hacerlo en modo funciónes, no se si sea obligatorio usarlo tal como en el ejemplo que mencionas, lo que no entiendo es: Si ya el objeto oWnd fue creado porque al arrastrar un archivo para abrirlo aparece éste error, le he puesto Msginfo(Valtype(oWnd)) y medice que esta vacio "U", habra forma de capturar el objeto ya creado y poder abrir de la forma que planteo las ventanas hijas..?

Gracias.

Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Duda con MDI y oWndClient
Posted: Sun Dec 06, 2015 04:26 AM
Lo intente pasandolo a Clase, pero no funciona:

Code (fw): Select all Collapse
#include "FiveWin.ch"

#define GW_CHILD        5
#define GW_HWNDNEXT     2
#define SW_RESTORE      9

STATIC oRCEdit

#xcommand MENUITEM [ <oMenuItem> PROMPT ] [<cPrompt>] ;
             [ MESSAGE <cMsg> ] ;
             [ <checked: CHECK, CHECKED, MARK> ] ;
             [ <Enable: ENABLED, DISABLED> ] ;
             [ <FILE: FILE, FILENAME, DISK> <cBmpFile> ] ;
             [ <RESOURCE: RESOURCE, RESNAME, NAME> <cResName> ] ;
             [ ACTION <uAction,...> ] ;
             [ BLOCK <bAction> ] ;
             [ <OF: OF, MENU, SYSMENU> <oMenu> ] ;
             [ ACCELERATOR <nState>, <nVirtKey> ] ;
             [ <help: HELP> ] ;
             [ <HelpId: HELP ID, HELPID> <nHelpId> ] ;
             [ WHEN <uWhen> ] ;
             [ <Degrade: DEGRADE> ] ;
             [ <BREAK: BREAK> ] ;
             [ FONT <oFont> ] ;
             [ COLORMENU  <nClrMenu>, <nClrMenutxt> ] ;
             [ COLORBMP  <nClrBkBa>, <nClrToBa> ] ;
             [ COLORSELECT  <nClrHiLi>, <nClrHiLf>, <nClrHitx> ] ;
             [ COLORSEPARATOR  <nClrHiBr> ] ;
             [ <lVert: LINESVERT> ] ;
             [ <lColors: COLORS> ] ;
             [ CHARICON <cCharBmp> ] ;
             [ HSYSBITMAP <hBmp> ] ;
       => ;
          [ <oMenuItem> := ] MenuAddItem( <cPrompt>, <cMsg>,;
             <.checked.>, [ UPPER(<(Enable)>) == "ENABLED" ],;
             [\{|<oMenuItem>|<uAction>\}],;
             <cBmpFile>, <cResName>, <oMenu>, <bAction>, <nState>, <nVirtKey>,;
             <.help.>, <nHelpId>, [<{uWhen}>], <.BREAK.>, ,<.Degrade.>, .F., ;
             <oFont>, <nClrMenu>, <nClrMenutxt>, <nClrBkBa>, <nClrToBa>, ;
             <nClrHiLi>, <nClrHiLf>, <nClrHitx>, <nClrHiBr>, <.lColors.>, ;
             <.lVert.>, <cCharBmp>,,,,, <hBmp> )
             
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
FUNCTION Main(cFileName)     
 
    IF IsExeRunning( cFileName( HB_ARGV( 0 ) ) )
       ShowApplication(cFileName)
   ELSE
       oRCEdit:= TRCEdit():NEW(cFileName)
       oRCEdit:ACTIVATE()
  ENDIF

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION ShowApplication( cFileName )

LOCAL hWnd:= FindWnd("RC_Edit")

   IF hWnd != Nil
      
      IF IsIconic( hWnd )
         ShowWindow( hWnd, SW_RESTORE )
      ENDIF
      
      SetForeGroundWindow( hWnd )
      OpenClipboard( GetDesktopWindow() )
      SetClipboardData( 1, cFileName )
      CloseClipboard()
      SendMessage( hWnd, FM_OPENFILE )
      
   ENDIF

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION FindWnd( cTitle )

LOCAL hWnd := GetWindow( GetDesktopWindow(), GW_CHILD )

   WHILE hWnd != 0
      IF UPPER( cTitle ) $ UPPER( GetWindowText( hWnd ) )
         RETURN hWnd
      ENDIF

      hWnd = GetWindow( hWnd, GW_HWNDNEXT )
   END

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
CLASS TRCEdit

DATA oWnd,oIco,oFon,oMenu,oMru

METHOD NEW(cFileName) CONSTRUCTOR
METHOD ACTIVATE()
METHOD MenuRC()
METHOD AbreRC(cFileName)
METHOD MuestraRC(cFileName)

ENDCLASS



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
METHOD NEW(cFileName) CLASS TRCEdit

   DEFINE FONT   ::oFon NAME "Segoe UI Symbol" SIZE 0, -14 WEIGHT 300
   DEFINE ICON   ::oIco RESOURCE "00"    
   DEFINE WINDOW ::oWnd TITLE "RC_Edit - Editor de Recursos RC" ICON ::oIco MDI MENU ::MenuRC()
   
   SET MESSAGE OF ::oWnd TO "Listo" NOINSET CLOCK DATE KEYBOARD 2010
  
   ::oWnd:bInit:= {|| IF(EMPTY(cFileName) == .F.,(::AbreRC(cFileName)),(SysRefresh()))}
   
RETURN Self



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
METHOD ACTIVATE() CLASS TRCEdit

ACTIVATE WINDOW ::oWnd MAXIMIZED

RETURN Self


//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
METHOD MenuRC() CLASS TRCEdit

MENU ::oMenu FONT ::oFon
  MENUITEM "Archivo"
     MENU 
          MENUITEM "Abrir"     RESOURCE "ABRIR"                  ACTION ::AbreRC()
          SEPARATOR
          MENUITEM "Nuevo"     RESOURCE "NUEVO"                 //ACTION SysRefresh()
          SEPARATOR
          MENUITEM "Recientes" RESOURCE "RECIENTE"    
          MENU
             MRU ::oMru FILENAME ".\RcEdit.ini" SECTION  "FILES"  //ACTION SysRefresh()
          ENDMENU   
     ENDMENU     
ENDMENU
 
RETURN ::oMenu



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
METHOD AbreRC(cFileName) CLASS TRCEdit 

IF EMPTY(cFileName)
   cFileName:= cGetFile("Archivo de Recursos en texto     (*.rc)|*.rc|", "Agregar Archivo Recurso", 1,)
ENDIF

IF !EMPTY(cFileName) .AND. LEN(ALLTRIM(cFileNoPath(cFileName))) > 3 .AND. cFileExt(cFileName) == "rc"
    ::MuestraRC(cFileName)
ENDIF

RETURN Nil



//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
METHOD MuestraRC(cFileName) CLASS TRCEdit

LOCAL oWndCh

::oMru:SAVE(cFileName)

  DEFINE WINDOW oWndCh TITLE ""+ cFileName +"" MDICHILD ICON ::oIco
ACTIVATE WINDOW oWndCh

RETURN Nil
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Duda con MDI y oWndClient
Posted: Sun Dec 06, 2015 02:46 PM
El detalle esta en la funcion SendMessage( hWnd, FM_OPENFILE ),

En este simple ejemplo no lanza el llamado FM_OPENFILE Que condiciones son necesarias en las funciones para que pueda ser reconocida, lo estoy haciendo mal..? No doy como poderlo hacer, he revisado toda la noche sin suerte en base a fivedit..


alguien que me de una luz.. Gracias.
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Duda con MDI y oWndClient
Posted: Fri Dec 11, 2015 05:28 PM

Maestro Antonio Como puedo corregir este fallo..?

Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon

Continue the discussion