Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Pintar StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=73638)

aams01 06-05-2011 17:38:22

Pintar StringGrid
 
Hola con respecto al tema se que se cuenta con demasiada infomacion y temas, una de las diferencias o por lo cual abro otro tema es la siguiente
es en C++, a los demas les funciona y a mi no.
lo que quiero es pintar un renglon si y otro no (azul,blanco,azul,blanco,.......)
Tengo el siguiente codigo en el evento SGVentasDrawCell()
Código:

if (ARow!=0) {
    if (ARow%2==0 ){
        SGVentas->Canvas->Brush->Color = clBlue;
        SGVentas->Canvas->Rectangle(Rect);
        SGVentas->Canvas->Font->Style << fsBold;
        SGVentas->Canvas->Font->Color = clWhite;
    }
  }

Lo que hace es pintar como antes mencione, pero el error en si es el texto
no se si el color de Brush se ponga por encima del renglon o si el texto simplemente no tiene color.
Por que en el renglon que se pinta Azul no se ve el texto (al entrar para editar si se encuentra).
Alguien que me pueda orientar

ecfisa 06-05-2011 19:09:31

Hola.

Probá de este modo:
Código:


void __fastcall TForm1::gridDrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
  TStringGrid *StrGrd = dynamic_cast<TStringGrid*>(Sender);

  if (ARow != 0 && ARow%2 != 0 ){
  StrGrd->Canvas->Brush->Color = clBlue;
  StrGrd->Canvas->Rectangle(Rect);
  StrGrd->Canvas->Font->Style << fsBold;
  StrGrd->Canvas->Font->Color = clWhite;
  DrawText(StrGrd->Canvas->Handle, StrGrd->Cells[ACol][ARow].c_str(),
            StrGrd->Cells[ACol][ARow].Length(), &Rect,
            DT_SINGLELINE | DT_VCENTER);
 }
}

Saludos.

escafandra 06-05-2011 19:39:44

Exacto, la razón es que pintas un rectángulo sólido con lo que tienes que pintar también el texto.

La única pega que se puede poner al buen ejemplo de ecfisa es que el texto se pintarán las líneas desaclopadas. Quizás desplazando un poco a la derecha y abajo el texto...

Código:

  TStringGrid *StrGrd = dynamic_cast<TStringGrid*>(Sender);
  if (ARow!=0) {
    if (ARow%2==0 ){
      StrGrd->Canvas->Brush->Color = clBlue;
      StrGrd->Canvas->Rectangle(Rect);
      StrGrd->Canvas->Font->Style << fsBold;
      StrGrd->Canvas->Font->Color = clWhite;
      InflateRect(&Rect, -2, -2);
      DrawText(StrGrd->Canvas->Handle, StrGrd->Cells[ACol][ARow].c_str(), StrGrd->Cells[ACol][ARow].Length(), &Rect, 0);
    }
  }

Saludos.

aams01 07-05-2011 04:20:08

Gracias
 
Gracias por su apoyo, el código era algo similar solo una modificacion ya que utilizo c++ 2010 y han de saber es mas caprichoso.
Utilize el codigo que puso escafandra ya que como menciono el codigo de ecfisa movia un poco el texto a la izquierda.
Modificacion:
Código:

DrawText(StrGrd->Canvas->Handle, StrGrd->Cells[ACol][ARow].c_str(),
                  StrGrd->Cells[ACol][ARow].Length(), &Rect, 0);

Por
Código:

DrawTextW(StrGrd->Canvas->Handle, StrGrd->Cells[ACol][ARow].c_str(),
                  StrGrd->Cells[ACol][ARow].Length(), &Rect, 0);

Bueno con este codigo que me brindaron me entro una duda para que sireve o se utiliza InflateRect(&Rect, -2, -2);
y que es &Rect

Otra cosa no se si an notado que los colores de builder son demasiado llamativos como puedo utilizar otros aparte de la funcion RGB() ya que esta me manda Warning
Gracias de antemano y por su apoyo

ecfisa 07-05-2011 05:05:23

Hola.

InflateRect incrementa/decrementa el ancho y/o largo de un rectángulo: InflateRect Function

Para definir colores personalizados desde el Object Inspector, doble click sobre la propiedad color y click sobre el botón "Definir colores personalizados".

Desde código en forma directa:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Edit1->Color = 0x007C88ED;
}

Saludos.

aams01 07-05-2011 06:24:27

Gracias nunca se me había ocurrido dar doble click.
aunque una diferencia en el modo de asignación el color sale con el sig. formato desde la propiedad color
$007C88ED ay que cambiar el signo de $ y poner 0x007C88ED
esto por si a alguien le interesa


La franja horaria es GMT +2. Ahora son las 21:27:40.

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