Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > изменение вида TCheckBox


Автор: safright 14.8.2008, 12:52
Доброго времени суток!
Суть задачи - "сделать клон с другим лицом", т.е. полностью скопировать компонент, изменив его внешние данные. В данном случае - TCheckBox. Необходимые изменения: перерисовать сам бокс (убрать 3Д границы и изменить область на RoundRect) и сделать так, чтобы лейбл с ним рядом рисовался на прозрачном фоне. А, еще изменить цвет внутри коробочки (желательно - и grayed) на произвольный.

В принципе, я представляю, как изменить внешний вид (region'ы рулять! smile ), но как получить дескриптор этого бокса я полный без понятий  smile 

Дабы не переписывать предка TCustomCheckBox, хорошо бы все реализовать на API... собсна, затем и пост smile

Автор: Burka 14.8.2008, 21:13
Какое там вин апи
http://www.hostmake.ru/articles/delphi/345/

Автор: safright 14.8.2008, 21:55
Цитата(Burka @ 14.8.2008,  21:13)
Какое там вин апи
http://www.hostmake.ru/articles/delphi/345/

Я этих книжек/статей/постов на форумах за последние пару недель перечитал стока, что уже могу сам написать книжку. Другое дело, что где-то в 90% из них говориться:  предком берем что-нибудь типа TWinControl, рисуем свое, используем TCanvas, и радуемся! Так вот, уважаемые товарищи: фигня!  smile  У мну конкретная задача - сделать клон с изменением графики. Если кто смотрел исходники vcl - поймет, почему API. Если делать ручками заново, то я буду это делать два месяца (учитывая, что мне не тока ентот чекбокс передлывать), а эффективность у таких "компонетов" будет как у танка в горах.

З.Ы. пример - переделывал так TEdit. Начать с того, что НИ ОДИН стандартный компонент или высокоуровневое средство в дельфях не дает доступ к регионам, а как без них прикажете рисовать окошки неправильной формы? Пока про это не узнал, все тормозило и глючило. После того, как узнал и переделал - осталось 15 строчек кода, который работает и все делает и несколько override процедур, которые его вызывают  smile . А, чуть не забыл - еще пять строчек в конструкторе задают начальные цвета! Огромный объем, правда?  smile 

Немного уточню вопрос - есть способ узнать дескриптор для вложенных компонентов? (пример - combobox, у которого отдельно область текста, отдельно кнопка, отдельно окошко списка). Как вариант - есть книжки/сайты/статьи, где разбираются компоненты vcl?

Автор: Yanis 15.8.2008, 09:04
safright,
http://www.sources.ru/delphi/delphi_change_checkboxes.shtml

Автор: safright 15.8.2008, 11:57
Пасиб, Поработитель мира  smile 
Нашел несколько интересных вещей, а коммент:
  
Код

public
    { Public declarations }
    // Если поместить Create и Destroy в раздел protected,
    // то Delphi начинает ругаться.
    Constructor Create(AOwner : TComponent); override;
    Destructor Destroy; override; 

меня порадовал  smile 

...ППЦ... в DRKB есть мессаги винды... и так много  smile smile

Тема все еще открыта, ждем-с.

Автор: safright 15.8.2008, 23:10
Эх, судя по всему, сделать как мне хоцца врядли получится... Дело в том, что с простыми компонентами (типа TEdit, TProgressBar и т.п.) подход "перекроить окошко, пока оно не очухалось" работает, т.к. собственно оконных элементов там одна штука (не вдаваясь в подробности - на самом деле больше, но это не важно), т.е. только один элемент может получить фокус ввода, есть один дескриптор, который и отвечает за окошко. В TCheckBox, TComboBox таких элементов больше. Так, в ComboBox есть аж 3 вложенных окна (дескрипторы можно достать в protected, имена FListHandler, FEditHandler, FDropDownHandler) и один дескриптор (собственно, свойство Handle), отвечающий за само окно. В общем - жуть!  smile 

Придется все эти писать ручками... ну да ладн.

Вопрос модерам и всем желающим - стоит статью тиснуть про простые вещи (Edit, ProgressBar и еще несколько), как их переделывать визуально? Тема, как показала практика, нетривиальная, вдруг пригодиться...

Всем спасибо и досвидания.

Автор: Burka 16.8.2008, 01:53
Цитата

Вопрос модерам и всем желающим - стоит статью тиснуть про простые вещи (Edit, ProgressBar и еще несколько), как их переделывать визуально?

Поддерживаю, вот есть исходник прогрессбара в котором можно вставлять картинку вместо полоски. Но разобратся в этом и правда сложно. 


Автор: Del2007 27.9.2008, 19:14
Хочу CheckBox'ы как у Nod'а smile 

Автор: FoXIT 5.5.2009, 10:05
Товарищи!
Мне тоже нужен прозрачный чекбокс.
Может есть готовые компоненты?
Или кто нибудь сможет сделать стандартный чекбокс прозрачным.

Автор: cemick 6.5.2009, 12:33
На крайний случай WM_Paint ловить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)