![]() |
Cita:
Bueno, este último no lo he probado. // Saludos |
Bueno, he hecho unas pruebas y el código de Román funciona bien :). Me he encontrado con un problema añadido, que ya está solucionado, cuando pulsaba enter sobre una celda para editarla, se quedaba el texto seleccionado, así que si intentaba teclear algo... se perdía lo que había. Un mal menor que ya está solucionado.
Escafandra, el código que has puesto creo que necesita algo más que no has puesto, me da error en la línea:
Dice que no sabe qué es 'Tipo'. Hay otra propiedad, IType, o algo así, será esa la que hay que poner, ¿no? |
Ciertamente no había probado con el evento OnSelectCell que proponía Casimiro. Claro, el problema está en el evento. Cuando pulsamos Shift está pulsado constantemente, pero cuando lo simulamos lo despulsamos. Así al retroceder a una celda prohibida se simula un TAB sin Shift y se para...
Cita:
Código:
typedef struct tagINPUT {Ahora me doy cuenta de que en la unidad windows está definida la estructura y le dan el nombre de iType. Ese es el nombre que debes usar. Saludos. |
Cita:
Cita:
// Saludos |
A ver..... sigo soltando tonterías. :D
De una forma o de otra creo que mi componente heredado del stringrid funciona como tú quieres, si quieres te lo envío y le echas un vistazo, aunque aviso que tiene un rato de conversación. :) Saludos |
Hola !
Voy a tomar parte de este hilo, aunque yo no use el TStringGrid sino el StringGrid de TMS. En cualquier caso tampoco se me ha planteado todavía la necesidad de realizar la acción que comenta Casimiro. Con toda humildad, no entiendo la problemática de este hilo. He realizado pruebas muy básicas para cerciorarme de que lo que pensaba era más o menos así, y creo que he podido comprobar que si funciona como pienso. No he terminado el código pero expongo la idea. El StringGrid tiene el evento OnKeyPress en el cual puedes 'interceptar' las teclas del cursor Izquierda y Derecha. Basta con que muevas la posición Col y Row del StringGrid : StringGrid1.Col := StringGrid1.Col + 1; (o - según Der o Izq) Una vez que te posiciones, compruebas si la celda es editable o no, y si no lo es aumentas la posición de la columna. Al comprobar que llegas a la última columna y pulsas derecha, vuelves a la 1a columna pero con 1 fila más, y así sucesivamente. No veo la necesidad de utilizar la función Keyb_Event. A lo mejor me equivoco, claro está ..... P.D. Al menos en la prueba con un TStringGrid que acabo de hacer, además me funcionan las teclas del cursor 'en cierta manera' como se indica en este hilo. Hacia la derecha va bien, hasta la última columna, pero hacia la izquierda me edita cada celda antes de pasar a la celda anterior. |
Cita:
Sólo añadí una variable booleana más y añadí lo siguiente al evento KeyDown:
De esta manera al pulsar "enter" la primera vez se simula F2 y pasa a editar poniendo el cursor al final del texto que exista en la celda. La siguiente vez que se pulsa "enter" se ejecuta normalmente y "acepta" el contenido. La siguiente vez... vuelta a empezar. Cita:
Cita:
|
Cita:
Evidentemente podemos capturar en el evento OnKeyDown todas las teclas en juego (VK_TAB, VK_SHIF, VK_LEFT y VK_RIGHT) y mover el foco como tu comentas ;). PD: Veo que Casimiro comenta sus motivos. Saludos. |
A veces, las cosas más sencillas (aparentemente) son las que más tiempo llevan, se complican de una manera absurda con pequeños detalles que no terminan de quedar bien. Solucionamos un detalle y aparece otro, y así sucesivamente hasta que por fin lo tienes ¿todo? controlado.
Cuando te das cuenta, resulta que has perdido un montón de tiempo, pero es lo que tiene cuando quieres hacer algo decente. |
Cita:
Cita:
Toma en cuenta, eso sí, como menciona escafandra, que debes manejar no sólo las teclas LEFT y RIGHT sino también UP, DOWN, PRIOR, NEXT, TAB, o sea, todas las que muevan el cursor del teclado con lo cual prácticamente estás rehaciendo la lógica del movimiento y en ese punto uno se pone a pensar que la idea de Casimiro no es mala pues se termina escribiendo, quizá, menos código. // Saludos |
Al principio lo intenté controlando las teclas de flechas, y aunque parece lo más simple, sin embargo no terminaba de funcionar bien, entonces por casualidad vi que las teclas tab y shift+tab funcionaban perfectamente en la misma situación que las teclas normales no terminaban por hacer bien su cometido. Y fue cuando me dije, "pues mejor simulo que he pulsado esas teclas (tab y shift+tab) y se acabó", más fácil, me ahorro de estar controlando las otras teclas.
Ese fue el motivo. Pero si con las teclas de flechas hubiese ido bien, ese sistema es el que habría usado de primera hora. Que no digo que vaya mal, sino que no acababa por ir bien del todo, seguramente estaba haciendo algo mal, no lo sé. |
Cita:
|
Pincha en mi nombre junto al avatar y te saldrá un menú con la opción de "Enviar correo a casimiro".
|
Cita:
|
También podrías hacerlo "open source" y publicarlo aquí en este hilo o en el FTP :p
// Saludos |
Cita:
|
Cita:
Bastante completo y, como dices tú, muy adaptado para las necesidades de tus programas. Si tiene cerca de 5.000 líneas de código, así que no lo he leído entero :) Me servirá para consultar algunas cosillas, eso sí. Gracias. |
Cita:
|
Cita:
|
| La franja horaria es GMT +2. Ahora son las 18:08:01. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi