Error con un programa de fivewin en una maquina virtual

Re: Error con un programa de fivewin en una maquina virtual

Postby quique » Fri Apr 12, 2013 1:47 am

¿No hay manera de tratar de interpretar el archivo que se genera? por lo menos para tratar de encontrar donde está el error, no creo tanto que sea la versión de windows, porque como comenté anteriormente, el programa corre perfectamente en máquinas con windows 7 home y profesional, pero en la máquina virtual no funcionó. Ademas, tengo otro programa de fivewin que funciona sin problemas en la misma máquina virtual. Aunque, curiosamente, el problema se muestra al llamar un diálogo, eso no quiere decir que el problema tenga que ser ahí, porque cuando hago el llamado al shellexecute() no creo diálogos, lo que hago es llamar al otro programa de fivewin desde el programa para no tener que hacer doble click o alguna otra operación fuera del programa.

Es muy posible que el problema tenga que ver con la clase que utilizo heredada de tTxtEdit() o en algún otro proceso intermedio. No se, puede ser en cualquier parte, pero ¿por que en la máquina virtual y no fuera? Realmente lo importante es poder encontrar el lugar y corregirlo.
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con un programa de fivewin en una maquina virtual

Postby Antonio Linares » Fri Apr 12, 2013 6:32 am

Quique,

En el fichero que se genera lo que indica es que el error viene de aqui:
0x6EF40000 0x00010000 C:\Windows\System32\VBoxHook.dll
como ves, poco se puede hacer ahi...

Por favor copia aqui el código de la clase que has creado para que revise si está bien.

Si haces sencillamente:

DEFINE DIALOG oDlg

ACTIVATE DIALOG oDlg

eso tambien te falla ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con un programa de fivewin en una maquina virtual

Postby Antonio Linares » Fri Apr 12, 2013 6:34 am

Usas algo de OLE ? Algo de gráficos ?

Son las DLLs usadas justo antes de VBoxHook.dll
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con un programa de fivewin en una maquina virtual

Postby quique » Fri Apr 12, 2013 1:32 pm

Nop, ni ole ni gráficos, y ya llegué a la conclusión de que el problema es en mi clase, porque si cierro la ventana no falla, aunque no he descartado que el error venga desde tTxtEdit. No se porque pude llegar al activate la vez pasada, quise volver a comprobarlo antes de monitorear la clase dialog, pero esta vez no me dejó ni siquiera al principio de la función.

No se si esto sea como gráficos, pero se utiliza mucho textOut().
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con un programa de fivewin en una maquina virtual

Postby Antonio Linares » Fri Apr 12, 2013 1:56 pm

Quique,

Has incluido esta línea en la declaración de tu clase ?

CLASSDATA lRegistered AS LOGICAL
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con un programa de fivewin en una maquina virtual

Postby quique » Fri Apr 12, 2013 2:01 pm

si, la tengo en las 3
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con un programa de fivewin en una maquina virtual

Postby sysctrl2 » Fri Apr 12, 2013 4:33 pm

Quique para ejecutar un programa externo
has intentado asi?

Code: Select all  Expand view
[code]SysWait(.7)
   WinExec( "ScTimer.exe "  )[/code]


saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: Error con un programa de fivewin en una maquina virtual

Postby quique » Fri Apr 12, 2013 4:56 pm

No para este programa, pero alguna vez lo usé y no recuerdo cual fue el problema por el cual lo cambié por shellExecute(), pero bueno, esa era otra situación, me parece que fue por la velocidad, ya no me acuerdo, a fin de cuentas, los dos tardaban en salir del programa con un quit despues del shellExecute() o winExec().

Pero el problema no es solo con ese llamado, tambien al mostrar algún mensaje (msginfo() o diálogos).

Una pregunta ¿porque el SysWait(.7) antes de winExec().
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con un programa de fivewin en una maquina virtual

Postby Antonio Linares » Fri Apr 12, 2013 5:36 pm

Quique,

Puedes publicar aqui ó enviarme por email el código fuente de la clase que has derivado de TTxtEdit ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con un programa de fivewin en una maquina virtual

Postby quique » Fri Apr 12, 2013 6:15 pm

El error no creo que esté en esa clase ¿que es lo que necesitas ver en ella ponerlo? más bien creo que es en la creación del menú, porque quitando esa parte ya no tengo problemas, ya pude ver el diálogo sin problemas, y esa parte no la tengo dentro de la clase derivada de tTxtEdit

Esta es casi toda la la función donde creo el menú, no me dejo subirla toda por el límite de caracteres, pero quito solamente líneas en la creación del ::aKeyCon, y no lo muestro como código porque no se muestra el mensaje

