Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
dallan99
0 / 0 / 1
Регистрация: 15.05.2017
Сообщений: 8
#1

Изменить цвет ячейки мышкой - C++ Builder

23.11.2017, 15:14. Просмотров 225. Ответов 10
Метки нет (Все метки)

Как изменить цвет ячейки щелчком мыши?
Использую gridEh. никак не получается.
Нужно по щелчку мыши при определенном условии поменять цвет ячейки и условие.
В каком событии это делать?
Делаю примерно так, но не получается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    if (DBGridEhSyr->SelectedIndex == 0)
    {
        if (DM->DSPlanPer->FieldByName("METKA")->AsInteger == 0)
        {
            DBGridEhSyr->Columns->Items[0]->Color = (TColor)RGB(255,255,255);
            DM->DSPlanPer->Edit();
            DM->DSPlanPer->FieldByName("METKA")->AsInteger = 1;
            DM->DSPlanPer->Post();
        }
        else
        {
            DBGridEhSyr->Columns->Items[0]->Color = (TColor)RGB(0,0,0);
            DM->DSPlanPer->Edit();
            DM->DSPlanPer->FieldByName("METKA")->AsInteger = 0;
            DM->DSPlanPer->Post();
        }
    }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2017, 15:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Изменить цвет ячейки мышкой (C++ Builder):

Не могу изменить цвет ячейки StringGrid (Builder 6)
Здравствуйте! Перечитал множество тем по изменению цвета ячеек. Проблему не...

Цвет ячейки StringGrid
Есть СтрингГрид (матрица, заполнен целыми числами). По нажатию на кнопку в нем...

Цвет ячейки StringGrid
Нужно сделать так чтобы в stringride выделялось красным цветом фон ячейки с...

StringGrid И цвет ячейки
Уважаемые форумчане подскажите как изменить цвет ячейки в StringGirid...

Цвет краёв ячейки в StringGrid
Можно ли в StringGrid изменить цвет краёв(границ) какой либо ячейки, не...

Изменить цвет текста Label
Доброго времени суток. В настройках проекта выставляю визуальный стиль. После...

10
Почтальон
Модератор
584 / 522 / 106
Регистрация: 22.03.2015
Сообщений: 3,630
Завершенные тесты: 1
23.11.2017, 18:15 #2
Немного неоднозначно, но...
Цитата Сообщение от dallan99 Посмотреть сообщение
В каком событии это делать?
Насколько помню в обработчике OnDrawCell() можно рисовать цвет ячейки при выводе значения в ячейку
Цитата Сообщение от dallan99 Посмотреть сообщение
Нужно по щелчку мыши при определенном условии поменять цвет ячейки и условие
По щелчку мыши где ?
0
dallan99
0 / 0 / 1
Регистрация: 15.05.2017
Сообщений: 8
24.11.2017, 08:07  [ТС] #3
По щелчку мыши на изменяемую цветом ячейке.
Детальнее:
Щелкаем мышкой по ячейке. Определяем что это именно нужная ячейка. Изменяем ее цвет и изменяем значение метки в таблице.
Если цвет белый - меняем на черный и наоборот.
0
lifeforce
202 / 162 / 73
Регистрация: 27.09.2010
Сообщений: 976
24.11.2017, 09:08 #4
dallan99, подобных тем на форуме - http://www.cyberforum.ru/search.php?searchid=13596538
хоть что то может подойти.
0
dallan99
0 / 0 / 1
Регистрация: 15.05.2017
Сообщений: 8
24.11.2017, 09:43  [ТС] #5
lifeforce,
Сообщение по вашей ссылке:

Извините, нет совпадений. Попробуйте указать другие ключевые слова.

