laifik |
Отправлено: 21.01.2005, 09:32 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
У меня по этому событию несколько вопросов.
На Form1 есть таблица DBGridEh2. В таблице нужно произвести выделение строк в режиме MultiSelect = true.
1. Событие начинает работать в момент загрузки Form1 (На таблице первая строка выделена). Можно ли добиться, чтобы выделение происходило только в момент события OnCellClick для DBGridEh2, а при открытии формы никакого выделения в таблице не было?
2. При нажатой клавиши “Ctrl” и левой кнопки мыши я могу выделить несколько строк. Если для одной из строк я хочу убрать выделение, я на ней щелкаю. При этом на этой строке остается выделение, а со всех других снимается. Как сделать наоборот?
3. Если выделяю строку на первый клик, а на второй клик (по ней же) хочу снять выделение. Выделение не снимается. Как этого добиться?
Код события такой:
CODE | void __fastcall TForm1::DBGridEh2DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumnEh *Column,
TGridDrawState State)
{
TDBGridEh * Eh_Oper = (TDBGridEh *)Sender;
if(State.Contains(gdSelected)) {
Eh_Oper->Canvas->Font->Color = clRed;
Eh_Oper->Canvas->Brush->Color = TColor(0x00C6FFFF);
Eh_Oper->Canvas->FillRect(Rect);
Eh_Oper->Canvas->TextOut(Rect.Left+2,Rect.Top+2,Column->Field->Text);
Eh_Oper->DefaultDrawColumnCell(Rect,DataCol,Column,State);
}
| |
|
AVC |
Отправлено: 21.01.2005, 09:51 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
1.
Если DrawColumnCell считает, что при открытии формы строка выделена, то проще отменить выделение при создании формы (конструктор или OnCreate формы). Вообще выбор места зависит от моента открытия DataSet. Надо разобраться откуда берется выделеная строка. |
|
laifik |
Отправлено: 21.01.2005, 10:03 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
QUOTE (AVC @ 21/01/2005, 10:53) | Вообще выбор места зависит от моента открытия DataSet. Надо разобраться откуда берется выделеная строка. |
Вообще, в данном случае, это не принципиально. Этот момент я отрабатываю на вспомогательной форме, где кинут Грид. И DataSet находится в режиме Open()=true уже в момент открытия формы (не OnCreate). Если убрать событие DrawColumnCell и открыть форму, на таблице никаких выделений нет.
Как отменить выделение, не знаю. Поэтому и обратилась за помощью. |
|
AVC |
Отправлено: 21.01.2005, 10:49 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
То есть у вас срабатывает if(State.Contains(gdSelected)) ?
Скорее всего вы видете просто активную строку.
Может добавить проверку SelectedRows->Count?
PS. В свое время меня этот MultiSelect с BookMark так достал, что сделал им альтернативу и использую только её. |
|
laifik |
Отправлено: 21.01.2005, 11:28 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
Спасибо! Первый вопрос снимается. Добавила проверку на выделение — при загрузке выделение исчезло.
Осталось 2 вопроса. |
|
Guest |
Отправлено: 21.01.2005, 19:55 |
|
Не зарегистрирован
|
QUOTE (laifik @ 21/01/2005, 10:34) | if(State.Contains(gdSelected)) |
Это условие выделения ячейки. Далее идет перерисовка ячейки. А как задать условие отмены выделения и перерисовку с другими параметрами? |
|