StringGrid - farbige Zellen/Zeilen
-
Ich möchte in einem StringGrid jede Zeile mit einer anderen Farbe versehen.
Wie spreche ich die Zeilen, oder Felder an.[ Dieser Beitrag wurde am 05.12.2002 um 08:44 Uhr von Jansen editiert. ]
-
Das OnDrawCwell-Event wird ständig automatisch für alle Zellen augerufen, die (neu) gezeichnet werden müssen.
ACol und ARow übergeben die Koordinaten der jeweiligen Zelle, diese kann man auswerten, um bei Bedarf bestimmte Zellen gesondert zu behandeln.//--------------------------------------------------------------------------- void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { // Farben festlegen: // Standardfarben für selektierte Zelle(n) if (State.Contains(gdSelected)) { StringGrid1->Canvas->Brush->Color = clHighlight; StringGrid1->Canvas->Font->Color = clHighlightText; } // gerade Zeilen Dunkelgrau, aber nicht die feste(n) Zeile(n) oben else if (ARow % 2 && !State.Contains(gdFixed)) { StringGrid1->Canvas->Brush->Color = clGray; StringGrid1->Canvas->Font->Color = clWhite; } // gerade Spalten Hellgrau, aber nicht ... links else if (ACol % 2 && !State.Contains(gdFixed)) { StringGrid1->Canvas->Brush->Color = clSilver; StringGrid1->Canvas->Font->Color = clWhite; } // Zelle 2/2 Gelb else if (ACol == 2 && ARow == 2) { StringGrid1->Canvas->Brush->Color = clYellow; StringGrid1->Canvas->Font->Color = clBlack; } // Zelle endlich zeichnen StringGrid1->Canvas->FillRect(Rect); // noch ein Gimmick für die Textausrichtung int hAlign; // text align, 0/1/2 - Left/Center/Right if (ACol % 2) hAlign = 1; else hAlign = 2; // und zum Schluss den Text in die Zelle malen DrawText(StringGrid1->Canvas->Handle, StringGrid1->Cells[ACol][ARow].c_str(), -1, &Rect, DT_SINGLELINE | DT_VCENTER | hAlign); } //---------------------------------------------------------------------------
Übrigens müssen hier, im Gegensatz zur ListBox, die Standardzellen nicht selbst gezeichnet werden, das lässt sich über die Property DefaultDrawing einstellen.
Edit:
Danke an Sunday für den Hinweis auf gdFixed.