更改字体标签中间标题
我正在使用德尔福7.更改字体标签中间标题
我想在选项卡标题上指出与选项卡相关的页面有内容。如果在页面上的dbgrid中有内容,我想按照带有蜿蜒的字幕来表示,字母n表示为一个框。所以现在,而不是阅读“病人历史”的标题,它会阅读“病史”+一个小填充框。
由于符号是带有字体类型翼形的字母'n',我想要在字幕中间更改字体类型并添加字母n,从而在字幕结尾处产生一个小填充框。
Tabsheet.caption := 'Patient History ' + changefonttypetowinding + 'n'.
可以吗?
你在这里进入了自主绘制的领域,一旦考虑到主题,这并不是完全无足轻重的。如果你确实走了那条路线,那么我不会打扰Wingdings,我只是画一个TCanvas.FillRect
。
就我个人而言,我会考虑一个Unicode Delphi,并使用U + 2587(▇)或其朋友之一。
应该是两个答案,因为这里有两个完全不同的解决方案。我会把每一个都提高...; - > – 2011-03-05 17:48:18
@Chris非常好的你这么说!其实我不会考虑U + 2587以外的任何东西! – 2011-03-05 17:52:16
由于您没有使用支持Unicode的Delphi版本,因此您被限制为拥有者绘图或“ANSI”字符集,正如David所指出的那样。 (我的建议是,你升级到Delphi 2009+,Unicode是数字世界发生的最好的事情,使用Unicode,你可以得到数以万计的字符(理论上,每种字体!)而不是127或255。这包括各种语言以及技术和数学符号以及各种丁字形,甚至还有一个苯环:U + 232C苯环:⌬)
现在让我们假设升级是不可能的。那么,如果我是你,我会使用历史的“标准字符”来达到这个目的,即星号(*)。我在你的情况下非常强烈地推荐这个。
如果你需要一个黑色的方形,那么你必须做所有者绘图。你可以这样做:
// 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;
但是,请注意,这将禁用视觉主题!它看起来很可怕!请不要这样做!
+1我知道你不能抵制写一些所有者绘制代码的尝试! – 2011-03-05 19:56:24
代码+1。不过,如果我可以为你的答案的最后一行添加一个或两个额外的投票。除非你知道你在做什么,否则所有者绘制是*丑陋的,并且启用了主题。 – 2011-03-05 19:56:44
@大卫,你认识我!但是这次更多的是说明为什么你不应该试图自己画它。 – 2011-03-05 19:57:44
像这样的工作如此伟大与Unicode(Delphi 2009+)。 – 2011-03-05 19:30:29
建议:除非您准备转向Unicode,否则请使用Andreas简单的使用*的建议。如果这是一份合同工作,告诉他们如果他们支付您迁移到DelphiXE(给出估计),他们可以让黑色方块看起来不错。他们也可以拥有它,如果他们不介意它“看起来很有趣”,与业主汲取解决方案。或者他们现在可以拥有*,无需额外费用。 – 2011-03-05 19:59:59