PDA

Ver la Versión Completa : Uso del Stringgrid


rruffino
05-10-2012, 14:45:51
Hola gente, buenas a todos.
Estoy necesitando utilizar el componente Stringgrid para cierto propósito pro hay tareas que necesito hacer con este componente que no puedo estar haciendo y son:

- Al pasar el foco de una celda a otra, que la celda destino no quede seleccionada (pintada) sino que quede con el cursor parpadeando como para escribir.

- Poder añadir filas cuando salgo de una celda y dejar el foco de la misma manera que en el punto anterior en la primer columna.

- No permitir editar o escribir en una columna en particular.

Desde ya muy agradecido por su ayuda. Saludos!!!

Casimiro Notevi
05-10-2012, 14:50:16
Hola rruffino, ¿has hecho una búsqueda por cada uno de los apartados?, me parece que son cosas que se han tratado anteriormente, a ver si lo encontramos... ;)

rruffino
05-10-2012, 17:31:33
Hola, gracias por la respuesta. He encontrado un par de cosas y medianamente estoy logrando lo que quiero, ahora el inconveniente que tengo es que cuando le cargo la primer fila de datos (en realidad es la segunda fila, la primera la uso fija para los titulos) lo que me pasa es que no puedo editar mas la grilla, es como si quedara deshabilitada, ya revise todo el código y no encuentro nada, probe luego de ingresar los datos hacer un refresh o un repaint pero no logro ni siquiera seleccionar la fila, siempre me queda seleccionada la de titulos.
Gracias nuevamente

ecfisa
05-10-2012, 18:50:19
ahora el inconveniente que tengo es que cuando le cargo la primer fila de datos (en realidad es la segunda fila, la primera la uso fija para los titulos) lo que me pasa es que no puedo editar mas la grilla, es como si quedara deshabilitada

Hola rruffino.

¿ Podrías poner el código mediante el cuál cargas la primera fila de datos ?

Saludos :)

rruffino
06-10-2012, 02:05:53
Hola ecfisa, gracias por tu respuesta.

El código en el evento form create es:
StringGrid_imputacion.Cells[0,0]:='Nº Cuenta:';
StringGrid_imputacion.Cells[1,0]:='Nombre de la Cuenta:';
StringGrid_imputacion.Cells[2,0]:='Descripción de la Compra:';
StringGrid_imputacion.Cells[3,0]:='Importe:';

Y el código en el evento onclick del boton que carga el dato:
fila:=StringGrid_imputacion.RowCount;
StringGrid_imputacion.Cells[0, fila]:=Edit_imp_cod.Text;
StringGrid_imputacion.Cells[1, fila]:=Label_imp_nombre.Caption;
StringGrid_imputacion.Cells[2, fila]:=Edit_imp_desc.Text;
StringGrid_imputacion.Cells[3, fila]:=FormatCurr('#########0.00', sCurrencyEdit_imp_importe.Value);
StringGrid_imputacion.RowCount:=fila +1;


Lo que he probado es programar el evento ondblclick para que cuando haga doble clik me tire un mensaje, antes de presionar el boton que carga el dato me muestra el mensaje, despues de apretar el boton no, es como si se deshabilitara la grilla.

Saludos, Román.-

Casimiro Notevi
06-10-2012, 02:12:00
¿Qué problema tienes en ese código?

ecfisa
06-10-2012, 04:06:29
Hola rrufino.

Proba agregando esta línea al evento OnCreate del form:

StringGrid_imputacion.Options:= StringGrid_imputacion.Options + [goEditing];

Si era el problema y ya te permite escribir, esa opción también es configurable desde el Object Inspector.

Saludos.

rruffino
09-10-2012, 13:10:43
Hola, gracias por sus respuestas. El problema sigue estando, antes de ejecutar el codigo del boton, puedo editar la grilla, probe con el código que me pasó en la respuesta anterior, pero no me deja editarla, es mas no me deja ni siquiera seleccionar otra fila que no sea la primera, y por lo menos lo necesito para aunque sea seleccionar y eliminar una fila, con eso me alcanzaria, pero no hay forma. He probado de poner distintos stringgrids pero nada.
Desde ya nuevamente gracias por las respuestas.

ecfisa
09-10-2012, 18:51:06
Hola.

Hice una prueba con el código que nos mostraste y agregando la línea que te sugerí permite editar las celdas, antes y despues de ejecutar el código del boton. A sCurrencyEdit_imp_importe lo declaré como un edit haciendo luego la correspondiente conversión para la función FormatCurr.

Si no hay otro código involucrado, no encuentro motivo del comportamiento que mencionas. Te adjunto la prueba que realizé.

Saludos. :)

rruffino
09-10-2012, 19:21:39
Hola ecfisa, nuevamente gracias por tu respuesta. Viendo tu codigo y lo que tengo yo, caigo en la cuenta que el problema lo ocasiona cuando guardo los datos en la grilla y le vuelvo a dar el foco al editor para seguir cargando datos para pasarlo a la grilla. Si no le doy el foco al editor puedo editar la grilla normalmente. Ahora, como es posible? como podría hacer para seguir dandole el foco al editor y al hacer click en la grilla que se active para su manejo??
Saludos!!

ecfisa
09-10-2012, 20:06:39
Hola.


el problema lo ocasiona cuando guardo los datos en la grilla y le vuelvo a dar el foco al editor para seguir cargando datos

Intento comprender los pasos que estás siguiendo, aunque no sé si lo estoy logrando. Por que si al finalizar el código, le pasas el foco a otro componente, igualmente el StringGrid queda activo para insertar datos luego de hacer click sobre él.

Por ejemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
fila: Integer;
begin
fila:=StringGrid_imputacion.RowCount;
StringGrid_imputacion.Cells[0, fila]:=Edit_imp_cod.Text;
StringGrid_imputacion.Cells[1, fila]:=Label_imp_nombre.Caption;
StringGrid_imputacion.Cells[2, fila]:=Edit_imp_desc.Text;
StringGrid_imputacion.Cells[3, fila]:=FormatCurr('#########0.00', StrToFloat(sCurrencyEdit_imp_importe.Text));
StringGrid_imputacion.RowCount:=fila + 1;
Edit_imp_cod.SetFocus; // <- Pasar el foco
end;


Saludos.

rruffino
09-10-2012, 20:17:05
Exacto ecfisa, asi le doy el foco al editor, y ahi es donde deja de responderme la grilla como si estuviera deshabilitada, que por mas que le haga click encima, no puedo editar ni seleccionar ninguna fila.
Saludos!

ecfisa
09-10-2012, 20:46:56
Hola.

Pero entonces debe haber algún otro código interfiriendo, por que a la prueba que te adjunté le agregué la linea que te menciono en el mensaje anterior y me permite editar el StringGrid sin problemas (previo click sobre él logicamente).

Saludos.