更改Tab mid caption上的字体

时间:2011-03-05 16:34:22

标签: delphi fonts caption

我正在使用Delphi 7。

我想在标签标题上指出与标签相关的页面有内容。如果页面上的dbgrid中有内容,我想跟随一个绕组的标题,用字母n表示,它显示为一个方框。所以现在而不是标题为“Paient History”的标题,它将显示为“患者历史”+一个小小的填充框。

由于符号是字母'n',字体类型为wingding,我想更改字幕中间的字体类型,并添加字母n,从而在标题末尾添加一个小填充框。< / p>

Tabsheet.caption := 'Patient History ' + changefonttypetowinding + 'n'.

可行?

2 个答案:

答案 0 :(得分:6)

你在这里进入了所有者抽奖的领域,一旦你考虑到主题,这并不是完全无足轻重的。如果你确实走了那条路,那么我就不会打扰Wingdings了,我只想把这个方框画成TCanvas.FillRect

就个人而言,我会查看Unicode Delphi并使用U + 2587(▇)或其中一位朋友。

答案 1 :(得分:3)

由于您没有使用支持Unicode的Delphi版本,因此您只能使用所有者绘图或“ANSI”字符集,正如David所指出的那样。 (我的建议是你升级到Delphi 2009+.Unicode是数字世界发生过的最好的事情。使用Unicode,你会得到数万个字符(理论上,每个字体!)而不是127或255。这包括各种语言以及技术和数学符号以及各种装饰品。甚至还有一个苯环:U + 232C BENZENE RING:⌬)

现在让我们假设无法升级。然后,如果我是你,我会为此目的使用历史“标准字符”,即星号(*)。在你的情况下,我非常强烈地推荐这一点。

如果你相信,想要一个黑色方格,那么你必须做主人画。你可以这样做:

// Please don't do this -- see comments below
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
const
  Padding = 8;
  SqSize = 6;
var
  capt: string;
  r: TRect;
begin
  capt := TTabControl(Control).Tabs[TabIndex];
  r := Rect;
  r.Left := r.Left + Padding;
  DrawText(Control.Canvas.Handle, capt, length(capt), r, DT_SINGLELINE or DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS);
  r.Left := r.Right - Padding - SqSize;
  r.Right := r.Left + SqSize;
  r.Top := (r.Bottom - r.Top - SqSize) div 2;
  r.Bottom := r.Top + SqSize;
  FillRect(Control.Canvas.Handle, r, GetStockObject(BLACK_BRUSH));
end;

但请注意,这将禁用视觉主题!它看起来很可怕!请不要这样做!