Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DBGridEh2DrawColumnCell

1.2K
21 января 2005 года
richel
142 / / 20.01.2005
У меня по этому событию несколько вопросов.
На Form1 есть таблица DBGridEh2. В таблице нужно произвести выделение строк в режиме MultiSelect = true.
1. Событие начинает работать в момент загрузки Form1 (На таблице первая строка выделена). Можно ли добиться, чтобы выделение происходило только в момент события OnCellClick для DBGridEh2, а при открытии формы никакого выделения в таблице не было?
2. При нажатой клавиши “Ctrl” и левой кнопки мыши я могу выделить несколько строк. Если для одной из строк я хочу убрать выделение, я на ней щелкаю. При этом на этой строке остается выделение, а со всех других снимается. Как сделать наоборот?
3. Если выделяю строку на первый клик, а на второй клик (по ней же) хочу снять выделение. Выделение не снимается. Как этого добиться?
Код события такой:
Цитата:
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);
}

1.2K
21 января 2005 года
richel
142 / / 20.01.2005
1 вопрос снимаю. Добавила проверку на выделение, заработало правильно. Прошу помощи по 2-м остальным вопросам.
259
21 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by richel
1 вопрос снимаю. Добавила проверку на выделение, заработало правильно. Прошу помощи по 2-м остальным вопросам.


3. Ты делаешь снятие выделения если статус selected и передаешь управление методу DefaultDrawCell, которые определяет, что состояние selected и рисует выделение. Либо убери этот вызов совсем, либо перед ним сбрось gdSelected.

1.2K
21 января 2005 года
richel
142 / / 20.01.2005
Цитата:
Либо убери этот вызов совсем, либо перед ним сбрось gdSelected.


Попыталась, но уменя не получилось. Наверное, не совсем прочувствовала код.

259
21 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by richel

Попыталась, но уменя не получилось. Наверное, не совсем прочувствовала код.


Я думаю, что если аккуратненько на листочке распишешь алгоритм, то у тебя все получится.

1.2K
21 января 2005 года
richel
142 / / 20.01.2005
Я вот что не понимаю. Работаю только с событием DrawColumnCell. Условие
Цитата:
if(State.Contains(gdSelected))

говорит, о том, что если я щелкаю по ячейке, то меняется цвет строк. Но ведь по ячейке я щелкаю и в случае выделения, и вслучае его отмены. Вот и не знаю, как правильно задать условие, чтобы сбросить gdSelected и в каком это нужно сделать месте.
Вообще, это событие описано скудно. Вроде ясно, как оно работает, а много связано с ним нюансов.:???:

259
21 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by richel
Я вот что не понимаю. Работаю только с событием DrawColumnCell. Условие
говорит, о том, что если я щелкаю по ячейке, то меняется цвет строк. Но ведь по ячейке я щелкаю и в случае выделения, и вслучае его отмены. Вот и не знаю, как правильно задать условие, чтобы сбросить gdSelected и в каком это нужно сделать месте.
Вообще, это событие описано скудно. Вроде ясно, как оно работает, а много связано с ним нюансов.:???:


Нет это условие говорит, что рисуешь выделенную ячейку.

1.2K
21 января 2005 года
richel
142 / / 20.01.2005
Цитата:
Originally posted by AlexandrVSmirno

Нет это условие говорит, что рисуешь выделенную ячейку.


Пожалуйста, можно объяснить поконкретнее. Я уже столько вариантов перебрала.

Цитата:
if(State.Contains(gdSelected))

- условие выделения ячейки. Потом идет прорисовка. Это ясно. Дальше - условие отмены выделения. Как это должно выглядеть?:o

259
22 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by richel

Пожалуйста, можно объяснить поконкретнее. Я уже столько вариантов перебрала.
- условие выделения ячейки. Потом идет прорисовка. Это ясно. Дальше - условие отмены выделения. Как это должно выглядеть?:o


Ну что, то типа State >> gdSelected или State.Clear().
А вообще то попробуй вот так:

 
Код:
void __fastcall TForm1::RxDBGrid1GetCellParams(TObject *Sender,
      TField *Field, TFont *AFont, TColor &Background, bool Highlight)
{
    if(Highlight)
    {
        Background = TColor(0x00C6FFFF);
        AFont->Color = clRed;
    }
}
1.2K
22 января 2005 года
richel
142 / / 20.01.2005
Цитата:
Originally posted by AlexandrVSmirno

Ну что, то типа State >> gdSelected или State.Clear().
А вообще то попробуй вот так:
 
