Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2017, 12:19   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию [Хочу вникнуть суть компонентов] Вид CheckBox'а

Здравствуйте.
Давно интересуют разные компонентские вопросы, но не настолько, чтобы забить на всё остальное в попытках в них разобраться. Хотя иногда предпринимались попытки вникнуть в тему компонентов. И вот необходимость в ответах стала подходить ближе. Вопросы были разные, но часть из них можно свести к одному: как реализовать список-лист с отметками? Наиболее близкая реализация того, что я имею ввиду - плей-лист с чекбоксом, отмечающим проигрывать песню или нет.
Допустим, строки плейлиста можно реализовать через TListBox с прорисовкой нужного текста на канве. Но как туда встроить CheckBox в каждую строку? Но это позже. Сначала хотелось бы понять другое. Обычный ЧекБокс не всегда нормально смотрится. А как поменять его вид? Чтоб он был не кватратиком с галочкой а, например, звёздочкой, которая либо закрашена (если true), либо только её контур (если false). При попытках разобраться с тем как делать компоненты натыкался только на статьи как добавить новое не визуальное свойство уже существующему компоненту. Как-то не ответило это ни на один из моих вопросов...

P.S. Прошу прощения... Привык к тому, что другие разделы по Delphi мне практически никогда не требуются и ошибочно разместил тему здесь, а не в компонентах...
Ship_1 вне форума Ответить с цитированием
Старый 19.01.2017, 12:33   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну в компонентах есть всякие OnDraw, OnDrawItem. Можно там рисовать то, что надо.
Еще бывает надо наследовать класс и переопределять/добавлять что-то.

В целом конечно это не самый простой и безболезненный процесс.

В более современных фреймворках это как правило сделано более приятно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.01.2017, 13:03   #3
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Ну где OnDraw и OnDrawItem - там более-менее всё понятно, но его нет ни у ЧекБокса, ни у кнопки. Наследовать класс, наверное, ближе к теме, но что там и как переопределить, чтоб изменить вид ЧекБокса? Как он вообще визуально отображается изначально? Просто есть определённые в винде изображения, которые отрисовываются в зависимости от состояния, и надо переопределить путь к этим изображениям? Или тут что-то другое?
Ship_1 вне форума Ответить с цитированием
Старый 19.01.2017, 13:12   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В прорисовке можно и свой "чекбокс" с оригинальным видом отрисовать. И менять картинку в зависимости от состояния. А в обработчике клика мышью анализировать координаты и если они в области этого "чекбокса", то менять его состояние
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.01.2017, 13:31   #5
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В прорисовке можно и свой "чекбокс" с оригинальным видом отрисовать. И менять картинку в зависимости от состояния. А в обработчике клика мышью анализировать координаты и если они в области этого "чекбокса", то менять его состояние
Это тоже понятно. Но это переводит на другой вопрос: как это "спрятать" из основного кода? Наследовать TCheckBox.Item, добавив property CheckImage c путём к изображениям и свойство Item.Checked? А получится у этого "наследника" отследить позицию курсора?
Ну и всё равно остаётся интерес как происходит отрисовка встроенного CheckBox (откуда берётся картинка и как её поменять = как изменить вид встроенных компонентов)?
Ship_1 вне форума Ответить с цитированием
Старый 19.01.2017, 13:37   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
откуда берётся картинка
Так посмотрите его исходники.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.01.2017, 13:41   #7
ProgerDelphi
Новичок
Джуниор
 
Регистрация: 19.01.2017
Сообщений: 2
По умолчанию

TCheckListBox (вкладка Additional) не подойдёт?
ProgerDelphi вне форума Ответить с цитированием
Старый 19.01.2017, 13:44   #8
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так посмотрите его исходники.
Пробовал. Дошёл до TWinControl, где и запутался.
Ship_1 вне форума Ответить с цитированием
Старый 19.01.2017, 13:50   #9
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от ProgerDelphi Посмотреть сообщение
TCheckListBox (вкладка Additional) не подойдёт?
Ну как бы да, но нет Тип тот, но вид другой нужен. Опять же, сам CheckBox другого вида и положение его другое.
Ship_1 вне форума Ответить с цитированием
Старый 19.01.2017, 14:26   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Его же не генокод делфийский прорисовывает, а виндовс в соответствии со стилем заданным при создании окна. И навряд-ли для чекбокса есть некие другие стили, самому рисовать нужно ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хочу выучиться на программиста с нуля. Хочу понять всю суть ООП, посоветуйте материалы с доступным изложением. jake_progib Помощь студентам 11 23.01.2016 01:59
Как выполнить функцию в случае нажатия на CheckBox, если данный CheckBox был добавлен через код? PAMAC Microsoft Office Excel 7 21.02.2013 15:33
Парсим текст, не могу вникнуть antoxamad Помощь студентам 7 23.02.2012 10:02
c++,класс вектор вникнуть в задание ahab Помощь студентам 5 26.12.2009 13:52
Помогите вникнуть в условие задачи. Что нужно сделать garald50 Паскаль, Turbo Pascal, PascalABC.NET 3 04.06.2008 19:42