Delphi tbsSeparator TToolButton на нетематической панели TToolBar с плоским стилем имеет вертикальную линию посередине - как это исправить?

Мой вопрос связан с этим:

Могут ли тематические панели инструментов Delphi иметь разделители расположенные по центру между кнопками инструментов?

У меня есть приложение Delphi 7, где у меня есть TToolButton с Style = tbsSeparator на TToolBar с Flat = True. Используя исправление, принятое в вопросе, упомянутом выше, tbsSeparator и tbsDivider рисуются, как и ожидалось, если панель инструментов тематическая (т.е. если у моего приложения есть манифест темы (XPMan) и темы Windows включены в системе, в которой работает приложение) .

Однако, если у приложения нет манифеста или если в системе не включены темы, tbsSeparator рисуется с вертикальной линией посередине, немного меньшей, чем у tbsDivider: введите здесь описание изображения

На скриншоте тот, что слева, — это tbsSeparator (у него не должно быть линии посередине), тот, что справа — это tbsDivider (с этим все в порядке).

Если я отключу стиль Flat, все будет в порядке, но я хочу стиль Flat на нетематической панели инструментов.

Итак, вопрос в том, как нарисовать tbsSeparator без вертикальной линии посередине на нетематическом TToolBar в стиле Flat?


person jedivader    schedule 16.04.2014    source источник
comment
@ Дэвид, я специально упоминаю этот вопрос, и он решает часть проблемы, но не ту часть, которую я упоминаю в этом вопросе. Это решает проблему с ненужной строкой слева в tbsSeparator и tbsDivider на тематической панели инструментов, но не с ненужной линией в середине tbsSeparator на нетематической панели инструментов. Обратите внимание, что я хочу сохранить стиль Flat на нетематической панели инструментов.   -  person jedivader    schedule 16.04.2014
comment
Дело в том, что решения нет. Это вывод из другого вопроса.   -  person David Heffernan    schedule 16.04.2014
comment
@ Дэвид, я не вижу такого вывода. И эта проблема здесь вообще не упоминается в другом вопросе. Хотя это связано, это другой вопрос. Проблема связана с тематической панелью инструментов и линией слева, здесь проблема связана с нетематической панелью инструментов и линией посередине. И проблема там имеет решение.   -  person jedivader    schedule 16.04.2014
comment
Это просто другая сторона медали. Вы не можете иметь это в обоих направлениях   -  person David Heffernan    schedule 16.04.2014
comment
Вопрос может не быть дубликатом, но первое предложение принятого ответа на другой вопрос отвечает на этот. Я разместил то же самое вместе с цитатой из документации.   -  person Sertac Akyuz    schedule 17.04.2014
comment
@Sertac спасибо, что прояснили ситуацию. Я не видел документацию msdn, я только просмотрел VCL one, в котором указано, что tbsSeparator отображается как пустое место, опуская или рисуя часть травления. Я думал, что причина проблемы может быть в другом, потому что линия рисуется посередине, когда панель инструментов не тематическая, и слева, когда она тематическая (я до сих пор не понимаю, почему). Тем не менее, я думаю, что лучший ответ — переопределить процедуру Paint, хотя, как говорит Дэвид, может быть мерцание.   -  person jedivader    schedule 17.04.2014
comment
@jedi - Пожалуйста. Что касается того, почему разделительная линия находится слева, когда панель инструментов тематическая, это особенность визуальных стилей, если вы спросите меня, разделительная линия находится на левом краю тематической части. Вы можете убедиться в этом, самостоятельно нарисовав деталь или скачав Обозреватель тем Майка Лишке и перейдите к нужной части.   -  person Sertac Akyuz    schedule 17.04.2014
comment
Я принял ответ @sertac на мой вопрос. Но что я понял из этого, так это то, что выхода из тупика нет. Рисовать себя здесь не получится.   -  person David Heffernan    schedule 18.04.2014
comment
@David, если вам действительно нужно абсолютно пустое место на нетематической панели инструментов Flat, рисовать себя, безусловно, лучше, чем ничего, несмотря на мерцание. Многие другие элементы управления все равно мерцают при изменении размера.   -  person jedivader    schedule 19.04.2014
comment
В моих приложениях ничего не мерцает. Я считаю, что разделитель вне центра является наименее плохим решением.   -  person David Heffernan    schedule 19.04.2014


Ответы (1)


Вот цитата из документации:

Стиль BTNS_SEP создает небольшой зазор между кнопками или рисует гравировку между кнопками на плоских панелях инструментов. ...

В нем говорится, что на разделителях плоских панелей инструментов нарисована гравюра. Там нет упоминания о зависимости от тем.

person Sertac Akyuz    schedule 16.04.2014