C++ Builder Snippets  


Zellen im TStringGrid farblich unterlegen, Textausgabe formatieren:
 

Auch wenn nicht unbedingt auf den ersten Blick zu erkennen, lassen sich die Zellen im TStringGrid mit Hilfe des OnDrawCell-Ereignisses ohne grösseren Aufwand farblich unterlegen. Folgendes Beispiel zeigt ausserdem, wie die Texte in den Zellen formatiert und ausgerichtet werden:
//---------------------------------------------------------------------------
// OnDrawCell-Ereignisbehandlung des TStringGrid:
//---------------------------------------------------------------------------
void __fastcall TfrmMain::grdMainDrawCell(TObject *Sender, int Col,
      int Row, TRect &Rect, TGridDrawState State)
{
  // Zeiger besorgen:
  TStringGrid* Grid=dynamic_cast<TStringGrid *>(Sender);

  // falls ungerade Spaltennummer und keine fixierte Zelle:
  if(Col%2 && !State.Contains(gdFixed))
  {
    // Falls nicht innerhalb der Auswahl:
    if(!State.Contains(gdSelected))
    {
      // Hintergrundfarbe auf gelb und die
      // Schriftfarbe auf rot setzen:
      Grid->Canvas->Brush->Color=clYellow;
      Grid->Canvas->Font->Color=clRed;
    }
    // Text linksbündig ausgeben:
    DrawCellText(Grid->Canvas, Grid->Cells[Col][Row], Rect, taLeftJustify);
  }
  else if(!State.Contains(gdFixed))
  {
    // Falls nicht innerhalb der Auswahl:
    if(!State.Contains(gdSelected))
    {
      // Hintergrundfarbe auf clAqua setzen:
      Grid->Canvas->Brush->Color=clAqua;
    }
    // Text rechtsbündig ausgeben:
    DrawCellText(Grid->Canvas, Grid->Cells[Col][Row], Rect, taRightJustify);
  }
  // Falls fixierte Zelle:
  else
  {
    // Fette Schrift verwenden:
    Grid->Canvas->Font->Style=Grid->Canvas->Font->Style << fsBold;
    Grid->Canvas->Font->Color = clBlue;

    // Text zentriert ausgeben:
    DrawCellText(Grid->Canvas, Grid->Cells[Col][Row], Rect, taCenter);
  }
}

//---------------------------------------------------------------------------
// Zeichnen der Texte in die Tabellenzelle gem. der Ausrichtungsvorgabe:
//---------------------------------------------------------------------------
// Funktion benötigt folgende Parameter:
// 1. Zeiger auf Canvas des TStringGrid -> Graphics::TCanvas* pCanvas
// 2. Der Ausgabetext                   -> AnsiString slStr
// 3. Rechteck mit der Zellenposition   -> TRect &Rect
// 4. Textausrichtung in der Zelle      -> TAlignment eAlignment
//                  (taLeftJustify, taRightJustify oder taCenter)
//---------------------------------------------------------------------------
void __fastcall TfrmMain::DrawCellText(Graphics::TCanvas* pCanvas,
                                       AnsiString slStr, TRect &Rect,
                                       TAlignment eAlignment)
{
  if(eAlignment == taLeftJustify)
  {
    pCanvas->TextRect(Rect, Rect.Left + 2,
      (Rect.Top+Rect.Bottom-pCanvas->TextHeight(slStr))/2, slStr);
  }
  else if(eAlignment == taRightJustify)
  {
    pCanvas->TextRect(Rect, Rect.Right - pCanvas->TextWidth(slStr) - 2,
      (Rect.Top+Rect.Bottom-pCanvas->TextHeight(slStr))/2, slStr);
  }
  else
  {
    pCanvas->TextRect(Rect, Rect.Left + (Rect.Right - Rect.Left)/2 -
      pCanvas->TextWidth(slStr)/2, (Rect.Top+Rect.Bottom-
      pCanvas->TextHeight(slStr))/2, slStr);
  }
}


  Download BCB4
Projekt-Quellcode
Download
Demo-Exe

© '99-2000 by S. Kreutzmann