laifik |
Отправлено: 31.01.2005, 10:16 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
Возникла небольшая проблемка.
Есть DBGridEh2. В нем несколько строк по фону и цвету шрифта отличаются от остальных строк.
Задала условие:
CODE | if ((DBGridEh2->Canvas->Font->Color == clRed) &&
(DBGridEh2->Canvas->Brush->Color == clYellow))
ShowMessage("Строка выбрана!");
else
ShowMessage("Строка не выбрана!"); |
Мне нужно, чтобы вышло сообщение "Строка выбрана".
Условие CODE | if (DBGridEh2->SelectedRows->Count == 0) | здесь не подойдет, т.к. смена фрна и цвета шрифта осуществлялась с помощью события OnGetCellParams, где нет CODE | if(State.Contains(gdSelected)) | .
Помогите, пожалуйста!
Отредактировано laifik — 31/01/2005, 11:19 |
|
Doga |
Отправлено: 31.01.2005, 14:22 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Дело в том что свойства DBGridEh2->Canvas (в том числе и DBGridEh2->Canvas->Font->Color ) могут менятся довольно часто при прорисовке компонента, и нет никакой гарантии что к моменту Вашей прверки там остались Ваши настройки DBGridEh2->Canvas. И Вообще Canvas не предназначаен для этого. Параметры, по которым Вы собираетесь прверять какие либо условия, следует хранить отдельно, для каждой строки — тогда всё будет работать...
|
|
laifik |
Отправлено: 31.01.2005, 14:34 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
Понятно. Тогда попробую сформулировать задачу иначе. При нажатии на RxCheckListBox1 у блока записей меняется фон и цвет шрифта. Это осуществляется в событии
CODE | void __fastcall TForm1::DBGridEh2GetCellParams(TObject *Sender,
TColumnEh *Column, TFont *AFont, TColor &Background,
TGridDrawState State)
{
TDBGridEh * Eh_Oper = (TDBGridEh *)Sender;
for(int i = 0;i < RxCheckListBox1->Items->Count;i++)
{
if(RxCheckListBox1->Checked[i])
if(Eh_Oper->DataSource->DataSet->FieldByName("GostID")->AsString.Trim().SubString(1,2) == RxCheckListBox1->Items->Strings[i])
{
AFont->Color = clRed;
Background = TColor(0x00C6FFFF);
break;
}
}
} |
Но при этом записи не считаются выделенными, как в событии DBGridEh2DrawColumnCell, где есть условие if(State.Contains(gdSelected)) (слева даже индикатор принимает черный цвет). В первом событии подобного не происходит и условие
CODE | if (DBGridEh2->SelectedRows->Count == 0) | здесь не работает. Как выйти из положения? |
|