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: Select all Expand view
- #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..