Вход в систему StringGrid в Borland C ++ - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу показать последние изменения в моей Системе в виде записей журнала в Таблице в C ++ Builder GUI.

Для этого я использую TStringGrid для этой цели , как показано ниже.

image

Где:

Число (например, 1 или 2) в левом столбце Ячейка строковой сетки показывает адрес системы, в которой наблюдалось изменение, и цвет в левом столбце Ячейка показывает текущее состояние адресуемой системы.

Проблема заключается в том, что после ввода журналов, как указано выше, когда я щелкаю в любом месте на TStringGrid каждая ячейка получает последний цвет, связанный с введенным в нее системным номером, как показано ниже.

image

Я хочу, чтобы цвет каждой строки в TStringGrid не должен изменяться, если он заполнен цветом, представляющим состояние системы в прошлом, поскольку он работает как журнал для пользователя.

Можете ли вы предложить мне решение для этого? Я использую событие OnDrawCell для рисования ячеек TStringGrid.

Также, пожалуйста, предложите мне, если есть какой-либо лучший способ показать журнал в вышеуказанной форме в Borland C ++ Builder GUI.

Ниже приведен код, который я использую для изменения цвета каждой TStringGrid ячейки в зависимости от значения в ней.

void __fastcall TPanelFrm::StringGrid1DrawCell(TObject *Sender,
    int ACol, int ARow, TRect &Rect,
    TGridDrawState State)
{
    TStringGrid *StringGrid = static_cast<TStringGrid*>(Sender);

    if (StringGrid!=NULL )
    {      
       if( ACol == 0)
       {
          AnsiString schaltSchrankNumberAnsi(StringGrid->Cells[ACol][ARow]);

          if (CompareText(schaltSchrankNumberAnsi,"")!=0) // Check Cell of StringGrid is no empty
          {
             int schaltSchrankNumber = schaltSchrankNumberAnsi.ToInt();

             //Value of l[schaltSchrankNumber-1]->Color
             // can be (TColor)RGB( 0xF8, 0x00, 0x00 ) 
             //or TColor)RGB( 0x3B, 0x83, 0xBD) etc      

             StringGrid->Canvas->Brush->Color = l[schaltSchrankNumber-1]->Color; // Color Cell background depending on value in Cell
             StringGrid->Canvas->FillRect(Rect);
             StringGrid->Canvas->Font->Style = TFontStyles() << fsBold;
             StringGrid->Canvas->Font->Color = clWindowText;
             StringGrid->Canvas->Rectangle(Rect);
             AnsiString cellText = StringGrid->Cells[ACol][ARow];
             StringGrid->Canvas->TextRect(Rect, Rect.Left, Rect.Top, cellText);

          }
       }
       else
       {

          AnsiString schaltSchrankStatusChangeDateAnsi(StringGrid->Cells[ACol][ARow]);
          if (CompareText(schaltSchrankStatusChangeDateAnsi,"")!=0)
          {
             StringGrid->Canvas->Brush->Color = clWindow;
             StringGrid->Canvas->FillRect(Rect);
             StringGrid->Canvas->Font->Style = TFontStyles() << fsBold;
             StringGrid->Canvas->Font->Color = clWindowText;
             StringGrid->Canvas->Rectangle(Rect);
             AnsiString cellText = StringGrid->Cells[ACol][ARow];
             StringGrid->Canvas->TextRect(Rect, Rect.Left, Rect.Top, cellText);

          }
       }      
    }
}
...