我有一个源自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)
更新:
查看属性GR32_Dsgn_Bitmap.pas的设计时图像对话框TImage32.Bitmap,Clear那里的按钮使用的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已经实例化时)调用控件构造函数中的 。
尚未测试,因为我无法模拟你的问题。