有没有办法关闭TDBRadioGroup上的标题

时间:2015-03-05 21:07:16

标签: delphi delphi-xe7

我已将TDBRadioGroup添加到表单中。

我真的很喜欢它左边的标题而不是顶部(表格有点忙碌和高大,而我正试图挤进去)。

我可以将自己的标签添加到Radio Group的左侧。但是控制仍然坚持保留不存在的标题的空间。有没有办法可以完全关掉它?

到目前为止,我们提出的最好的方法是将它贴在TPanel上,然后将顶部的几条线隐藏在面板之外。

2 个答案:

答案 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;