从TImage32(Graphics32库)中删除垃圾DFM数据

WeG*_*ars 5 delphi graphics32

我有一个源自TImage32的控件:

TChromaDisplay = class(TImage32)
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了当我在表单上放下TChromaDisplay时,生成的DFM文件很大(300KB而不是<1KB),因为我在Bitmap.Data字段中保存了垃圾数据(它只是一个灰色图像).每次我将控件放在窗体上时,都会创建位图图像并填充灰色.我不想将图像(垃圾)的内容保存到DFM文件,因为它使EXE更大但我不知道如何.

可能我需要在TChromaDisplay.Create中写一些地方,我没有保存/存储在我的TChromaDisplay中的任何图像数据.但我不知道在哪里/怎么做.

  object Display: TChromaDisplay
    Left = 0
    Top = 0
    Width = 1465
    Height = 246
    Bitmap.Data = {
      C0000000C0000000EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
      EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
      EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
      etc
      etc
      etc
Run Code Online (Sandbox Code Playgroud)

我在Create中试过这个但是没有帮助:

Bitmap.Width := 1;
Bitmap.Height:= 1;
Run Code Online (Sandbox Code Playgroud)

TLa*_*ama 3

更新:

查看属性GR32_Dsgn_Bitmap.pas的设计时图像对话框TImage32.BitmapClear那里的按钮使用的Bitmap.Delete过程只是将位图大小设置为 0x0。所以你可以尝试在保存表单流之前调用它来清除位图:

type
  TChromaDisplay = class(TImage32)
  protected
    procedure WriteState(Writer: TWriter); override;
  end;

implementation

procedure TChromaDisplay.WriteState(Writer: TWriter);
begin
  Bitmap.Delete;
  inherited;
end;
Run Code Online (Sandbox Code Playgroud)

但它仍然无法解释为什么当您将控件放在表单上时会有位图数据。您还可以Bitmap.Delete在继承部分完成后(当Bitmap已经实例化时)调用控件构造函数中的 。

尚未测试,因为我无法模拟你的问题。