C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Компонент TRxDrawGrid из RxLib
Евгений
Отправлено: 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.
С обработчиком этого события, надеюсь, проблем не будет smile.gif
Doga
Отправлено: 31.01.2004, 15:51


Мастер участка

Группа: Участник
Сообщений: 575



Не забудь в деструкторе формы очистить и удалить хранилище строк.

Вернуться в Вопросы программирования в C++Builder