Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157

CheckListBox - как выделить цветом выбранную строку

08.07.2013, 19:04. Показов 5781. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Выводится текст в CheckListBox, и мне нужно выделить цветом одну строку, на которую я поставил галочку. Сделал только это, что при нажатии на кнопку, цвет меняет весь текст, а не выбранная строка. Как сделать чтобы только выбранную строку?

C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button5Click(TObject *Sender)
{
for (int i = 0; i < CheckListBox1->Items->Count; i++) // Идем циклом сколько строк
if (CheckListBox1->Checked[i])   // Если чекбокс активирован
   { ColorDialog1->Execute();  // Открываем цвета
     CheckListBox1->Font->Color = ColorDialog1->Color;
   }
}
Миниатюры
CheckListBox - как выделить цветом выбранную строку  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2013, 19:04
Ответы с готовыми решениями:

Как изменить выбранную строку в ListBox
Добрый день,есть ListBox и есть Edit, так же кнопки Добавить(координаты вершин, через запятую),Удалить и Изменить . У меня кнопка изменить...

Как найти и выделить желтым цветом все ячейки со словом?
void __fastcall TForm1::FormCreate(TObject *Sender) { S1-&gt;Cells= &quot;ИстГосПрава п-592 Жандарова Е.А.312&quot;; } ...

Выделить цветом некоторые значения
Здравствуйте!!! Возникла проблема: в компоненте RichEdit у меня содержатся числа, мне надо найти максимальное число и его выделить ...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,912
Записей в блоге: 12
08.07.2013, 19:21
Цвет отдельной строки надо менять по событию OnDrawItem (разумеется, стиль CheckListBox-а придется выставлять в lbOwnerDraw...)
1
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157
08.07.2013, 19:23  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Цвет отдельной строки надо менять по событию OnDrawItem (разумеется, стиль CheckListBox-а придется выставлять в lbOwnerDraw...)
Можете привести какой-то пример, сталкиваюсь с этим первый раз.
Не имею представления как это реализовать.
Спасибо.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,912
Записей в блоге: 12
08.07.2013, 19:35
Ну, как-то вот так:
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
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    CheckListBox1->Style = lbOwnerDrawFixed;
}
 
void __fastcall TForm1::CheckListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,
          TOwnerDrawState State)
{
    TCheckListBox *clb = dynamic_cast<TCheckListBox *>(Control);
    if(clb->Checked[Index])
        clb->Canvas->Font->Color = clBlue;
    else
        clb->Canvas->Font->Color = clBlack;
 
    clb->Canvas->Brush->Color = clWhite;
    clb->Canvas->FillRect(Rect);
    clb->Canvas->TextOut(Rect.Left + 1, Rect.Top + 1, clb->Items->Strings[Index]);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::CheckListBox2ClickCheck(TObject *Sender)
{
    CheckListBox1->Repaint();
}
1
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157
08.07.2013, 19:51  [ТС]
Спасибо. Поясните, пожалуйста вот эти строчки:
C++
1
2
3
4
5
6
7
clb->Canvas->FillRect(Rect); // что такое FillRect (Rect) ?
clb->Canvas->TextOut(Rect.Left + 1, Rect.Top + 1, clb->Items->Strings[Index]);
 
void __fastcall TForm1::CheckListBox2ClickCheck(TObject *Sender)
{
    CheckListBox1->Repaint(); // Что такое Repaint ?
}
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.07.2013, 20:03
Цитата Сообщение от DeadZone Посмотреть сообщение
CheckListBox1->Repaint(); // Что такое Repaint ?
насколько я помню это метод перерисовки компонента в данном случае в роли компонента выступает CheckListBox1
1
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157
08.07.2013, 20:17  [ТС]
Не могу реализовать, чтобы так работал : отметил галочкой выбрал цвет в colordialog нажал Ок, и строка приняла выбранный цвет.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,912
Записей в блоге: 12
08.07.2013, 21:39
Лучший ответ Сообщение было отмечено volvo как решение

Решение

А так не будет работать. Потому что красится не только та строка, которая выбрана сейчас, а все строки, которые отмечены галочкой окрашиваются в один и тот же цвет.

А теперь представь себе, что будет, если ты выберешь один элемент, покрасишь его красным, например, потом выберешь еще один, и захочешь покрасить его синим.

В таком случае решением будет:
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
void __fastcall TForm1::CheckListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,
          TOwnerDrawState State)
{
    TCheckListBox *clb = dynamic_cast<TCheckListBox *>(Control);
    if(clb->Checked[Index])
    {
        // Взять цвет из поля Objects и покрасить строку этим цветом
        clb->Canvas->Font->Color = reinterpret_cast<TColor>(clb->Items->Objects[Index]);
    }
    else
    {
        clb->Canvas->Font->Color = clBlack;
    }
    clb->Canvas->Brush->Color = clWhite;
    clb->Canvas->FillRect(Rect);
    clb->Canvas->TextOut(Rect.Left + 1, Rect.Top + 1, clb->Items->Strings[Index]);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::CheckListBox1ClickCheck(TObject *Sender)
{
    CheckListBox1->Repaint(); // при сбросе галки перерисует элемент черным
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button21Click(TObject *Sender)
{
    if(CheckListBox1->Checked[CheckListBox1->ItemIndex] && ColorDialog1->Execute())
    {
        // Если поставили галочку, то выбранный цвет присвоить полю Objects
        CheckListBox1->Items->Objects[CheckListBox2->ItemIndex] = reinterpret_cast<TObject*>(ColorDialog1->Color);
        CheckListBox1->Repaint();
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.07.2013, 21:39
Помогаю со студенческими работами здесь

Как выделить строку в поле Memo?
Здравствуете! Вывожу содержимое файла в поле Memo. Memo1-&gt;Lines-&gt;LoadFromFile(OpenDialog1-&gt;FileName); Поле Memo с вертикальной...

Отмеченные строки ChecklistBox'a вывести в другой ChecklistBox
Собственно вопрос в заголовке. Код по сути написан: void __fastcall TForm1::CheckListBox1ClickCheck(TObject *Sender) { int i; ...

Удалить выбранную строку из базы данных в builder c++
как можно из базы данных удалить запись или полностью строку

Как выделить строку в БД добавленную запросом?
Здравствуйте, у меня есть код ADOQuery1-&gt;Close(); ADOQuery1-&gt;SQL-&gt;Clear(); ADOQuery1-&gt;SQL-&gt;Text = &quot;INSERT INTO...

Можно ли как-то выделить строку другим цветом?
так не катит,он весь текст делает таким.


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru