FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Al usar TCanvas perdi la selección !!!
hola amigos
Estoy usando un DBGrid y al realizar la consulta pues coloreo las filas pares para que resalten, sucede que las filas coloreadas al ser seleccionadas(en el momento en que se le da click encima) pierden la visualizacion (el valor que estan mostrando) y no se ponen del tipico color azul (como casi todo lo que se selecciona en windows). posteo el codigo que estoy usando para que me lo revisen y si existe alguna solucion estare muy agradecido Código:
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { //dibujando filas pares en grid 1 TCanvas *Temp = ((TDBGrid *) Sender)->Canvas; if (ADOQuery1->RecNo % 2) { Temp->Brush->Color = StringToColor("0x00f7fbfd"); } Temp->FillRect(Rect); Temp->TextOut(Rect.Left, Rect.Top, Column->Field->AsString); }
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
#2
|
||||
|
||||
Hola Impadron.
Probá de este modo: Código:
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { if (ADOQuery1->RecNo % 2) { DBGrid1->Canvas->Brush->Color = clMoneyGreen; DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State); } }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
La celda coloreada aun sigue sin cambair de color y las letras se muestran en blanco, con el clMoneyGreen no hay problema porque se ve bien pero con el StringToColor("0x00f7fbfd") que es un crema un tanto mas claro me hace falta que al estar seleccionado las letras de la fuente me salgan en negro o que se señale en Azul como es normalmente para que las letras del fondo al ser blancas se puedan distinguir.
saludos
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
#4
|
||||
|
||||
Lo que sucede es que estás utilizando un color constante para todos los estados de la celda. El estado de una celda (si está seleccionada o no) es indicado en el parámetro State de tipo TGridDrawState.
El color constante que estás utilizando es "0x00f7fbfd". Debes utilizar una condicional que pruebe el estado de la celda, y utilizar el color clHotlight cuando la celda esté seleccionada. Saludos, Chris |
#5
|
||||
|
||||
y como accedo a los valores de State, lo que he hecho es esto
Código:
if (State == NO ENCUENTRO QUE PONER) { DBGrid1->Canvas->Brush->Color = clHotLight; } else { if (ADOQuery1->RecNo % 2) { DBGrid1->Canvas->Brush->Color = StringToColor("0x002899d2"); DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State); } }
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
#6
|
||||
|
||||
En C++ no sé cómo sería el código, no escribo en ese lenguage. Pero en Delphi tu código más o menos debería ser así:
|
#7
|
||||
|
||||
Hola Impadrón.
No había probado con el color que pusiste por lo que no veía el problema. En realidad no perdes la selección. El texto, que en la selección esta en color blanco, se confunde con el color '0x002899d2' ya que es muy similar. Yo lo resolví así: Código:
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { DBGrid1->Canvas->Font->Color = clBlack; /* Texto en negro */ if (ADOQuery1->RecNo % 2){ DBGrid1->Canvas->Brush->Color = 0x00f7fbfd; DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State); } }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#8
|
||||
|
||||
Hola.
Te agrego un ejemplo más completo, en el cuál seleccionás los colores de fondo y fuente en ambos casos (par/impar): Código:
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { if (ADOQuery1->RecNo % 2) { DBGrid1->Canvas->Font->Color = clBlack; /* letra negra */ DBGrid1->Canvas->Brush->Color = clLime; /* fondo claro */ } else{ DBGrid1->Canvas->Font->Color = clWhite; /* letra blanca */ DBGrid1->Canvas->Brush->Color = clNavy; /* fondo oscuro */ } DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State); }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#9
|
||||
|
||||
Gracias amigos ecfisa y Chris
Estaba probando el codigo que Chris habia escrito en Pascal y pues no puedo convertirlo a C++, ahora voy a probar con tu solucion ecfisa de todas formas si alguien puede convertir el codigo del amigo Chris seria excelente. Saludos
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
#10
|
||||
|
||||
Cita:
Saludos, Chris |
#11
|
||||
|
||||
Cita:
La conversión del código de Chris es: Código:
if(ADOQuery1->RecNo % 2) if(!State.Contains(gdSelected)) DBGrid1->Canvas->Brush->Color = 0x00f7fbfd; DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State);
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 26-08-2011 a las 19:11:49. Razón: Incluir negación en condición |
#12
|
||||
|
||||
Gracias ecfisa por la traducción!
Solo que se te ha escapado la negación en la segunda condicional. Código:
if(ADOQuery1->RecNo % 2) if !(State.Contains(gdSelected)) DBGrid1->Canvas->Brush->Color = 0x00f7fbfd; DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State); Chris |
#13
|
||||
|
||||
Cita:
Entiendo lo que comentas, pero aparte de la selección, creo que de todas maneras las celdas tienen que tener colores diferentes cuando son pares o impares. Ahora voy a probar evaluando la condición del estado. Un saludo. Edito: Tenés toda la razón Chris , gracias por la observación, ya incluí el "!" en la condición del código del mensaje superior
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 26-08-2011 a las 19:10:42. |
#14
|
||||
|
||||
Gracias amigos por su ayuda !!!
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
#15
|
||||
|
||||
Cita:
Saludos, Chris |
#16
|
||||
|
||||
he unido los dos codigos, jejeje y al hacerlo me di cuenta de que la negación debe ir dentro del parentesis (me dio error cuando lo corri !!!)
Cita:
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
#17
|
||||
|
||||
Hola Chris.
Probé con tu sugerencia y funciona perfectamente. Cita:
Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 26-08-2011 a las 19:23:12. |
#18
|
||||
|
||||
Al final quedo de esta manera, espero que le sea de utilidad al proximo que presente la misma dificultad
Código:
if (ADOQuery1->RecNo % 2) { if (!State.Contains(gdSelected)) { DBGrid1->Canvas->Font->Color = clBlack; /* letra negra */ DBGrid1->Canvas->Brush->Color = StringToColor("0x00daf1fc"); /* fondo claro*/ } } DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State); Saludos y Gracias
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda, instale un componenete y perdi otro | aldmoscardi | Varios | 5 | 05-07-2007 17:31:09 |
Tcanvas mejorado | eliash | Gráficos | 6 | 10-01-2006 10:47:13 |
tcanvas alineado a la derecha | rebollo75 | Impresión | 2 | 30-11-2005 18:45:33 |
Perdi el ejemplo | buitrago_listas | SQL | 1 | 19-01-2005 20:51:36 |
Alternativa a TCanvas.StretchDraw | Jose_Pérez | Gráficos | 2 | 17-04-2004 16:01:13 |
|