Как скрыть границу вокруг TRadioGroup

У меня есть две радиокнопки в TRadioGroup. Вся логика того, как они должны работать, в порядке. Но у контроллера TRadioGroup есть рамка, которую я думал, что смогу удалить, используя свойство border или что-то в этом роде. Но элемент управления, похоже, не имеет какого-либо свойства, которое имеет какое-либо сходство с границей / фреймом. Как настроить контроллер, чтобы он не включал фрейм?

3 ответа

Решение

TRadioGroup не поддерживает то, что вы ищете. Место два TRadioButton компоненты на TPanel вместо. Тогда вы можете сделать так, как вы хотите.

Я не думаю, что вы можете спрятать границу в стандартном окне группы радио. Похоже, что вы можете создать собственного потомка и переопределить рисование, если рисуете нормально, но этот подход может быть немного более связан с поддержкой тем. В целом, похоже, много работы для этого пути.

Следующим наиболее очевидным подходом является замена группы радиостанций несколькими отдельными радиокнопками на контейнере, например на панели. Это сработало бы и было бы простым кодом, но могло бы стать грязным. Кажется, много работы для небольшой выгоды, и я достаточно ленив, чтобы искать другой вариант.

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

Я знаю, что это не лучшая практика, но у меня была похожая проблема, и я не мог все переделать. Поэтому я сделал это, чтобы просто скрыть границу (и до сих пор прекрасно работает).

HANDLE Region = CreateRectRgn(3, 3, RadioGroup->Width-3, RadioGroup->Height-3) ;

SetWindowRgn(RadioGroup->Handle, Region, true);
Другие вопросы по тегам