Re: Añadir Popup Menu A Text Box
Citar:
Creo que no me he explicado bien, en efecto el control textbox no tiene la propiedad redo ni undo, pero en tiempo de ejecución al hacer ckik con el boton derecho tienes un menu con redo undo copy paste etc. (en gb.qt) en gb.gtk ya no tienes redo y undo.
Sí te has explicado bien. Efectivamente, hasta hace algunas versiones el control TextBox del componente gb.qt sí tenía incorporados los métodos Redo y Undo. Parece que fueron eliminados en las versiones más actuales, con lo que el estado es un poco inconsistente porque como bien dices aún aparece el menú contextual con dichas opciones; también puedes hacer Undo/Redo pulsando Control + Z y Control + Mayusculas + Y.
Citar:
Mi pregunta era que si al menú en tiempo de ejecucion se le podria añadir un nuevo menu (sin que este nuevo menu substituya al menú que sale por defecto en tiempo de ejecucion) , para aprovechar esas propiedades sin tener que implementar código para redo y undo.
No conozco que exista ninguna característica para mezclar menús. Pero en primer lugar el problema sería como acceder desde el código a ese menú contextual. Me parece que la existencia de ese menú muestra que hay algo que los desarrolladores olvidaron manejar desde el componente gb.qt. Creo que dicho menú es provisto directamente por QT y que no hay una forma de acceder a el desde el código de
gambas.
De todos modos, esas opciones Undo y Redo del menú contextual (o la alternativa de pulsar las combinaciones de teclas correspondientes) tienen un par de problemas:
- Las opciones del menú están en inglés y no las puedes traducir si desde gambas no tienes acceso a dicho menú.
- El funcionamiento de esas opciones me parece un poco extraño, ¿las probaste? No está claro cuál es la unidad de texto que permite Deshacer/Rehacer ¿caracteres, palabras, líneas? Pruébalo y verás de qué estoy hablando. Me parece que funciona con un timer, es decir toma el contenido del TextBox cada cierto tiempo (lo que me parece una locura).
Entonces, podrías crear tu propio menú con todas las opciones que necesites y escribir los correspondientes manejadores de eventos para las opciones del menú. En el caso de las opciones Deshacer/Rehacer escribir en sus manejadores de evento algo así (requiere gb.desktop):
Para simular que se pulsan las combinaciones de teclas Control + U y Control + Mayusculas + Y.
Pero me parece que la solución pasa por que crees tu propio menú contextual con todas las opciones que necesitas e implementes la funcionalidad para ellas.
Para tener la características de Deshacer/Rehacer primero debes definir a qué nivel quieres permitir tales operaciones, por ejemplo:
* Por caracter (deberías usar el evento Keypress para capturar cada caracter)
* Por palabra (deberías usar el evento Change para capturar cada palabra)
* Por línea (me parece que tu caso no tiene sentido)
Luego, todo lo que necesitas es un array de tipo String donde guardar el contenido del TextBox, que recorrerás hacia adelante o hacia atrás dependiendo de la opción elegida en el menú (o de la combinación de teclas pulsada).