DBGridEh2DrawColumnCell
На Form1 есть таблица DBGridEh2. В таблице нужно произвести выделение строк в режиме MultiSelect = true.
1. Событие начинает работать в момент загрузки Form1 (На таблице первая строка выделена). Можно ли добиться, чтобы выделение происходило только в момент события OnCellClick для DBGridEh2, а при открытии формы никакого выделения в таблице не было?
2. При нажатой клавиши “Ctrl” и левой кнопки мыши я могу выделить несколько строк. Если для одной из строк я хочу убрать выделение, я на ней щелкаю. При этом на этой строке остается выделение, а со всех других снимается. Как сделать наоборот?
3. Если выделяю строку на первый клик, а на второй клик (по ней же) хочу снять выделение. Выделение не снимается. Как этого добиться?
Код события такой:
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);
}
1 вопрос снимаю. Добавила проверку на выделение, заработало правильно. Прошу помощи по 2-м остальным вопросам.
3. Ты делаешь снятие выделения если статус selected и передаешь управление методу DefaultDrawCell, которые определяет, что состояние selected и рисует выделение. Либо убери этот вызов совсем, либо перед ним сбрось gdSelected.
Попыталась, но уменя не получилось. Наверное, не совсем прочувствовала код.
Попыталась, но уменя не получилось. Наверное, не совсем прочувствовала код.
Я думаю, что если аккуратненько на листочке распишешь алгоритм, то у тебя все получится.
говорит, о том, что если я щелкаю по ячейке, то меняется цвет строк. Но ведь по ячейке я щелкаю и в случае выделения, и вслучае его отмены. Вот и не знаю, как правильно задать условие, чтобы сбросить gdSelected и в каком это нужно сделать месте.
Вообще, это событие описано скудно. Вроде ясно, как оно работает, а много связано с ним нюансов.:???:
Я вот что не понимаю. Работаю только с событием DrawColumnCell. Условие
говорит, о том, что если я щелкаю по ячейке, то меняется цвет строк. Но ведь по ячейке я щелкаю и в случае выделения, и вслучае его отмены. Вот и не знаю, как правильно задать условие, чтобы сбросить gdSelected и в каком это нужно сделать месте.
Вообще, это событие описано скудно. Вроде ясно, как оно работает, а много связано с ним нюансов.:???:
Нет это условие говорит, что рисуешь выделенную ячейку.
Нет это условие говорит, что рисуешь выделенную ячейку.
Пожалуйста, можно объяснить поконкретнее. Я уже столько вариантов перебрала.
- условие выделения ячейки. Потом идет прорисовка. Это ясно. Дальше - условие отмены выделения. Как это должно выглядеть?:o
Пожалуйста, можно объяснить поконкретнее. Я уже столько вариантов перебрала.
- условие выделения ячейки. Потом идет прорисовка. Это ясно. Дальше - условие отмены выделения. Как это должно выглядеть?:o
Ну что, то типа State >> gdSelected или State.Clear().
А вообще то попробуй вот так:
TField *Field, TFont *AFont, TColor &Background, bool Highlight)
{
if(Highlight)
{
Background = TColor(0x00C6FFFF);
AFont->Color = clRed;
}
}
Ну что, то типа State >> gdSelected или State.Clear().
А вообще то попробуй вот так:
TField *Field, TFont *AFont, TColor &Background, bool Highlight)
{
if(Highlight)
{
Background = TColor(0x00C6FFFF);
AFont->Color = clRed;
}
}
У меня компонент EhLib. Нет параметра Highlight.
void __fastcall TForm1::DBGridEh2GetCellParams(TObject *Sender,
TColumnEh *Column, TFont *AFont, TColor &Background,
TGridDrawState State)
А полная задача у меня такая (если помните предыдущую, которую помогли решить).
Есть компонент RxCheckListBox1 и таблица DBGridEh2 с данными. Необходимо с помощью Item-а RxCheckListBox1 выделить блок записей (при Check = true). При Check = false - отмена выделения этого же блока. Одновременно нужно предусмотреть выделение и отмену по одной строке. Может, это действительно можно добиться только с помощью события OnGetCellParams?
Может, это действительно можно добиться только с помощью события OnGetCellParams?
Не получится - это событие предназначено для установки параметров отрисовки ячеек, не более. Параметр State передается по значению.
А выход есть?
Просто проверь State на gdSelected и тогда рисуй
{
Background = TColor(0x00C6FFFF);
AFont->Color = clRed;
}
не считаются. На них потом не действует условие
.
А для меня это очень существенно, т.к. далее выбранные записи я копирую в таблицу БД. Попробую еще раз обозначить свою задачу. Что-то впервые на мои вопросы нет решения. Уже и не знаю, к кому обращаться?
Есть компонент RxCheckListBox1 и таблица DBGridEh2 с данными.
1) Выделить записи целым блоком по при установки «галочки» в компоненте RxCheckListBox1 (например, на значение 02 выделяются все записи, значения который в поле GostID начинаются на 01). Строка должна поменять не только фон и цвет шрифта, но и должна приобрести статус (State.Contain(gdSelected)).
2) выделить одну или несколько записей с помощью комбинации клавиш “Ctrl” и левой кнопки «мыши».
3) При сбросе «галочки» компонента RxCheckListBox1 выделение блока по 02 снимается.
4) При повторном нажатии на выделенную с помощью комбинации клавиш строку таблицы выделение снимается.
Нет, из этого ничего не получилось. Более того, записи, выбранные с помощью события OnCellParams почему-то
не считаются. На них потом не действует условие
.
А для меня это очень существенно, т.к. далее выбранные записи я копирую в таблицу БД. Попробую еще раз обозначить свою задачу. Что-то впервые на мои вопросы нет решения. Уже и не знаю, к кому обращаться?
Есть компонент RxCheckListBox1 и таблица DBGridEh2 с данными.
1) Выделить записи целым блоком по при установки «галочки» в компоненте RxCheckListBox1 (например, на значение 02 выделяются все записи, значения который в поле GostID начинаются на 01). Строка должна поменять не только фон и цвет шрифта, но и должна приобрести статус (State.Contain(gdSelected)).
2) выделить одну или несколько записей с помощью комбинации клавиш “Ctrl” и левой кнопки «мыши».
3) При сбросе «галочки» компонента RxCheckListBox1 выделение блока по 02 снимается.
4) При повторном нажатии на выделенную с помощью комбинации клавиш строку таблицы выделение снимается.
Строка может получить статус gdSelected только если ты кликнешь на ячеку этой строки с нажатой клавишей ctrl. Поэтому в 1 случае тебе нужно анализировать через другие признаки.
ЗЫ У меня нет хелпа на rx-компоненты. Если у тебя есть посмотри что-нибудь на тему SetCellProperties
Бог с ними, с теми недочетами. Меня более волнует этот момент. Неужели ничего нельзя сделать? Но ведь так не бывает? Это такой первый вопрос, на котором так глобально застряла.
А может как-то сделать через State.Clear()?
Только не знаю, что это даст?
Да, индикатор меняется. А вот поменять фон и цвет шрифта в строке, не удается. С этим вопросом и маюсь. Если знаете, помогите, пожалуйста.:roll:
Я попытаюсь разобраться. Если не получится, продолжу тему или открою новую с этого момента. А пока, огромное спасибо за помощь.:)