12

在 C++ 等其他语言中,有一些运算符可以执行加号或等于号类型的运算来添加额外的样式/标志。德尔福有等价物吗?

现在我有一些代码,如:

label1.Font.Style := label1.Font.Style + [fsBold];
label2.Font.Style := label2.Font.Style + [fsBold];

但是,如果可能的话,我希望将其简化为更简洁的内容,而无需在赋值运算符的两侧复制标签名称,类似于:label1.Font.Style += [fsBold];label1.Font.Style := self + [fsBold];

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

4

4 回答 4

14

包括您正在寻找的内容。不幸的是,您遇到了 Label.Font.Style 是一个属性并且必须分配给 var 而不是由 var 传递的问题。但是,您可以这样做:

var
  fontStyle: TFontStyles;
begin
  fontStyle := Label1.Font.Style;
  Include(fontStyle, fsBold);
  Label1.Font.Style := fontStyle;
于 2012-07-21T18:33:00.763 回答
12

with这是我可以推荐该声明的少数情况之一:

with label1.Font do Style := Style + [fsBold];
with label2.Font do Style := Style + [fsBold];

通常,问题with在于不清楚什么是成员访问,什么不是,但如果范围是使用单个属性的单个语句,那就足够清楚了。

于 2012-07-21T18:28:02.153 回答
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,您可以使用类助手)。

于 2012-07-21T18:21:12.367 回答
0

子类TLabel类型并创建这样的方法:

procedure TMyLabel.AddStyle(const AStyle: TFontStyles);
begin
 Self.Font.Style := Self.Font.Style + AStyle;
end;

然后您可以将类放入一个bpl包中并将其安装到编辑器中。之后,您可以将所有标签替换为自定义标签。对于大型项目,我建议使用Notepad++替换.pas和(文本!.dfm文件中的所有声明。这可能听起来很复杂,但它不到一个小时的工作。祝你好运!

于 2012-07-21T18:31:20.520 回答