delphi - 手动跳过从 dfm 创建的组件

标签 delphi

有没有办法跳过从 dfm 创建的组件?

我有一个有时不想创建的可视化组件。当然,我可以手动创建组件,但是由于组件有很多项目,这将需要大量工作。

最佳答案

实际上一种方法可以做到这一点。这是一个跳过特定类的组件的示例。

向您的表单添加两个类似以下的事件处理程序:

procedure TForm224.DoCreateComponent(Reader: TReader; ComponentClass: TComponentClass; var Component: TComponent);
begin
  if ComponentClass = <whatever component class shall be skipped> then begin
    Abort;
  end;
end;

procedure TForm224.DoReaderError(Reader: TReader; const Message: string; var Handled: Boolean);
begin
  Handled := True;
end;

然后以这种方式覆盖表单的 ReadState() 方法:

procedure TForm224.ReadState(Reader: TReader);
begin
  Reader.OnError := DoReaderError;
  Reader.OnCreateComponent := DoCreateComponent;
  inherited;
  Reader.OnError := nil;
  Reader.OnCreateComponent := nil;
end;

如果该组件类有多个实例,而您需要检查单个实例,则可以使用 TReader.OnSetName 事件:

procedure TForm224.ReadState(Reader: TReader);
begin
  ...
  Reader.OnSetName := DoSetName;
  inherited;
  Reader.OnSetName := nil;
  ...
end;

procedure TForm224.DoSetName(Reader: TReader; Component: TComponent; var Name: string);
begin
  if Name = <instance name> then begin
    Abort;
  end;
end;

关于delphi - 手动跳过从 dfm 创建的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47347578/

相关文章:

delphi - #region 在 C++Builder 中等效吗?类似于分组代码的方式吗?

delphi - X的动态数组的Delphi动态数组的内存布局是什么?

delphi - 如何比较定义/实现顺序完全不同的两个大型 Delphi 单元?

delphi - 在 Delphi 7 中的 OnMouseMove 事件中移动组件时如何减少 CPU 使用率?

sql - 搜索sql表的所有字段时出现语法错误

delphi - 在 Dunit 项目中,exe 版本信息被禁用,如何恢复它?

android - Delphi Firemonkey 同时从图库中选择多张图片

delphi - 最好的报告编写工具是什么?

delphi - 如何在Delphi的TListView子项上绘制bmp/图标?

delphi - 如何为TList <T>编写通用FreeAll