在其他语言(如C ++)中,有些运算符可以执行plus-equals或or-equals类型的操作来添加其他样式/标志。 Delphi中是否有等价物?
现在我有一些代码:
label1.Font.Style := label1.Font.Style + [fsBold];
label2.Font.Style := label2.Font.Style + [fsBold];
但是如果可能的话,我希望能够简化一些简化,而不会在赋值运算符的两边复制标签名称,这些内容类似于:label1.Font.Style += [fsBold];
或{{ 1}}
可以这样做吗?还是没那么多?
答案 0 :(得分:13)
包括你正在寻找的东西。不幸的是,你遇到的问题是Label.Font.Style是一个属性,必须分配给var而不是传递给它。但是你可以这样做:
var
fontStyle: TFontStyles;
begin
fontStyle := Label1.Font.Style;
Include(fontStyle, fsBold);
Label1.Font.Style := fontStyle;
答案 1 :(得分:11)
Delphi具有Inc功能,但它不适用于属性:
Inc(a); // Increment a with 1
Inc(a, 5); // Increment a with 5
如果您需要经常为字体添加样式,可以编写一个过程:
procedure AddStyle(const AFont: TFont; const AStyle: TFontStyles);
begin
AFont.Style := AFont.Style + AStyle;
end;
(使用Delphi的更高版本,您可以使用类助手)。
答案 2 :(得分:8)
这是我可以推荐with
声明的少数情况之一:
with label1.Font do Style := Style + [fsBold];
with label2.Font do Style := Style + [fsBold];
通常情况下,with
的问题是不清楚成员访问的内容是什么,什么不是,但如果范围是使用单个属性的单个语句,那就足够清楚。
答案 3 :(得分:0)
子类TLabel
输入并创建一个这样的方法:
procedure TMyLabel.AddStyle(const AStyle: TFontStyles);
begin
Self.Font.Style := Self.Font.Style + AStyle;
end;
然后,您可以将该类放入bpl
包并将其安装到编辑器中。之后,您可以将所有标签替换为自定义标签。对于大型项目,我建议 Notepad ++ 替换.pas
和( text!).dfm
文件中的所有声明。这可能听起来很复杂,但不到一个小时的工作。祝你好运!