Я хочу показать последние изменения в моей Системе в виде записей журнала в Таблице в C ++ Builder GUI.
Для этого я использую TStringGrid
для этой цели , как показано ниже.
![image](https://i.stack.imgur.com/zh7oC.png)
Где:
Число (например, 1 или 2) в левом столбце Ячейка строковой сетки показывает адрес системы, в которой наблюдалось изменение, и цвет в левом столбце Ячейка показывает текущее состояние адресуемой системы.
Проблема заключается в том, что после ввода журналов, как указано выше, когда я щелкаю в любом месте на TStringGrid
каждая ячейка получает последний цвет, связанный с введенным в нее системным номером, как показано ниже.
![image](https://i.stack.imgur.com/QXTDi.png)
Я хочу, чтобы цвет каждой строки в 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);
}
}
}
}