Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > вопрос по DBGridDrawColumnCell


Автор: pharrell 3.3.2009, 00:48
так я запоминаю нужный номер записи:
Код

void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)
{
ID=DBGrid1->DataSource->DataSet->FieldByName("Код")->Value;
}


Далее закрашиваю все строки кроме выделенной:
Код

void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect,
          int DataCol, TColumn *Column, TGridDrawState State)
{
if(((TDBGrid*)Sender)->DataSource->DataSet->FieldByName("Код")->Value != ID){
    DBGrid1->Canvas->Font->Color = clBlack;
    DBGrid1->Canvas->Brush->Color = clWhite;
    DBGrid1->Canvas->FillRect(Rect);
    DBGrid1->Canvas->TextOut(Rect.Left+2,Rect.Top+2,Column->Field->Text);
}
}

Вопрос в том, что при щелчке по строке она не выделяется,приходится ещё раз кликнуть или колесико мыши крутить. Почему так происходит? 


Автор: Anikmar 3.3.2009, 01:10
Цитата(pharrell @  3.3.2009,  00:48 Найти цитируемый пост)
Вопрос в том, что при щелчке по строке она не выделяется,приходится ещё раз кликнуть или колесико мыши крутить. Почему так происходит? 

Не выделяется в смысле не становится текущей? Или курсор на этой строке не рисуется?

Автор: pharrell 3.3.2009, 01:15
Становится текущей,но не выделяется с первого раза.Все становится белым,а если по ней ещё раз кликнуть то выделяется.

Автор: Anikmar 3.3.2009, 01:31
Посмотрите под отладчиком какое событие первее вызывается. Может быть на момент отрисовки еще не присвоен ID?

Автор: pharrell 3.3.2009, 02:28
Мне тоже кажется что отрисовывается раньше...Но если вставить в конец DBGrid1CellClick'а ShowMessage(IntToStr(ID)), то нормально все...Сообщение закрываешь и сразу же выделяется строка.

Автор: Anikmar 3.3.2009, 02:34
Цитата(pharrell @  3.3.2009,  02:28 Найти цитируемый пост)
Мне тоже кажется что отрисовывается раньше...Но если вставить в конец DBGrid1CellClick'а ShowMessage(IntToStr(ID)), то нормально все...Сообщение закрываешь и сразу же выделяется строка. 

Логично - после закрытия окна сообщения требуется перерисовка.
Попробуйте принудительно перерисовать в методе OnClick
Не помню, что там есть - RePaint или что-то в этом роде. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)