OnDrawCell von StringGrid verursacht flackern
-
ich habe für das Ereignis OnDrawCell folgende Funktion geschrieben:
void __fastcall TForm_Dateneditor::StringGrid_ParameterDrawCell(TObject *Sender, int Col, int Row, TRect &Rect, TGridDrawState State) { TStringGrid* Grid=dynamic_cast<TStringGrid *>(Sender); if (DM_Daten->AS_ParameterTyp == DM_Daten->AS_PruefparameterCaption) { if ((Row >= 1 && Row < 5) || (Row >= 6 && Row < 8) || (Row >= 11 && Row < 13) || Row == 14) { Grid->Canvas->Brush->Color = 0x00E7C7BD; Grid->Canvas->FillRect(Rect); DrawCellText(Grid->Canvas, Grid->Cells[Col][Row], Rect, taLeftJustify); } } }
Ich möchte jetzt per Button eine Zeile markieren. Jedoch habe ich die Zeilen vorher schon mit obiger Methode farblich unterteilt.
Das auswählen eines Bereichs funktioniert ja bekanntlich so:TGridRect myRect; myRect.Left = 2; myRect.Top = 1; myRect.Right = 3; myRect.Bottom = 4; StringGrid_Parameter->Selection = myRect;
Aber dadurch, dass ich im OnDrawCell die Zeilen farblich verändere, wird die Selection dabei überschrieben. Wenn ich die Selection-Anweisung mit in OnDrawCell einfüge, dann wird zwar die farbliche Unterteilung sowie die Selection gezeichnet, aber die Selection flackert dabei immer nur.
-
Hast du genau in die FAQ geschaut?
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39160.html
da steht im OnDrawCell-Event folgendes.if (State.Contains(gdSelected)) { Grid->Canvas->Brush->Color = clHighlight; Grid->Canvas->Font->Color = clHighlightText; }
So ähnlich sollte das auch bei dir gehen.
-
Super hat auf Anhieb geklappt! Danke