function menuPrincipal
   local /*oMenu, */xMenu, nLen, hMenu, cCont
   local self := qSelf()
   ::aKeyCon := { ;       // Lista de funciones programables "TIPO" => " " , "x"- Teclas en tiempo de edición, "0" y "5"- inicia menu, "1" , "4"- menuItem, "2" separador dentro del menú "3" fin de menú
            ;  // Teclas en tiempo de edición
            { "DESCRIP" => hIdioma:curBckSpc     , "TIPO" => " ", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_BACK   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:delete( .t. ) } }, ;
            { "DESCRIP" => hIdioma:curReturn     , "TIPO" => " ", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_RETURN , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:edit_return() } }, ;
            { "DESCRIP" => hIdioma:curTab        , "TIPO" => " ", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_TAB    , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:edit_tabulador() } }, ;
            { "DESCRIP" => hIdioma:curEsc        , "TIPO" => " ", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_ESCAPE , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || nil } }, ;
            { "DESCRIP" => hIdioma:curInsertar   , "TIPO" => "x", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_INSERT , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:toggleInsert() } }, ;
            { "DESCRIP" => hIdioma:curSelIni     , "TIPO" => " ", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_HOME   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || if( ::oFuente:nPressDown == 1, ::oFuente:goBeginChar( .t. ), if( ::oFuente:nPressDown == 2, ::oFuente:goBeginLine( .t. ), if( ::oFuente:nPressDown == 3, ::oFuente:goBeginWindow( .t. ), if( ::oFuente:nPressDown == 4, ::oFuente:goTop( .t. ), ) ) ) ) } }, ;
            { "DESCRIP" => hIdioma:curSelFin     , "TIPO" => " ", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_END    , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || if( ::oFuente:nPressDown == 1, ::oFuente:goEndLine( .t. ), if( ::oFuente:nPressDown == 2, ::oFuente:goEndWindow( .t. ), if( ::oFuente:nPressDown == 3, ::oFuente:goBottom( .t. ), ) ) ) } }, ;
            { "DESCRIP" => hIdioma:curInicio     , "TIPO" => " ", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_HOME   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || if( ::oFuente:nPressDown == 1, ::oFuente:goBeginChar( .f. ), if( ::oFuente:nPressDown == 2, ::oFuente:goBeginLine( .f. ), if( ::oFuente:nPressDown == 3, ::oFuente:goBeginWindow( .f. ), if( ::oFuente:nPressDown == 4, ::oFuente:goTop( .f. ), ) ) ) ) } }, ;
            { "DESCRIP" => hIdioma:curFin        , "TIPO" => "x", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_END    , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || if( ::oFuente:nPressDown == 1, ::oFuente:goEndLine( .f. ), if( ::oFuente:nPressDown == 2, ::oFuente:goEndWindow( .f. ), if( ::oFuente:nPressDown == 3, ::oFuente:goBottom( .f. ), ) ) ) } }, ;
            ;  // Menú Archivo
            { "DESCRIP" => hIdioma:mnuArchivo    , "TIPO" => "5", "VARIABLE" => "_OITMARCH" }, ;
            { "DESCRIP" => hIdioma:mnuNuevo      , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::fuenteNuevo() }       , "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:mnuAbrir      , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F3     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::abrirFuente() }       , "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:mnuGuardar    , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F2     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:saveToFile() }, "WHEN" => { || ::oFuente <> nil .AND. ::oFuente:lChanged } }, ;
            { "DESCRIP" => hIdioma:mnuGuardarComo, "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:saveToFile( , .t. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuGuardarTodo, "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_F2     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::guardarTodo() }       , "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuCerrar     , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_F2     , "FLAGS2" => ACC_CONTROL, "TECLA2" => VK_F4     , "ACCION" => { || ::oFuente:cerrar() }    , "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuCerrarTodo , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_F3     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:closeAll() }     , "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuProyectos  , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::proyectos() }         , "WHEN" => nil }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuOS_shell   , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || shellExecute( , "open", getEnv( "COMSPEC" ),,, SW_SHOWNORMAL ) }, "WHEN" => nil }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuImprimir   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "P" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:print() }        , "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuConfImp    , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "P" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || printerSetup() }        , "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuPreprocesar, "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:mnuDirInclude , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::config( 2 ) }         , "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:mnuPPCompacto , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:preproceso( 0 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuPPNormal   , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:preproceso( 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuPPDetallado, "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:preproceso( 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "3" }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuSalir      , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_F4     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:end() }          , "WHEN" => nil }, ;
            {                                      "TIPO" => "2" }, ;
            {                                      "TIPO" => "3" }, ;
            ;  // Menú Editar
            { "DESCRIP" => hIdioma:mnuEditar     , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:mnuUndo       , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_BACK   , "FLAGS2" => ACC_CONTROL, "TECLA2" => asc( "Z" ), "ACCION" => { || ::oFuente:undo() }      , "WHEN" => { || ::oFuente <> nil .AND. len( ::oFuente:aDelLines ) >= ::oFuente:nUndo } }, ;
            { "DESCRIP" => hIdioma:mnuRedo       , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_RETURN , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:redo() }      , "WHEN" => { || ::oFuente <> nil .AND. ::oFuente:nUndo > 1 } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuCortar     , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "X" ), "FLAGS2" => ACC_SHIFT  , "TECLA2" => VK_DELETE , "ACCION" => { || ::oFuente:shift_delete()}, "WHEN" => { || ::oFuente <> nil .AND. ::oFuente:hSelect <> nil .and. !::oFuente:lReadOnly } }, ;
            { "DESCRIP" => hIdioma:mnuCopiar     , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "C" ), "FLAGS2" => ACC_CONTROL, "TECLA2" => VK_INSERT , "ACCION" => { || ::oFuente:ctrl_insert()}, "WHEN" => { || ::oFuente <> nil .AND. ::oFuente:hSelect <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuPegar      , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "V" ), "FLAGS2" => ACC_SHIFT  , "TECLA2" => VK_INSERT , "ACCION" => { || ::oFuente:paste() }     , "WHEN" => { || ::oFuente <> nil .AND. !::oFuente:lReadOnly } }, ;
            { "DESCRIP" => hIdioma:mnuSuprimir   , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_DELETE , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:delete( .f. )}, "WHEN" => { || ::oFuente <> nil .AND. !::oFuente:lReadOnly } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuSelLine    , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F7     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:edit_insert( SELECCION_LINEA ) } , "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuSelbloque  , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_F7     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:edit_insert( SELECCION_BLOQUE ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuMovCursor  , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:curSelLinPrev , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_UP     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goPrevLine( .t. ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelLinSig  , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_DOWN   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || if( ::oFuente:lActDer .OR. ::oFuente:nLine() < len( ::oFuente:aLines ) + 1, ::oFuente:goNextLine( .t. ), ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelIzq     , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_LEFT   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goPrevChar( .t. ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelDer     , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_RIGHT  , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goNextChar( .t. ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelWordPrev, "TIPO" => "1", "FLAGS1" => ACC_CTRLSHF, "TECLA1" => VK_LEFT   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goPrevWord( .t. ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelWordSig , "TIPO" => "1", "FLAGS1" => ACC_CTRLSHF, "TECLA1" => VK_RIGHT  , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goNextWord( .t. ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelPagSig  , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_NEXT   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:pageDown( .t. ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelPagPrev , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_PRIOR  , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:pageUp( .t. )}, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelIniArch , "TIPO" => "1", "FLAGS1" => ACC_CTRLSHF, "TECLA1" => VK_HOME   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goTop( .t. ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelFinArch , "TIPO" => "1", "FLAGS1" => ACC_CTRLSHF, "TECLA1" => VK_END    , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goBottom( .t. ) }, "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:curSelScrlUp  , "TIPO" => "1", "FLAGS1" => ACC_CTRLSHF, "TECLA1" => VK_UP     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:scrollUp( .t. ) }  , "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curSelScrlDown, "TIPO" => "1", "FLAGS1" => ACC_CTRLSHF, "TECLA1" => VK_DOWN   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:scrollDown( .t. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "3" }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuInsVentana , "TIPO" => "0" } ;
         }
            FOR each xMenu in ::hVentanas
       aAdd( ::aKeyCon, { "DESCRIP" => xMenu:menu, "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => codeBlockCreaVentana( self, xMenu:__enumValue() ), "WHEN" => { || ::oFuente <> nil } } )
            NEXT
   xMenu := { ;
            {                                      "TIPO" => "3" }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuVentCodAct , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "V" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:verVentana() }, "WHEN" => { || ::oFuente <> nil .AND. !empty( ::oFuente:aVentanas ) } }, ;
            {                                      "TIPO" => "3" }, ;
            ;  // Buscar
            { "DESCRIP" => hIdioma:mnuBuscar     , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:mnuBuscar     , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F5     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:dlgFind() }   , "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuIrALinea   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_F5     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:dlgGoLine( ,, .t. ) } , "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curModifiUp   , "TIPO" => "1", "FLAGS1" => ACC_ALTSHFT, "TECLA1" => VK_UP     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:modificadaUp() }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curModifiDown , "TIPO" => "1", "FLAGS1" => ACC_ALTSHFT, "TECLA1" => VK_DOWN   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:modificadaDown() }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuMovCursor  , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:curLinPrev    , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_UP     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goPrevLine( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curLinSig     , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_DOWN   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || if( ::oFuente:lActDer .OR. ::oFuente:nLine() < len( ::oFuente:aLines ) + 1, ::oFuente:goNextLine( .f. ), ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curChrPrev    , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_LEFT   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goPrevChar( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curChrSig     , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_RIGHT  , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goNextChar( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curWordPre    , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_LEFT   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goPrevWord( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curWordSig    , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_RIGHT  , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:goNextWord( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curPagSig     , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_NEXT   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:pageDown( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curPagPrev    , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_PRIOR  , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:pageUp( .f. )}, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curIniArch    , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_HOME   , "FLAGS2" => ACC_CONTROL, "TECLA2" => VK_PRIOR  , "ACCION" => { || ::oFuente:goTop( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curFinArch    , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_END    , "FLAGS2" => ACC_CONTROL, "TECLA2" => VK_NEXT   , "ACCION" => { || ::oFuente:goBottom( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curScrollUp   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_UP     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:scrollUp( .f. ) }  , "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curScrollDown , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_DOWN   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:scrollDown( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curFindUp     , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => VK_UP     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:findCursor( .t. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:curFindDown   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => VK_DOWN   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:findCursor( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "3" }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuBanderaPone, "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F4     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:bandera( .t. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuBanderaIr  , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_F4     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:bandera( .f. ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuMarcadorPon, "TIPO" => "0" }, ;
            { "DESCRIP" => "1"                   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "1" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  1, 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "2"                   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "2" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  2, 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "3"                   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "3" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  3, 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "4"                   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "4" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  4, 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "5"                   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "5" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  5, 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "6"                   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "6" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  6, 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "9"                   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "9" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  9, 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "0"                   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "0" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador( 10, 1 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "3" }, ;
            { "DESCRIP" => hIdioma:mnuMarcadorIr , "TIPO" => "0" }, ;
            { "DESCRIP" => "1"                   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "1" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  1, 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "2"                   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "2" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  2, 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "3"                   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "3" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  3, 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "4"                   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "4" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  4, 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "5"                   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "5" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  5, 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "6"                   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "6" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  6, 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "9"                   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "9" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  9, 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "0"                   , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => asc( "0" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador( 10, 2 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "3" }, ;
            { "DESCRIP" => hIdioma:mnuMarcadorBor, "TIPO" => "0" }, ;
            { "DESCRIP" => "1"                   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "1" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  1, 3 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "2"                   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "2" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  2, 3 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "3"                   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "3" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  3, 3 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "4"                   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "4" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  4, 3 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "5"                   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "5" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  5, 3 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "6"                   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "6" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  6, 3 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "9"                   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "9" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador(  9, 3 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => "0"                   , "TIPO" => "1", "FLAGS1" => ACC_ALTCTRL, "TECLA1" => asc( "0" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:marcador( 10, 3 ) }, "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "3" }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuListaFunc  , "TIPO" => "1", "FLAGS1" => ACC_ALTSHFT, "TECLA1" => asc( "F" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:listaFunciones() }, "WHEN" => { || ::oFuente <> nil .AND. !empty( ::oFuente:aFunciones ) } }, ;
            { "DESCRIP" => hIdioma:mnuListaVent  , "TIPO" => "1", "FLAGS1" => ACC_ALTSHFT, "TECLA1" => asc( "V" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:listaVentanas() } , "WHEN" => { || ::oFuente <> nil .AND. !empty( ::oFuente:aVentanas ) } }, ;
            {                                      "TIPO" => "3" }, ;
            ;  // Texto
            { "DESCRIP" => hIdioma:mnuTexto      , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:mnuComentario , "TIPO" => "1", "FLAGS1" => ACC_CTRLSHF, "TECLA1" => asc( "C" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:comentario() }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuMayusMinus , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "C" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:changeCase() }, "WHEN" => { || ::oFuente <> nil } }, ;
            { "DESCRIP" => hIdioma:mnuDlgMayusMi , "TIPO" => "1", "FLAGS1" => ACC_ALTSHFT, "TECLA1" => asc( "C" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:selectCase() }, "WHEN" => { || ::oFuente <> nil } }, ;
            {                                      "TIPO" => "3" }, ;
            ;  // Depurador (debugger)
            { "DESCRIP" => hIdioma:mnuDebugger   , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:mnuRun        , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F6     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::ejecutar() }          , "WHEN" => { || ::nDbgStatus == 0 } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuCompilar   , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F9     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::compilar( .f. ) }     , "WHEN" => { || ::nDbgStatus == 0 } }, ;
            { "DESCRIP" => hIdioma:mnuReconstruir, "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_F9     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::compilar( .t. ) }     , "WHEN" => { || ::nDbgStatus == 0 } }, ;
            { "DESCRIP" => hIdioma:mnuDebugger   , "TIPO" => "4", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { | oItm | oItm:setCheck( !oItm:lChecked ) }, "WHEN" => { || ::nDbgStatus == 0 }, "VARIABLE" => "_OITMDBG" }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuContinuar  , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_F8     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Seguir" ), ::nDbgStatus := 1 }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            { "DESCRIP" => hIdioma:mnuStep       , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F8     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Paso" ), ::nDbgStatus := 1 }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            { "DESCRIP" => hIdioma:mnuRutina     , "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_F9     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Trace" ) }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            { "DESCRIP" => hIdioma:mnuSigrutina  , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_F9     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Siguiente" ) }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            { "DESCRIP" => hIdioma:mnuHastaCursor, "TIPO" => "1", "FLAGS1" => ACC_CONTROL, "TECLA1" => VK_F8     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Línea" + str( ::oFuente:nLine, 6 ) + ::oFuente:cNomSinPath ) }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuBreakPoint , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_F10    , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oFuente:breakPoint() }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            { "DESCRIP" => "alt&D()"             , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "D" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "altD()" ) }, "WHEN" => { || ::nDbgStatus > 0 } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuVelocidad  , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Velocidad" ) }, "WHEN" => { || ::nDbgStatus > 0 } }, ;
            { "DESCRIP" => hIdioma:mnuAnimado    , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Animado" ) }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuVariables  , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_F6     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Variables" ) }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            { "DESCRIP" => hIdioma:mnuWorkAreas  , "TIPO" => "1", "FLAGS1" => ACC_SHIFT  , "TECLA1" => VK_F6     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Areas" ) }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            { "DESCRIP" => hIdioma:mnuVisorSets  , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Sets" ) }, "WHEN" => { || ::nDbgStatus == 2 } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuTerminar   , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => asc( "X" ), "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oDdeCli:execute( "Terminar" ) }, "WHEN" => { || ::nDbgStatus > 0 } }, ;
            {                                      "TIPO" => "3" }, ;
            ;  // Utilerías
            { "DESCRIP" => hIdioma:mnuUtilerias  , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:mnuConfig     , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::config() }            , "WHEN" => nil }, ;
            {                                      "TIPO" => "3" }, ;
            ;  // Menú Ventanas
            { "DESCRIP" => hIdioma:mnuWindows    , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:mnuVentVert   , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:tile() }         , "WHEN" => { || len( ::oWnd:oWndClient:aWnd ) > 0 } }, ;
            { "DESCRIP" => hIdioma:mnuVentHoriz  , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:tile( .t. ) }    , "WHEN" => { || len( ::oWnd:oWndClient:aWnd ) > 0 } }, ;
            { "DESCRIP" => hIdioma:mnuVentCascada, "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:cascade() }      , "WHEN" => { || len( ::oWnd:oWndClient:aWnd ) > 0 } }, ;
            { "DESCRIP" => hIdioma:mnuVentSiguien, "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_RIGHT  , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::ventanaSig() }        , "WHEN" => { || len( ::oWnd:oWndClient:aWnd ) > 1 } }, ;
            { "DESCRIP" => hIdioma:mnuVentPrevia , "TIPO" => "1", "FLAGS1" => ACC_ALT    , "TECLA1" => VK_LEFT   , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::ventanaAnt() }        , "WHEN" => { || len( ::oWnd:oWndClient:aWnd ) > 1 } }, ;
            {                                      "TIPO" => "2" }, ;
            { "DESCRIP" => hIdioma:mnuArreglaIco , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:arrangeIcons() } , "WHEN" => { || len( ::oWnd:oWndClient:aWnd ) > 0 } }, ;
            { "DESCRIP" => hIdioma:mnuIconizaTodo, "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:iconizeAll() }   , "WHEN" => { || len( ::oWnd:oWndClient:aWnd ) > 0 } }, ;
            { "DESCRIP" => hIdioma:mnuCerrarTodo , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || ::oWnd:closeAll() }     , "WHEN" => { || len( ::oWnd:oWndClient:aWnd ) > 0 } }, ;
            {                                      "TIPO" => "3" }, ;
            ;  // Menú Ayuda
            { "DESCRIP" => hIdioma:mnuAyuda      , "TIPO" => "0" }, ;
            { "DESCRIP" => hIdioma:mnuAyuda      , "TIPO" => "1", "FLAGS1" => ACC_NORMAL , "TECLA1" => VK_F1     , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || shellExecute( , "open", ::cDir + "ayuda\index.htm" ) } , "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:mnuAcercaDe   , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || acercaDe( .t.,,,,,::cNomReg ) }     , "WHEN" => nil }, ;
            { "DESCRIP" => hIdioma:mnuNews       , "TIPO" => "1", "FLAGS1" => nil        , "TECLA1" => nil       , "FLAGS2" => nil        , "TECLA2" => nil       , "ACCION" => { || shellExecute( , "open", ::cDir + "ayuda\quehaydenuevo.htm" ) }, "WHEN" => nil }, ;
            {                                      "TIPO" => "3" } ;
         }

   nLen := len( ::aKeyCon )
   aSize( ::aKeyCon, nLen + len( xMenu ) )
   aEval( xMenu, { | x, y | ::aKeyCon[ nLen + y ] := x } )

   aFill( aSize( ::hKeyDown:aAltCtrl  , TOTAL_VKEYS ), .f. )
   aFill( aSize( ::hKeyDown:aShiftCtrl, TOTAL_VKEYS ), .f. )
   aFill( aSize( ::hKeyDown:aCtrl     , TOTAL_VKEYS ), .f. )
   aFill( aSize( ::hKeyDown:aShift    , TOTAL_VKEYS ), .f. )
   aFill( aSize( ::hKeyDown:aTecla    , TOTAL_VKEYS ), .f. )
   aFill( aSize( ::hKeyDown:aKeyDown  , TOTAL_VKEYS ), .f. )
   MENU ::oMenu 2007
      FOR each hMenu in ::aKeyCon
         SWITCH hMenu:tipo
            CASE "0" // menuItem que inicia menú
               menuItem hMenu:descrip
               menu
               EXIT
            CASE "1" // menuItem normal
               menuAddItem( hMenu:descrip + if( hMenu:flags1 == nil, "", armaKeyFlags( hMenu ) ),,,, ;
                           hMenu:accion,,,,, hMenu:flags1, hMenu:tecla1,,, hMenu:when )
               EXIT
            CASE "2" // separador
               separator
               EXIT
            CASE "3" // endMenu
               endMenu
               EXIT
            CASE "4" // menuItem normal asignado a una variable
               hb_execFromArray( self, hMenu:variable, ;
                           {  menuAddItem( hMenu:descrip + if( hMenu:flags1 == nil, "", armaKeyFlags( hMenu ) ),,,, ;
                              hMenu:accion,,,,, hMenu:flags1, hMenu:tecla1,,, hMenu:when ) } )
               EXIT
            CASE "5" // menuItem que inicia menú asignado a una variable
               menuItem hMenu:descrip
               hb_execFromArray( self, hMenu:variable, { menuBegin() } )
               EXIT
         END SWITCH

         // Guarda configuración del teclado
         IF hMenu:tipo $ "x 14"
            FOR each cCont in "12"
               IF hMenu:tipo == "1" .AND. cCont == "1"
                  loop
               ENDIF
               IF hMenu[ "TECLA" + cCont ] <> nil
                  SWITCH hMenu[ "FLAGS" + cCont ]
                     CASE ACC_ALT + ACC_SHIFT
                        ::hKeyDown:hAltShift[ hMenu[ "TECLA" + cCont ] ] := hMenu:accion
                        ::hKeyDown:aAltShift[ hMenu[ "TECLA" + cCont ] ] := .t.
                     CASE ACC_CONTROL + ACC_ALT
                        ::hKeyDown:hAltCtrl[ hMenu[ "TECLA" + cCont ] ] := hMenu:accion
                        ::hKeyDown:aAltCtrl[ hMenu[ "TECLA" + cCont ] ] := .t.
                     CASE ACC_CONTROL + ACC_SHIFT
                        ::hKeyDown:hShiftCtrl[ hMenu[ "TECLA" + cCont ] ] := hMenu:accion
                        ::hKeyDown:aShiftCtrl[ hMenu[ "TECLA" + cCont ] ] := .t.
                        EXIT
                     CASE ACC_CONTROL
                        ::hKeyDown:hCtrl[ hMenu[ "TECLA" + cCont ] ] := hMenu:accion
                        ::hKeyDown:aCtrl[ hMenu[ "TECLA" + cCont ] ] := .t.
                        EXIT
                     CASE ACC_SHIFT
                        ::hKeyDown:hShift[ hMenu[ "TECLA" + cCont ] ] := hMenu:accion
                        ::hKeyDown:aShift[ hMenu[ "TECLA" + cCont ] ] := .t.
                        EXIT
                     DEFAULT
                        IF hMenu[ "TIPO" ] == "x"  // Teclas espaciales que no entran a keychar, solo a keydown
                           ::hKeyDown:hKeyDown[ hMenu[ "TECLA" + cCont ] ] := hMenu:accion
                           ::hKeyDown:aKeyDown[ hMenu[ "TECLA" + cCont ] ] := .t.
                        ELSE
                           ::hKeyDown:hTecla[ hMenu[ "TECLA" + cCont ] ] := hMenu:accion
                           ::hKeyDown:aTecla[ hMenu[ "TECLA" + cCont ] ] := .t.
                        ENDIF
                        EXIT
                  END SWITCH
               ENDIF
            NEXT
         ENDIF
      NEXT
   ENDMENU
   ::oMenu:oIde := self

return ::oMenu

static function codeBlockCreaVentana( self, value )
return { || ::oFuente:creaVentana( value ) }
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con un programa de fivewin en una maquina virtual

Postby quique » Fri Apr 12, 2013 6:17 pm

Esta es solo la definición de la clase editor() para que me digas que es lo que necesitarias ver

Code: Select all  Expand view

class editor from tTxtEdit
   data aAtThis               // Caracteres que indican color a partir de ahí hasta el final de la línea
   data aBanderas             // Lísta de líneas marcads para localización rápida (F4) (las imágenes se guardan en ::hBmps)
   data aMarcadores           // Lista de marcadores  ( 0 - 9 ) (las imágenes se guardan en ::hBmps)
   data cBegBlock             // Caracteres que indican inicio de bloque
   data cEndBlock             // Caracteres que indican final de bloque

   data aFunciones            // Arreglo con la lista de funciones del archivo
   data aVentanas             // Arreglo con las ventanas que se tienen en el archivo

   data cNomSinPath           // Nombre del archivo sin el directorio
   data cString               // Lista de caracteres que indícan cadena de caracteres


   data hBmps                 // Hash con los bitmaps que se tienen cargados en memoria
   data hSelect               // Información de la selección
   data lHScroll
   data lMarco          init .t. hidden   // Indica si se pina el marco de la línea actual
   data lReadOnly             // Solo lectura

   data nAnchoMarco           // Ancho del marco que rodea la línea del cursor
   data nClickDown      init 0   hidden   // Contador de clicks para la selección al click del mouse
   data nCharLeft             // Primer caracter visible en la pantalla
   data nClrAtThis            // Caracteres que indican color a partir de ahí hasta el final de la línea
   data nClrBAtThis           // Color de fondo de los comentarios a partir de este lugar (//, &&)
   data nClrBBegin            // Color de fondo de los comentarios señalados como principio de línea (*)
   data nClrBComent           // Color de fondo de los comentarios de inicio final ( /* - */ )
   data nClrComent            // Color del texto de los comentarios de inicio final ( /* - */ )
   data nClrBNumber           // Color de fondo de los numeros
   data nClrBOperator         // Color de fondo de los operadores
   data nClrBString           // Color de fondo de las cadenas de caracteres
   data nClrBTok1             // Color del primer juego de palabras resaltadas
   data nClrBTok2             // Color del segundo juego de palabras resaltadas
   data nClrBTok3             // Color del tercer juego de palabras resaltadas
   data nClrDbg               // Color de la línea que indica donde se encuentra el depurador
   data nClrEOF,nClrEOFBak    // Color del EOF
   data nInsert               // Tiene que ver con el tipo de selección, no recuerdo para que
   data nScrCol               // Posición del cursor en el renglón de acuerdo a la ventana
   data nVisChars             // Número de caracteres visibles por línea

   data nUndo           init 1   // contador de las aplicaciones de undo y redo

   data oIde                  // Referencia al objeto ide (programa principal)
   data oTab                  // Objeto tabulador al que pertenece para la selección de pestañas

   classdata nTipoSel   init SELECCION_NORMAL   // Tipo de selección al utilizar el mouse
   classdata nTipoCpy                           // Tipo de selección al momento del copy-paste

   CLASSDATA lRegistered AS LOGICAL

   method new  constructor
   method addUndo
   method copy
   method default
   method delBlock
   method drawLine
   method find
   method delete
   method dlgFind
   method dlgFindOk
   method dlgGoLine
   message goUp   method goPrevLine //inline ::goPrevLine( , lUndo )
   message goDown method goNextLine //inline ::goNextLine( , lUndo )
   method initiate
   method insLine
   method load( cTxtFile )
   method nGetTokenColor
   method nLine inline ::nLineTop + ::nLineRow
   method paint
   method gotFocus
   method keyChar
   method keyDown
   method lButtonDown
   method mouseMove
   method lButtonUp  //inline ::super:lButtonUp(), if( ::nBlkStartRow == 0, ::setSelectOff(), )
   method goPrevLine
   method goNextLine
   method goPrevChar
   method goNextChar
   method goBeginLine
   method goEndLine
   method goNextWord( lSelect )
   method goPrevWord( lSelect )
   method toggleInsert
   method reSize
   method setFont( oFont )    inline ::super:setFont( oFont ), ::nVisChars := int( ( ::nWidth() - getSysMetrics( SM_CXVSCROLL ) ) / ::nChrWidth )
   method setText
   method getText
   method goBottom
   method goTop
   method goLine
   method goTo( nLine, nCol, lUndo )   inline ::goLine( nLine, nCol, lUndo )
   method pageUp
   method pageDown
   method paste
   method joinLine
   method splitLine
   method saveToFile
   method reDo
   method unDo

   // Métodos mios
   delegate aTxtFind    to oIde  // Arreglo con el historial de textos buscados
   delegate aTxtRepl    to oIde  // Arreglo con el historial de textos de reemplazos
   delegate hKeyDown    to oIde  // Configuración para teclas en keyDown
   delegate lActDer     to oIde  // Permite mover el cursor más alla del último caracter de la línea
   delegate lBackUp     to oIde  // automatic .BAK files
   delegate lEspacios   to oIde  // Guardar espacios al final de la línea
   delegate lFndCase    to oIde  // Indica si la busqueda difrencia entre mayusculas y minúsculas (.t.) o no (.f.)
   delegate lTab        to oIde  // Indica si la tecla tabulador existe o se guarda como espacios
   delegate nBanderas   to oIde  // Número máximo de banderas (::aBanderas)
   delegate nDelLines   to oIde  // Max. number of deleted lines to store

   method agredaPostEOF
   method agregaVentana virtual
   method ajustaComen   hidden   // Se usa para reajustar los comentarios de bloque cuando se borra el final (*/)
   method bandera
   method borraMarco()  inline hideCaret( ::hWnd ), ::lMarco := .f., ::drawLine( ::nLine(), ::nLineRow + 1 ), ::drawLine( ::nLine() + 1, ::nLineRow + 2 ), ::lMarco := .t., showCaret( ::hWnd )
   method cambioEditor
   method cargaConfig
   method cerrandoVentana
   method cerrar        inline ::oWnd:end()
   method changeCase    // Cambia el texto seleccionado entre mayúsculas y minúsculas
   method cLinea( nLinea ) inline if( nLinea == nil, nLinea := ::nLine(), ), if( nLinea > len( ::aLines ), "", if( ::lTab, strTran( ::aLines[ nLinea, aLines_texto ], chr( VK_TAB ), space( ::nTabLen ) ), ::aLines[ nLinea, aLines_texto ] ) )
   method clipBoard
   method colocaMouse
   method comentario
   method creaVentana( hVentana )   inline ::cambioEditor( editorPrg(), "creaVentana", hVentana )
   method ctrl_insert
   method create        inline ::nStyle := nOr( /*ES_AUTOHSCROLL, */WS_CHILD, WS_VISIBLE, WS_BORDER, WS_VSCROLL, WS_HSCROLL ), ::super:create()
   method delBanderas
   method drawSelect    // Pinta texto seleccionado (si lo hay)
   method edit_insert
   method edit_return
   method edit_tabulador
   method endPaint      inline ::super:endPaint(), ::getDC()
   method findCursor
   method goBeginChar
   method goBeginWindow( lSelect )
   method goEndWindow
   method hScrAdjust
   method iconoLinea    // Devuelve el manejador del bitmap de la imágen mostrada al inicio de la línea
   method llendaDespues
   method lSelect       inline ::hSelect <> nil .AND. ::hSelect:nTipo <> SELECCION_APAGADA
   method marcador
   method modificadaUp
   method modificadaDown
   method nBlkStart     inline if( ::hSelect == nil, 0, 1 )
   method nBlkEndRow    inline if( ::hSelect == nil, 0, 1 )
   method nChar         inline ::nCharLeft + ::nLineCol
   method nChrWidth     inline ::getWidth( "B" )
   method pageLeft
   method pageRight
   method pintaComen    hidden   // Se usa para encontrar el final de un comentario de bloque cuando se escribe el inicio (/*)
   method pintaMarco()  inline setTextColor( ::hDC, CLR_GRAY ), frameDot( ::hDC, ::nLineRow * ::nChrHeight, 1, ::nLineRow * ::nChrHeight + ::nChrHeight, ::nAnchoMarco )
   method print
   method rButtonDown
   method refresh       inline ::paint()
   method repetidos( bAction ) inline if( ::nLastKey == bAction, ::nPressDown++, ( ::nPressDown := 1, ::nLastKey := bAction ) )
   method scrollDown
   method scrollUp
   method selectCase    // Dialogo para seleccionar mayúsculas o minúsculas
   method selPalabra
   method setFocus      inline ::oWnd:setFocus(), ::super:setFocus()
   method setMsgBar( cTxt )   inline ::oIde:oWnd:oBottom:oMsgBar:setText( cTxt )
   method setSelectOff  inline ::nInsert := SELECCION_APAGADA, ::setSelectOn( .f., SELECCION_APAGADA ), ::drawSelect()
   method setSelectOn
   method shift_delete
   method showCoords    inline ::oIde:oPos:setText( "L: " + lTrim( str( ::nLine() ) ) + " C: " + lTrim( str( ::nLineCol + 1 ) ) )
   method tipoArchivo   inline "texto"
endClass
 
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con un programa de fivewin en una maquina virtual

Postby quique » Sat Apr 13, 2013 4:12 am

Se que soy malo para aislar problemas, pero bueno, después de varias horas (si horas) aislando el problema, pro fin tengo un ejemplo con el cual se reproduce únicamente en la máquina virtual, porque en la máquina real no falla, y no tiene nada que ver con mi clase ni con tTxtEdit.

Se tienen que cumplir varias circunstancias, para reproducirlo:

1. Al abrirse la ventana dal click en la opción venta
2. Dar click en Utilerías\mensaje

con eso se bloquea el programa.

- Antes de abrir la ventana hija (punto 1) muestra el mensaje, para reproducirlo tiene que abrirse la ventana hija
- La ventana hija debe estar maximizada, si se quita lo maximizado mostrará el mensaje
- Si en el código se quita la opción 2007 al menú funciona sin problema, no se bloquea
- Si se cambia la opción Mensaje al primer nivel también funciona.

Code: Select all  Expand view

#include "FiveWin.ch"

function main()
   local oMenu, oWnd
   menu oMenu 2007
      menuItem "Ventana"   action ventana( oWnd )
      menuItem "Utilerías"
         menu
            menuItem "Mensaje" action msgInfo( "Hola" )
         endMenu
   endMenu

   define window oWnd mdi menu oMenu
   activate window oWnd
return nil

//-----------------------------------------------------------------------------------------------------------------------------//

function ventana( oWndMain )
   local oWnd
   define window oWnd of oWndMain mdichild
   activate window oWnd maximized
return nil
 
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con un programa de fivewin en una maquina virtual

Postby Antonio Linares » Sat Apr 13, 2013 6:55 am

Quique,

Probado en XP virtualizado, funciona. La versión que uso de VirtualBox es 4.2.2 r811494

Que versión de VirtualBox usas ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con un programa de fivewin en una maquina virtual

Postby Antonio Linares » Sat Apr 13, 2013 10:15 am

Quique,

En Windows 7 tampoco falla. Será tu versión de VirtualBox ?

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con un programa de fivewin en una maquina virtual

Postby quique » Sat Apr 13, 2013 12:48 pm

4.2.10 r.84104 con Guest Additions y Windows 7 Professional con Service Pack 1, y eso que comento fue el problema, con mi programa comprobé quitando el maximizado (cosa que no dejé porque en la práctica no le puedo decir a los usuarios que si usan maquina virtual no maximicen las ventanas) y terminé quitando el 2007 al menú.
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 55 guests