如何修复与ImageList相关的EInvalidOperation

时间:2013-06-21 17:29:09

标签: delphi delphi-7 timagelist

我的应用程序(在Delphi 7上编写)在Windows XP SP3上正常运行,但是当我尝试在Windows 7上运行它时会发生以下异常:

EInvalidOperation,消息"无效的ImageList"

这是主要的应用程序代码:

  Application.Initialize;

  tmpSplash.GoNextMsg;
  Application.CreateForm(TdmImages, dmImages);

  tmpSplash.GoNextMsg; // Collegamento database
  Application.CreateForm(TdmCharter, dmCharter);


  tmpSplash.GoNextMsg; // Caricamento immagini
  Application.CreateForm(TfrMain, frMain);

  tmpSplash.GoNextMsg; // init: Anagrafica
  frameAnagrafica := TframeAnagrafica.Create(Application);

  tmpSplash.GoNextMsg; // init: Flotta
  frameFlotta := TframeFlotta.Create(Application);
  //Application.CreateForm(TframeFlotta, frameFlotta);

  ...
  ...

模块dmImages已正确创建,例如frMain,但是何时 将创建对象frameAnagrafica,然后在构造函数方法上引发异常:

type
    TframeAnagrafica = class(TMyCustomFrame)
...
...

{$R *.dfm}
constructor TframeAnagrafica.Create(AOwner: TComponent);
begin
  inherited Create(AOwner); 

end;

"超级班" TframeAnagrafica:

TMyCustomFrame = class(TFrame)
...
...

{$R *.dfm}

constructor TMyCustomFrame.Create(AOwner: TComponent);
begin
  inherited Create(AOwner); <-- Exception here

end;

在Windows XP中没问题,但是使用Windows 7会出现问题。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您使用当前操作系统不支持的属性ColorDepth的值,则可能发生此类异常。或者,如果您尝试使用具有Alpha通道(TColorDepth.cd32Bit)的32位图像列表但在您的应用程序中没有XP清单,则可能会发生这种情况。为此,请在项目中包含单位xpman,或在“项目&gt;选项&gt;应用程序&gt;外观&gt;运行时主题”中选择“启用运行时主题”,然后选择“Delphi XE2或更高版本”。

答案 1 :(得分:0)

我刚从Windows 10收到更新,它搞砸了我的机器,它夺走了我的文件夹的权限。我目前正在运行Delphi,当我尝试打印报告时,我收到错误消息类Elnvalidoperation无法生成报告。这是因为我的打印机消失了,我不得不重新安装,问题似乎已经解决了。