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 😉


Anmelden zum Antworten