Как скрыть границу вокруг TRadioGroup
У меня есть две радиокнопки в TRadioGroup. Вся логика того, как они должны работать, в порядке. Но у контроллера TRadioGroup есть рамка, которую я думал, что смогу удалить, используя свойство border или что-то в этом роде. Но элемент управления, похоже, не имеет какого-либо свойства, которое имеет какое-либо сходство с границей / фреймом. Как настроить контроллер, чтобы он не включал фрейм?
3 ответа
TRadioGroup
не поддерживает то, что вы ищете. Место два TRadioButton
компоненты на TPanel
вместо. Тогда вы можете сделать так, как вы хотите.
Я не думаю, что вы можете спрятать границу в стандартном окне группы радио. Похоже, что вы можете создать собственного потомка и переопределить рисование, если рисуете нормально, но этот подход может быть немного более связан с поддержкой тем. В целом, похоже, много работы для этого пути.
Следующим наиболее очевидным подходом является замена группы радиостанций несколькими отдельными радиокнопками на контейнере, например на панели. Это сработало бы и было бы простым кодом, но могло бы стать грязным. Кажется, много работы для небольшой выгоды, и я достаточно ленив, чтобы искать другой вариант.
Есть клудж, который вы можете использовать. Если вы поместите радиогруппу на панель, а не прямо на форму (или другой фон), вы можете сделать панель меньше по сравнению с радиогруппой. Вы хотите, чтобы панель была такой же большой, как внутренняя часть радиогруппы, но не такой большой, как граница. Затем установите в верхней и левой части группы радиостанций отрицательные числа, чтобы граница выходила за пределы родительской панели. Граница не видна таким образом.
Я знаю, что это не лучшая практика, но у меня была похожая проблема, и я не мог все переделать. Поэтому я сделал это, чтобы просто скрыть границу (и до сих пор прекрасно работает).
HANDLE Region = CreateRectRgn(3, 3, RadioGroup->Width-3, RadioGroup->Height-3) ;
SetWindowRgn(RadioGroup->Handle, Region, true);