【问题标题】:How to programatically set designtime height / width of TDatamodule in Delphi?如何在 Delphi 中以编程方式设置 TDatamodule 的设计时高度/宽度?
【发布时间】:2017-10-17 01:04:51
【问题描述】:

我生成了一个 TDatamodule,其中包含一堆 TFDQueries。然后,我像这样保存这个 Datamodule .DFM

  lFileStream   := TFileStream.Create('Datamodule.dfm', fmCreate);
  lMemoryStream := TMemoryStream.Create;
  lMemoryStream.WriteComponent(lDataModule);
  lMemoryStream.Seek(0, soFromBeginning);
  ObjectBinaryToText(lMemoryStream, lFileStream);
  lFileStream.Free;
  lMemoryStream.Free;

为了方便用户,我需要在生成这个 TDatamodule 时设置它的宽度和高度。但是我不能用

lDatamodule.Width := 500; // Does not compile
lDatamodule.Height := 500; // Does not compile

因为 Width 和 Height 是注册的设计时属性。允许设置 TComponents 的设计时 Left 和 Top 属性的类似策略是使用 DesignInfo 属性来完成的

procedure BootyShakin;
  var
    NewDesignInfo       : LongRec;
  begin
    NewDesignInfo.Lo := Word(100);
    NewDesignInfo.Hi := Word(100);
    lComponent.DesignInfo := Longint(NewDesignInfo);
  end;

我正在寻找一种类似的解决方案,用于在将 TDatamodule 保存到 .DFM 之前设置其设计时宽度和高度

【问题讨论】:

  • 我明确指出这必须通过代码@MartynA 来完成
  • "WIdth" 和 "Height" 只是设计时属性,它们不能通过代码直接访问。 @MartynA
  • 一个数据模块在运行时是不可见的,请问是什么问题?
  • @MartynA 你否决了这个问题? Width 和 Height 是使用 RegisterProperty 注册的自定义属性编辑器。这就是您在设计时编辑器上看到 em 的原因。它们在运行时不存在。
  • 在保存前设置 DesignSize.x 和 DesignSize.y? DesignSize 是一个公共 Tpoint

标签: delphi code-generation design-time


【解决方案1】:

TDataModule 提供公共属性DesignSize,其类型为TPoint

文档说:

在设计时指定数据模块的设计大小。
应用程序永远不需要设置此值。它在设计时控制数据模块窗口的大小。

尽管文档不推荐它 - 对于使用 TDataModule 的普通应用程序,我认为 - 您可以使用此属性归档您正在寻找的内容。

【讨论】:

  • 看起来@FritzW 和我同时有同样的想法。 :-D
猜你喜欢
  • 2016-10-27
  • 2014-08-22
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
相关资源
最近更新 更多