Код:
void __fastcall TForm1::RxDBGrid1GetCellParams(TObject *Sender,
      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?

10
22 января 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by richel
Может, это действительно можно добиться только с помощью события OnGetCellParams?


Не получится - это событие предназначено для установки параметров отрисовки ячеек, не более. Параметр State передается по значению.

1.2K
23 января 2005 года
richel
142 / / 20.01.2005
А выход есть?
259
24 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by richel
А выход есть?


Просто проверь State на gdSelected и тогда рисуй

 
Код:
if(State.Contain(gdSelected))
{
   Background = TColor(0x00C6FFFF);
   AFont->Color = clRed;
}
1.2K
24 января 2005 года
richel
142 / / 20.01.2005
Нет, из этого ничего не получилось. Более того, записи, выбранные с помощью события OnCellParams почему-то
Цитата:
State.Contain(gdSelected))

не считаются. На них потом не действует условие

Цитата:
(DBGridEh2->SelectedRows->Count > 0)

.
А для меня это очень существенно, т.к. далее выбранные записи я копирую в таблицу БД. Попробую еще раз обозначить свою задачу. Что-то впервые на мои вопросы нет решения. Уже и не знаю, к кому обращаться?
Есть компонент RxCheckListBox1 и таблица DBGridEh2 с данными.
1) Выделить записи целым блоком по при установки «галочки» в компоненте RxCheckListBox1 (например, на значение 02 выделяются все записи, значения который в поле GostID начинаются на 01). Строка должна поменять не только фон и цвет шрифта, но и должна приобрести статус (State.Contain(gdSelected)).
2) выделить одну или несколько записей с помощью комбинации клавиш “Ctrl” и левой кнопки «мыши».
3) При сбросе «галочки» компонента RxCheckListBox1 выделение блока по 02 снимается.
4) При повторном нажатии на выделенную с помощью комбинации клавиш строку таблицы выделение снимается.

259
24 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by richel
Нет, из этого ничего не получилось. Более того, записи, выбранные с помощью события OnCellParams почему-то
не считаются. На них потом не действует условие
.
А для меня это очень существенно, т.к. далее выбранные записи я копирую в таблицу БД. Попробую еще раз обозначить свою задачу. Что-то впервые на мои вопросы нет решения. Уже и не знаю, к кому обращаться?
Есть компонент RxCheckListBox1 и таблица DBGridEh2 с данными.
1) Выделить записи целым блоком по при установки «галочки» в компоненте RxCheckListBox1 (например, на значение 02 выделяются все записи, значения который в поле GostID начинаются на 01). Строка должна поменять не только фон и цвет шрифта, но и должна приобрести статус (State.Contain(gdSelected)).
2) выделить одну или несколько записей с помощью комбинации клавиш “Ctrl” и левой кнопки «мыши».
3) При сбросе «галочки» компонента RxCheckListBox1 выделение блока по 02 снимается.
4) При повторном нажатии на выделенную с помощью комбинации клавиш строку таблицы выделение снимается.


Строка может получить статус gdSelected только если ты кликнешь на ячеку этой строки с нажатой клавишей ctrl. Поэтому в 1 случае тебе нужно анализировать через другие признаки.
ЗЫ У меня нет хелпа на rx-компоненты. Если у тебя есть посмотри что-нибудь на тему SetCellProperties

1.2K
25 января 2005 года
richel
142 / / 20.01.2005
Цитата:
4) При повторном нажатии на выделенную с помощью комбинации клавиш строку таблицы выделение снимается.


Бог с ними, с теми недочетами. Меня более волнует этот момент. Неужели ничего нельзя сделать? Но ведь так не бывает? Это такой первый вопрос, на котором так глобально застряла.
А может как-то сделать через State.Clear()?
Только не знаю, что это даст?

1.2K
25 января 2005 года
richel
142 / / 20.01.2005
Цитата:
[В] Borland-oвском DBGrid, даже индикатор слева меняется для selected или для только focused записи.


Да, индикатор меняется. А вот поменять фон и цвет шрифта в строке, не удается. С этим вопросом и маюсь. Если знаете, помогите, пожалуйста.:roll:

1.2K
25 января 2005 года
richel
142 / / 20.01.2005
Ничего себе... Не так все просто. Поэтому никто ничего путного и не предложил.
Я попытаюсь разобраться. Если не получится, продолжу тему или открою новую с этого момента. А пока, огромное спасибо за помощь.:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог