DFM:派生形式包含派生位图

DFM: Derived Form contains derived Bitmaps

本文关键字:派生 包含 位图 DFM      更新时间:2023-10-16

使用C++生成器XE7

我有一个带有 TImageList 对象的基本表单

object FormBase: TFormBase
  Left = 0
  Top = 0
  Caption = 'FormBase'
  ClientHeight = 200
  ClientWidth = 329
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object ImageList1: TImageList
    Left = 32
    Top = 24
    Bitmap = {
      494C010101007800180010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
      snipped
      00000000000000000000000000000000}
  end
end

派生 TFormBase 我注意到 TImageList 的位图复制到派生形式:

inherited FormBase1: TFormBase1
  Caption = 'FormBase1'
  PixelsPerInch = 96
  TextHeight = 13
  inherited ImageList1: TImageList
    Bitmap = {
      494C010101007800180010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
      snipped
      00000000000000000000000000000000}
  end
end

我现在的应用程序中有两个相同的图像列表吗?

这很有趣。

在运行时,每个TFormBase只会分配一个TImageList,因此在该级别,您只有一个TImageList对象。

但是,基于这些 DFM,可执行文件 FILE 将包含位图数据的两个副本 - 一个用于TFormBase,另一个用于TFormBase1。这会使您的可执行文件更大(这很糟糕),并且会稍微减慢TFormBase1的创建时间(因为位图数据加载两次)。我认为所有 DFM 资源都保留在内存中,因此它也使用了比必要更多的内存。

尝试手动编辑派生的 DFM 以删除bitmap={...}部分,并查看可执行文件是否缩小(以及程序行为是否保持不变!