bloquear menues como el IDE de Gambas - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html) +--- Tema: bloquear menues como el IDE de Gambas (/thread-1771.html) |
bloquear menues como el IDE de Gambas - alberto-moyano - 28-08-2024 Hola gente, no sé si observaron que el IDE de gambas al momento de generar un empaquetado bloquea los menúes, hay un mensaje (abajo a la derecha que nos dice cuanto le falta en tiempo), este concepto me parece muy útil, escribí este código para mi aplicación (no es exactamente lo mismo) Código: ' Deshabilitar todos los menús y submenús llamo a las funciones al inicio y cierre de las otras funciones, y anda, pero solo unos segundos y luego los menúes vuelven a estar disponibles, indudablemente mi enfoque es errado o me falta algo. Cuál es mi caso, tengo en varios menúes con funciones [1] que se ejecutan en un TerminalView y la intención es no tener acceso al resto de las funciones, mientras alguna se ejecuta. Por donde van los tiros... pensé en la captura del evento, pero no estoy seguro. Gracias de antemano [1] compilaciones con LuaLaTeX, LaTeXML y Pandoc, utilizar TerminalView me da mejor control (comparado con ejecutar desde Shell) ya que accedo en forma directa al logfile del compilador que queda en la TerminalView. Actualización del estado de la cuestión Pude entender que pasa, la función DesbloquearMenus se ejecuta luego de ejecutar las instrucciones en la terminal, pero no sigue el estado del proceso de la instrucción en sí (en este caso el compilador de LaTeX, trabajando en back). Veo que por acá vienen los tiros, veré de hacer algunas pruebas. Esta es una de las tantas funciones adonde pretendo aplicar el bloqueo de menues Código: Public Sub menuPDFlibro_Click() 'generamos el PDF libro RE: bloquear menues como el IDE de Gambas - Shordi - 28-08-2024 Tengo hechas cosas parecidas y lo solucioné con un flag. Declara una variable booleana pública en fmain y que los menús se activen o desactiven dependiendo de ella. La instrucción que cambie el estado de los menús ha de estar siempre, si es posible, en el fMain, es decir se desactiva, se llaman a las funciones y se activan. Sin embargo el que sea pública permite cambiar ese estado desde cualquier función o subfunción que lo necesite. Saludos RE: bloquear menues como el IDE de Gambas - tincho - 28-08-2024 Podes bloquear el objeto, de esta manera evitas que se generen eventos, luego lo desbloqueas. Código: ' Bloqueo, no mas eventos de FMain.menuArchivo RE: bloquear menues como el IDE de Gambas - alberto-moyano - 28-08-2024 Gracias Shordi, hice la prueba y obtengo los mismos resultados que con mi código (se deshabilita unos segundos y luego se habilitan), el problema está (ahora con este último ejercicio lo entendí mejor) en que necesito tomar control sobre el proceso que esta corriendo en TerminalView1, estoy haciendo unas pruebas leyendo el estado de la terminal (TerminalView.Read), después cuento como me fue. PD: latexmk es un script en Perl que analiza la cabecera del archivo latex y automatiza cuantas vueltas de compilación se necesitan, léase cuantas veces compilar el mismo archivo tex con diferentes archivos auxiliares (en función de su complejidad, por ejemplo los diferentes índices [autor, onomástico, bibliográfico, etc.]), es por eso que no se puede predefinir cuanto dura la compilación. Gracias Tincho, haré algunas pruebas y cuento Pude solucionar mi problema [1], es un parche, pero logra su objetivo, TerminalView1 tiene ahora propiedad Enabled = False, es un parche mientras no pueda saber como tomar el control de los procesos dentro de la terminal. [1] el problema radicaba en que si en la terminal estaba corriendo una compilación, la llamada a cualquier otra función que necesitara la terminal, bloqueaba el programa, ahora --y sigo sin entender porque-- al tener TerminalView.Enabled = False, las funciones se ponen en cola, quiero decir, mientras compila un archivo, ejecuto otras funciones que necesitan la terminal y estas se ejecutan a medida que van terminando los procesos. RE: bloquear menues como el IDE de Gambas - Shordi - 29-08-2024 Se me ocurren dos cosas que puedes hacer dependiendo de si esos procesos deben interactuar con el resto del programa mientras se ejecutan o no. Si no deben interactuar utiliza un fork. Es lo más parecido a la multitarea que tiene gambas y funciona bastante bien. Si deben interactuar, utiliza la técnica del flag por presencia de fichero. Creas un fichero al inicio del proceso, y con un timer compruebas si sigue existiendo. Cuando el proceso termine, que el script del mismo se encargue de borrar el fichero y el timer detectará eso y reactivas los menús entonces. Más elegante sería utilizar esa misma técnica vigilando el fichero con la clase Watch Si te vale alguna de las ideas, me sentiré muy bien. |