我正在尝试将程序从 Delphi 2010 转换为 Delphi XE7(32 位/windows VCL)。曾经在 D2010 中通过后期绑定 OLE 自动化 Excel 的代码现在在 Delphi XE7 中给出异常“无法设置应用程序类的窗口状态属性”,当应用程序最大化或最小化时。
我从具有以下常量的 ExcelXP 单元中获取常量 xlmaximized 和 xlminimized: xlMaximized = $FFFFEFD7; xl最小化 = $FFFFEFD4;
但是,如果我使用简单的常量值 -4137 和 -4140,程序确实可以正常工作。我意识到我必须做一些错误的简单事情。
下面是一些说明问题的示例代码。我对此进行了测试,它在 Delphi 2010 中有效,但在 Delphi XE7 中无效。我想这一定与新版本中常量的处理方式有关(?)有人能指出我正确的方向吗?提前致谢!
//XLA is a global variable of type OLEVariant;
//Program uses ComObj and ExcelXP unit
//This proc just runs or connects to Excel
procedure TForm3.RunExcelClick(Sender: TObject);
begin
try
xla := GetActiveOLEObject('Excel.Application');
except
try
xla := CreateOleObject('Excel.Application');
except
on E: Exception do
begin
ShowMessage(E.Message);
end;
end;
xla.Visible := true;
end;
end;
procedure TForm3.MaxExcelClick(Sender: TObject);
begin
//This is the code that gives the exception
xla.windowstate := xlmaximized; //-4137; Works OK if use this number
end;
procedure TForm3.MinExcelClick(Sender: TObject);
begin
//Or this. I also get exceptions
xla.windowstate := xlminimized ; //-4140; Works OK if use this number
end;