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

 
Не выполняется условие, Почему?
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))
.
Помогите, пожалуйста! smile.gif

Отредактировано laifik — 31/01/2005, 11:19
Doga
Отправлено: 31.01.2005, 14:22


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

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



Дело в том что свойства DBGridEh2->Canvas (в том числе и DBGridEh2->Canvas->Font->Color ) могут менятся довольно часто при прорисовке компонента, и нет никакой гарантии что к моменту Вашей прверки там остались Ваши настройки DBGridEh2->Canvas. И Вообще Canvas не предназначаен для этого. Параметры, по которым Вы собираетесь прверять какие либо условия, следует хранить отдельно, для каждой строки — тогда всё будет работать... smile.gif
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)
здесь не работает. Как выйти из положения?

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