什么是Delphi相当于“+ =”用于向集合中添加元素?

时间:2012-07-21 18:18:44

标签: delphi operators set delphi-7

在其他语言(如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}}

可以这样做吗?还是没那么多?

4 个答案:

答案 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文件中的所有声明。这可能听起来很复杂,但不到一个小时的工作。祝你好运!