Ver Mensaje Individual
  #9  
Antiguo 08-05-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
aams01 te está dando parte de la solución.

Piensa que estás escribiendo textos en las rejillas dos veces, una centrado con DrawTextW y la otra a la izquierda con TextOutA. Lo propio es añadir los nuevos textos en otro procedimiento, de carga o en todo caso, con DrawTextW para poder centrarlos.

Pero aún te falta otra cosa. La VCL escribe por su cuenta las celdas a la izquierda. Si quieres redibujarlas debes borrarlas previamente y luego reescribirlas.

Código:
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
   TStringGrid *grid = dynamic_cast<TStringGrid*>(Sender);
  
   InflateRect(&Rect, -1, -1);
  
   // Ajusto los colores de las celdas a las preestablecidos   
   if(State.Contains(gdFixed))
      grid->Canvas->Brush->Color = grid->FixedColor;
   else
      grid->Canvas->Brush->Color = grid->Color;

   // Borro las celdas
   grid->Canvas->FillRect(Rect);

   DrawText(grid->Canvas->Handle, grid->Cells[ACol][ARow].c_str(), grid->Cells[ACol][ARow].Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

   // Restauro el Rect que se pasó por referencia, no por valor...
   InflateRect(&Rect, 1, 1);
}
Saludos.

Última edición por escafandra fecha: 08-05-2011 a las 00:51:00.
Responder Con Cita