Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
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_
________________________________________________________________________________
Responder Con Cita
  #2  
Antiguo 26-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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);
   }
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 26-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
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_
________________________________________________________________________________
Responder Con Cita
  #4  
Antiguo 26-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 26-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
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);
       }
     }
es algo asi no ???
__________________
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_
________________________________________________________________________________
Responder Con Cita
  #6  
Antiguo 26-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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í:

Código Delphi [-]
if (ADOQuey.RecNo mod 2) then
begin
  if not (gdsSelected in State) then
      DBGrid1.Canvas.Brush.Color := { tu color para líneas impares };
end;

DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State);
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #7  
Antiguo 26-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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);
  }
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 26-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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);
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 26-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
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_
________________________________________________________________________________
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 20:14:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi