Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 13.08.2021
Сообщений: 42

Запрет изменения состояния индикации компонента CheckListBox

07.12.2021, 03:03. Показов 2076. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, сама суть проблемы находится в названии темы. Возможно ли это вообще? Или стоит использовать какой-нибудь другой компонент?

Суть моей идеи заключается в том, что в какой-то момент работы программы на компоненте должно находится несколько строк с выключенными индикаторами. При нажатии на кнопку "Старт" происходят какие-то вычисления, в которых на каких-то промежуточных этапах индикаторы строк компонента загораются и в дальнейшем служат для отображения информации на экране, в зависимости от выбранной строки. Думаю, это стоит выполнить при обработке двойного щелчка мыши. Но это не проблема, алгоритм уже продуман, вот только остается решить проблему с фиксацией индикаторов, у пользователя не должно быть возможности их изменить.

И ещё вопрос не по теме. Есть ли какой-то способ добавления прогресс баров в правой части строк на компоненте в момент включения индикатора? Программно. То есть без их непосредственного добавления во время проектирования. Ведь невозможно предугадать, сколько строк будет на этом компоненте, поэтому эти индикаторы будут добавляться туда динамически. Но если так, то как с ними работать и в случае чего, обрабатывать их события? Нужно ли создавать массив указателей на эти объекты или есть какой-нибудь более эффективный способ для работы с динамически добавляемыми компонентами? И чтобы это не выглядело слишком топорно.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2021, 03:03
Ответы с готовыми решениями:

Отслеживание состояния компонента
Доброго времени суток, уважаемые. Вероятно, вопрос покажется Вам глупым, но если бы я знал больше всех, то не спрашивал бы=( В общем,...

Отслеживание изменения состояния службы
7. Служба отслеживает изменения состояния (приостановка, запуск, остановка) заданной службы и фиксирует их в текстовом файле. - у меня вот...

[WPF] Триггер, изменяющий компонент в зависимости от состояния другого компонента
Доброго времени суток! Помогите пож-та советом, нигде не могу найти решение проблемы. Ситуация: (WPF, Visual Studio 2017) Есть...

4
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.12.2021, 12:00
Лучший ответ Сообщение было отмечено vulivud как решение

Решение

vulivud, я бы поступил следующим образом (см. проект). Насчет топорности - не уверен.
Ну, и все настройки и вариации - в зависимости от вашей задачи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
     std::vector<TProgressBar*> bar(99);
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckListBox1ClickCheck(TObject *Sender)
{
    CheckListBox1->State[1]=cbUnchecked;
    CheckListBox1->State[3]=cbUnchecked;
    int P = CheckListBox1->Items->Count,
        ww = CheckListBox1->Width,
        w2 = Panel1->Width - CheckListBox1->Width - 20,
        h2 = CheckListBox1->ItemHeight;
    for (int i=0;i<P;i++)  {
      if(!bar[i]) {
        bar[i]=new TProgressBar(this);
        bar[i]->Parent = Panel1;
        bar[i]->Smooth = true;
        bar[i]->SetBounds(ww+12,5+i*h2,w2,h2-1);
      }
      bar[i]->Position = 10*(i+2);
      bar[i]->Visible = CheckListBox1->Checked[i];
    } 
}
//---------------------------------------------------------------------------
Вложения
Тип файла: zip 42.ZIP (217.8 Кб, 6 просмотров)
1
2 / 2 / 0
Регистрация: 13.08.2021
Сообщений: 42
07.12.2021, 15:44  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
я бы поступил следующим образом
Огромное спасибо за идею с прогресс барами, пожалуй, так и сделаю
Цитата Сообщение от nick42 Посмотреть сообщение
Насчет топорности - не уверен
Мне тоже приходила подобная идея в голову: в onClickCheck устанавливать значения на требуемые, но проблема в том, что это вообще не выглядит элегантно, а на мой взгляд каждый программист должен стремиться к элегантности своих решений.

Проблема этого алгоритма в том, что перед наступлением этого события галочка всё-таки ставится, а уже потом в событии мы эту галочку программно сбрасываем. Конечно, пользователь этого даже и не заметит, но хотелось бы всё-таки обработать какое-то событие включения/отключения индикатора перед тем, как он на самом деле установится (хоть и на какие-то микросекунды, перед тем, как в onClickCheck его окончательно сотрут), если это вообще возможно.

По задумке моего проекта (см. во вложениях)у меня есть два чекбокса. В первом отображаются найденные приборы для опроса. В нём же мы устанавливаем галочку напротив тех приборов, которые хотим опросить. Затем эти приборы, напротив которых мы установили галочку в первом чекбоксе, добавляются во второй Чекбокс, но пока без галочек. А в нём, после нажатия на кнопку "Запустить вычисления" и всех вычислений (в настоящей программе - в потоке), должны выводится галочки напротив тех приборов, которые опрошены. При этом пользователю нельзя давать возможность снимать эти галочки во втором чекбоксе, потому что это будет выглядеть глупо, прибор ведь опрошен до конца, об этом и сигнализирует галочка. А сам процесс опроса конкретного прибора отображается в прогресс барах напротив.

Но это была суть моей идеи для понимания моих целей. И я не просто так спрашиваю про обработку установки/снятия индикатора чекбокса до самой установки/снятия, ведь в компоненте StringGrid эта функция с выделением реализована:
C++
1
2
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow,
          bool &CanSelect)
