我正在使用Delphi 7。
我想在标签标题上指出与标签相关的页面有内容。如果页面上的dbgrid中有内容,我想跟随一个绕组的标题,用字母n表示,它显示为一个方框。所以现在而不是标题为“Paient History”的标题,它将显示为“患者历史”+一个小小的填充框。
由于符号是字母'n',字体类型为wingding,我想更改字幕中间的字体类型,并添加字母n,从而在标题末尾添加一个小填充框。< / p>
Tabsheet.caption := 'Patient History ' + changefonttypetowinding + 'n'.
可行?
答案 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;
但请注意,这将禁用视觉主题!它看起来很可怕!请不要这样做!