Евгений |
Отправлено: 31.01.2004, 01:41 |
|
Не зарегистрирован
|
Скажите пожалуйста, как делать так, чтобы при щелчке мыши на строке компонента TRxDrawGrid она изменяла цвет на один, при втором щелчке на второй, и так по кругу перебирая 2 цвета. Т.е. чтобы можно было пометить нужные строки одним цветом, а остальные другим. Возможно ли это ? |
|
Doga |
Отправлено: 31.01.2004, 15:49 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Легко.
//Структура строки
typedef struct
{
TStringList *CellList; //Содержимое строки
TColor BakgroundColor; //Цвет фона ячейки
TColor FontColor; //Цвет шрифта ячейки
} GRIDROW;
//Хранилище строк
TList *GridRowList = new TList();
GridRowList->Clear();
for (int k = 0; k < RxDrawGrid1->RowCount; k++)
{
GridRowList->Add(new GRIDROW);
((GRIDROW *)GridRowList->Last())->CellList = new TStringList();
((GRIDROW *)GridRowList->Last())->CellList->Clear();
for(int i = 0; i < RxDrawGrid1->ColCount; i++)
{
((GRIDROW *)GridRowList->Last())->CellList->Append(/*Содержимое ячейки*/);
}
((GRIDROW *)GridRowList->Last())->BakgroundColor = BkgColor1;
((GRIDROW *)GridRowList->Last())->FontColor = FntColor1;
}
//Событие OnDblClick
RxDrawGrid1DblClick(...)
{
if (((GRIDROW *)GridRowList->Items[RxDrawGrid1->Row])->BakgroundColor == BkgColor1)
{
((GRIDROW *)GridRowList->Items[RxDrawGrid1->Row])->BakgroundColor = BkgColor2;
((GRIDROW *)GridRowList->Items[RxDrawGrid1->Row])->FontColor = FntColor2;
}
else
{
((GRIDROW *)GridRowList->Items[RxDrawGrid1->Row])->BakgroundColor = BkgColor1;
((GRIDROW *)GridRowList->Items[RxDrawGrid1->Row])->FontColor = FntColor1;
}
RxDrawGrid1->InvalidateRow(RxDrawGrid1->Row);
}
Функция InvalidateRow вызовет событие OnDrawCell для строки с индексом Row.
С обработчиком этого события, надеюсь, проблем не будет
|
|
Doga |
Отправлено: 31.01.2004, 15:51 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Не забудь в деструкторе формы очистить и удалить хранилище строк.
|
|