Добавлено через 8 минут
Кроме того, я второй день сижу в инете, выискивая подобные темы. Если бы что-то нашла, не писала бы в форум.
0
Почтальон
Модератор
584 / 522 / 106
Регистрация: 22.03.2015
Сообщений: 3,630
Завершенные тесты: 1
24.11.2017, 12:43 #6
Получить выделенную ячейку можно с помощью Row и Cell.
Цитата Сообщение от dallan99 Посмотреть сообщение
Извините, нет совпадений. Попробуйте указать другие ключевые слова.
А вы указывали ? В подобных темах (в самом низу форума) несколько тем:
http://www.cyberforum.ru/cpp-builder/thread1606754.html
http://www.cyberforum.ru/cpp-builder/thread697307.html
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25622 / 17175 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
24.11.2017, 13:27 #7
Цитата Сообщение от Почтальон Посмотреть сообщение
А вы указывали ?
Была приведена ссылка на результаты поиска. Только вот тот, кто ее привел - не учел, что ссылка действительна
1) только для того, кто производил поиск
2) ограниченное время

Так что не нужно давать ссылки на результаты поиска. Лучше написать, при каких ключевых словах поиск выдал желаемые результаты...
0
dallan99
0 / 0 / 1
Регистрация: 15.05.2017
Сообщений: 8
24.11.2017, 14:21  [ТС] #8
ой, да искала и до сих пор ищу и в этом форуме и в других.
Лучше бы помогли, а не отправляли по этапу. Вот зачем писать такие сообщения? Для счетчика сообщений в форуме?
0
Почтальон
Модератор
584 / 522 / 106
Регистрация: 22.03.2015
Сообщений: 3,630
Завершенные тесты: 1
24.11.2017, 14:48 #9
dallan99, а чем вам не подходят темы, которые я привел ?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25622 / 17175 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
24.11.2017, 14:57 #10
Лучший ответ Сообщение было отмечено dallan99 как решение

Решение

Цитата Сообщение от dallan99 Посмотреть сообщение
Лучше бы помогли
Чтобы помочь - нужно иметь установленный TDbgridEh, как минимум. Потому что варианты для стандартного TDbGrid-а с ним не проходят. Именно поэтому ждите тех, у кого этот навороченный грид установлен. Был бы стандартный - давно бы уже показали, как делать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)
{
    String t = Column->Title->Caption;
    if(Column->Title->Caption == "Label")
    {
        int v = ClientDataSet1->FieldByName("Label")->AsInteger;
 
        ClientDataSet1->Edit();
        ClientDataSet1->FieldByName("Label")->AsInteger = 1 - v;
        ClientDataSet1->Post();
 
        DBGrid1->Invalidate();
    }
}
 
void __fastcall TForm1::DBGrid1DrawDataCell(TObject *Sender, const TRect &Rect, TField *Field,
          TGridDrawState State)
{
    TDBGrid *g = static_cast<TDBGrid*>(Sender);
    g->DefaultDrawing = false;
    if(Field->FieldName == "Label")
    {
        int f = Field->AsInteger;
        if(f)
        {
            g->Canvas->Brush->Color = clWhite;
        }
        else
        {
            g->Canvas->Brush->Color = clBlack;
            g->Canvas->Font->Color = clWhite;
        }
    }
    else
    {
        g->Canvas->Brush->Color = clWhite;
    }
    g->Canvas->FillRect(Rect);
    g->Canvas->TextOut(Rect.Left + 1, Rect.Top + 2, Field->Text);
}
1
dallan99
0 / 0 / 1
Регистрация: 15.05.2017
Сообщений: 8
24.11.2017, 15:35  [ТС] #11
volvo,
Вот за это спасибо.
Правда, закрашивается весь столбец.

Добавлено через 3 минуты
Почтальон,
Я смотрела и смотрю те темы, спасибо. Но там используется StringGrid, а он отличается событиями.

Добавлено через 25 минут
Огромное спасибо volvo.
Направил меня в нужное русло.
Все получилось при использовании двух событий.
CellClick - для изменения значения
DrawColumnCell - для закрашивания ячейки
0
24.11.2017, 15:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2017, 15:35
Привет! Вот еще темы с решениями:

Как изменить цвет кнопки?
Привет всем. Подскажите как изменить цвет кнопки??

Как изменить цвет CheckBox
Как изменить цвет CheckBox ? Font-&gt;Color почему-то не меняет. В меня C++Builder...

listbox изменить цвет scrool
Как изменить цвет скрола в listbox, и вообще возможно ли это?

Как изменить цвет курсора?
Здравствуйте! C++ Borland Builder/ Стоит следующая задача: &quot;Требуется ввести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru