我已将TDBRadioGroup
添加到表单中。
我真的很喜欢它左边的标题而不是顶部(表格有点忙碌和高大,而我正试图挤进去)。
我可以将自己的标签添加到Radio Group的左侧。但是控制仍然坚持保留不存在的标题的空间。有没有办法可以完全关掉它?
到目前为止,我们提出的最好的方法是将它贴在TPanel
上,然后将顶部的几条线隐藏在面板之外。
答案 0 :(得分:2)
TGroupBox
(及其后代TDBGroupBox
)基本上是围绕Windows GroupBox的包装器。该控件设计为在左上角运行用户定义的标签,并且没有任何样式设置可以将其删除。
因此,如果没有创建自己的控件来自己托管一系列TRadioButton
控件并显示它们,则没有内置方法可以禁用为标题保留的空间。当然,您可以通过设置Caption := ''
来抑制文本,但不会仅仅因为没有显示标题而删除文本下延的填充。
答案 1 :(得分:0)
您可以覆盖TRadioGroup的绘制过程,以便将框架绘制得更接近项目列表的顶部。您可以创建一个TNoCaptionRadioGroup类型的新组件。您可能仍然必须使用您尝试过的面板技巧,但通过降低框架的顶部,您可以获取不存在的标题所消耗的空间。像这样:
tNoCaptionRadioBox = class(TRadioGroup)
protected
procedure paint; override;
end;
procedure tNoCaptionRadioBox.paint;
var
H: Integer;
R: TRect;
begin
with Canvas do
begin
Font := Self.Font;
H := TextHeight('0');
R := Rect(0, H, Width, Height);
if Ctl3D then
begin
Inc(R.Left);
Inc(R.Top);
Brush.Color := clBtnHighlight;
FrameRect(R);
OffsetRect(R, -1, -1);
Brush.Color := clBtnShadow;
end else
Brush.Color := clWindowFrame;
FrameRect(R);
end;
end;
这取自绘制TCustomGroupBox的代码。我删除了绘制标题的代码,并将框架的顶部更改为字体的完整高度。您仍然可以在Windows希望的位置绘制实际带字幕的单选按钮,并使用默认间距。
请记住通过运行包安装工具来注册新组件。
procedure Register;
begin
RegisterComponents('myComponents', [tNoCaptionRadioBox]);
end;