где CanSelect в функции можно ставить либо в true, либо в false. При false выделения не произойдет. При этом никакого сброса выделения в самом обработчике не происходит. Хотелось бы иметь такую возможность с контролем индикаторов чекбокса, что-то типо булевы CanChange или что-то вроде того.

И ещё вопрос - как убрать границы чекбокса, чтобы он сливался с самой панелью?
вопрос возможно и глупый, но я почему-то не нашёл такого свойства
Вложения
Тип файла: rar TestProj.rar (7.9 Кб, 4 просмотров)
0
2 / 2 / 0
Регистрация: 13.08.2021
Сообщений: 42
07.12.2021, 15:47  [ТС]
И ещё в моём коде прогресс бары добавляются после выполнения команды Sleep, то есть после возврата из события клика по кнопке, хотя в коде этого события должны появляться до первого Слипа. Может, я чего-то не понимаю, но как-то не по логике программа работает.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.12.2021, 16:47
Цитата Сообщение от vulivud Посмотреть сообщение
как убрать границы чекбокса, чтобы он сливался с самой панелью?
сделать BorderStyle bsNone.

Добавлено через 3 минуты
Цитата Сообщение от vulivud Посмотреть сообщение
в моём коде прогресс бары добавляются после выполнения команды Sleep
перед циклом вставить Panel2->Repaint();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2021, 16:47
Помогаю со студенческими работами здесь

Пререрисовка таблицы после изменения состояния
Доброго времени суток! Есть таблица, в которой есть данные о товаре, которые хранятся в localStorage. При нажатии на крестик...

DataGridViewCheckBoxColumn событие изменения состояния ячейки
И так я создаю вот так столбец: DataGridViewColumn actual = new DataGridViewCheckBoxColumn(); actual.HeaderText =...

БД для отслеживания изменения состояния друзей в Вк
Привет :3 Есть задача - следить за изменением состояния друзей в Вк(записывать кто выбыл, кого добавили). У меня, на данный момент,...

Компоненты не перерисовываются после изменения состояния Redux
Здравствуйте. Я пытаюсь составить список дел. Я взял UI из примера Redux и начал писать логику по-своему. Я столкнулся с проблемой. Итак,...

Запрет на изменение внутреннего состояния поля коллекции, доступное через свойство класса
Привет всем. Возник такой вопрос. Как мне запретить изменять внутреннее состояние коллекции, которая объявлена как поле readonly, и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru