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

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


person inquam    schedule 15.09.2011    source источник


Ответы (3)


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

person Remy Lebeau    schedule 15.09.2011
comment
Я думал, что это может быть так, но почему-то надеялся, что у создателей RAD Studio действительно были мозги :)... Должны быть миллионы пользователей, которые хотели бы иметь группу радиокнопок, но не были бы вынуждены иметь их. рама. О, нет, подождите... миллионы... хммм... Большинство, наверное, уже отказались от RAD Studio :) - person inquam; 16.09.2011

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

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

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

person Glen Morse    schedule 01.03.2014
comment
Хороший совет по использованию панели меньшего размера. Спасибо. Кроме того, убедитесь, что для BevelOuter панели установлено значение bvNone. - person lkessler; 24.07.2016

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

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

SetWindowRgn(RadioGroup->Handle, Region, true);
person Peter    schedule 01.03.2017