FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Colorear una fila seleccionada...
Hola foro!!!
Estoy buscando la manera de colorear una fila completa de un dbgrid, estuve buscando y no encontre nada. El tema es el siguiente, tengo un dbgrid con una serie de informacion ahora cuando hago dbl click en una fila determinada que puede ser cualquiera ahi recien se tiene que colorear la misma, se puede hacer esto de alguna manera? De antemano, Gracias!
__________________
Sebastian Ibarrola -------------------------- |
#2
|
|||
|
|||
Hola,
Mira los eventos OnDrawDataCell y OnDrawColumnCell del grid, Allí puedes colorear a tu gusto. El problema es que vas a tener que guardar el estado de la fila en algun sitio (campo) porque las filas no se pintan cuando tu quieres sino cuando el grid lo decide. O sea que tu clic debe cambiar el valor de algun campo en el dataset que hay detrás del grid para poder pintar luego segun al valor del campo. p.e. añades un campo "estado" de tipo integer, que al hacer doble clic se cambie de zero a 1.
Cordialmente, Gerard. |
#3
|
||||
|
||||
Cita:
Si he entendido bien lo que tú necesitas, el problema y lo complicado en tu caso, es que no quieres pintar filas segun un valor existente en el DBGrid, sino a medida que vas pulsando click en ellas. Para eso lo único que se me ocurre es que al pulsar doble click sobre la fila modifiques el valor de ese registro (un campo interno llamado COLOREAR, por ejemplo) y lo actives (UPDATE a TRUE). No es necesario que ese campo esté visible si no lo necesitas. Ese mismo campo es el que debes utilizar para colorear las filas del DBGrid de la forma estandard utilizando el evento OnDrawColumn.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Saludos
Ah que te refieres cuando dices que lo active???
Podrías ser mas específico, yo tengo el mismo problema no quiero depender del valor de un registro de una BD por que como la mia esta en Internet, es muy tardado, quisiera que fuera algo directo
__________________
"Los unicos que no se equivocan son aquellos que no intentan hacer algo." Iván Caballero Cano... ivanhalen77@gmail.com |
#5
|
||||
|
||||
Hola flystar, Neftalí se refiere a hagas lo siguiente:
. Crees un campo calculado "tbPintar" por Ej. y pongas la propiedad del DBGrid: Options -> dgRowSelect igual a True. . En el evento OnDblClick Pones a True tbPintar. (1) . Pintas en el evento OnDrawColumnCell. (2) (1) Código:
procedure TForm1.DBGrid1DblClick(Sender: TObject); begin tb.Edit; tbPintar.Value:= True; end; Código:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected in State then with DBGrid1 do begin if tbPintar.Value then // color azul, fondo blanco begin Canvas.brush.Color:= clBlue; Canvas.Font.Color:= clWhite; end else // color por defecto del DBGrid begin Canvas.Brush.Color:= clWindow; Canvas.Font.Color:= clBlack; end; DefaultDrawColumnCell(Rect, DataCol, Column, State); // pintar end; end;
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 31-07-2010 a las 22:51:06. |
#6
|
||||
|
||||
Muchas Gracias.
Muchas Gracias por la respuesta, es una excelente slución!
__________________
"Los unicos que no se equivocan son aquellos que no intentan hacer algo." Iván Caballero Cano... ivanhalen77@gmail.com |
#7
|
||||
|
||||
¿Esto funciona? Lo he probado pero, si bien me permite colorear una fila, al desplazarme a otro registro se pierde el valor del campo calculado.
// Saludos |
#8
|
||||
|
||||
Bueno, yo creo que el campo debe estar físicamente en la tabla. No creo haber nombrado "campo calculado" en mi comentario y si lo he hecho he cometido un error.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#9
|
||||
|
||||
Sí, lo sé. La pregunta era más bien para ecfisa, pues me extrañó que pudiera modificarse un campo calculado.
// Saludos |
#10
|
||||
|
||||
Gracias
Lo mas adecuado es guardar el valor de la fila seleccionada en una variable global.
luego forzar un Refresh de la tabla y en el evento ondraw comparar el valor de cierto campo que se esta dibujando con la variable y si es igual entonces se pinta. Asi no hay tardanza!!! Código:
filapintada:=ModuloDeDatos.QSeguimientoProspectacion.fieldbyname('idprospecto').asinteger; dxdbgrid1.FullRefresh; Código:
if modulodedatos.QSeguimientoProspectacion.fieldbyname('idprospecto').asinteger=filapintada then begin Acolor:=clyellow; Afont.Color:=Clblack end;
__________________
"Los unicos que no se equivocan son aquellos que no intentan hacer algo." Iván Caballero Cano... ivanhalen77@gmail.com |
#11
|
||||
|
||||
Nota
Cabe señalara que obviamente los eventos y valores dependen del componente que usen como grid...
yo uso uno DXDBGRID (muy bueno) El problema de usar campos de una BD es que si es por internet se pone lenta la seleccion y el pintado y el cliente o Jefe buscan rapidez.. a ellos no les importa lo que suframos para lograr sus peticiones. jjeje
__________________
"Los unicos que no se equivocan son aquellos que no intentan hacer algo." Iván Caballero Cano... ivanhalen77@gmail.com |
#12
|
||||
|
||||
Bueno ..creo con en éste hilo ya se te ha respondido y dado solucion, ya sea el uno u otro caso.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#13
|
||||
|
||||
He estado viendo esto un rato y me parece que puede lograrse usando simplemente la propiedad SelectedRows del DBGrid pero poniendo en false la opción dgMultiSelect.
En el evento OnDblClick del DBGrid pondríamos:
y en el evento OnDrawColumnCell:
// Saludos |
#14
|
||||
|
||||
Hola a todos.
Cita:
Pero según expone flystar en el texto mencionado; sólo quiere que la fila seleccionada se coloree cuando haga doble click sobre ella. En ningún momento entendí que quisiera utilizar el valor del campo extra para algún fin. Y utilizando el campo calculado se evita "ensuciar" la tabla original. De todos modos parece que era lo que andaba buscando... Neftalí: No cometiste un error, fuí yo que hice una libre interpretación del texto... Casimiro: Probé el ejemplo sin problemas asignando el valor al campo calculado. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 03-08-2010 a las 01:38:49. |
#15
|
||||
|
||||
Hola.
Donde dice: Cita:
Queria decir: Roman:Probé el ejemplo sin problemas, asignando el valor al campo calculado. Era tarde y andaba con la red neuronal en corto... Román: Tu código también funciona, la diferencia es que deja seleccionadas las filas donde se hizo doble click, no digo con esto que esté mál. Ambos comportamientos pueden ser deseados. Saludos y perdón por la confusión.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 03-08-2010 a las 23:38:41. |
#16
|
||||
|
||||
Hola
Estaba revisando esto, y necesito hacer algo parecido, solo debo pintarla, el otro problema es que el foco no lo tengo asignado al DBGrid... Mi consulta es si le asigno el campo calculado al DBGrid (esto no lo he probado.. asi que ahora le meteré manos...)y sin asignación de focus, este me lo pintará.... Salu2... se me olvidaba... para seleccionar la fila, lo hago en el Query que esta asignado al DBGrid, de la siguiente forma
__________________
BlueSteel Última edición por BlueSteel fecha: 10-02-2011 a las 23:56:41. |
#17
|
||||
|
||||
Hola BlueSteel.
Si te entendí bién, este código debería hacer lo que buscas. Lo asigné al evento OnClick de un TButton, pero vos podés ponerlo en el evento que te convenga para el caso. Hice en el DataSet un campo calculado que bauticé: Q_IngresoGralPintarGrid (en honor al DataSet) y usé el editor de columnas del DBGrid para evitar visualizarlo. Un TEdit recibe el dato que se le pasará al Locate en el evento OnClick del TButton.
Llamada:
El código deja pintada la fila en que te ubicaste con Locate hasta que realices un nuevo posicionamiento, sin que haya necesidad de darle el foco al TDBGrid. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 11-02-2011 a las 08:52:18. |
#18
|
||||
|
||||
Excelente....
Era justo lo que estaba buscando.... te confieso que al principio no entendí mucho de donde crear el campo calculado, asi que me puse a instrusear... y es muy facil... Y como tengo dos DBGrids en donde se muestran los datos de ingresos por la puerta actual y los ingresos que se realizan por todas las puertas, tube que realizar esto para que me pintará el dato de la puerta actual solo si ha ingresado por ahí
Gracias Salu2
__________________
BlueSteel |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Fila Seleccionada DBGrid | lacovera | OOP | 1 | 26-09-2008 15:58:40 |
marcar una fila seleccionada!! | candido | OOP | 10 | 19-10-2007 15:53:46 |
Borrar fila seleccionada de un componente TStringGrid | JM75 | OOP | 3 | 16-11-2006 10:31:06 |
Fila seleccionada Dbgrid siempre en el centro | Javier_A | OOP | 2 | 16-12-2004 16:39:51 |
Colorear celda seleccionada en StringGrid | Delphos | Varios | 6 | 18-08-2004 14:23:23 |
|