gpt4 book ai didi

Excel 2010 自动化常量在 Delphi XE7 中不起作用

转载 作者:行者123 更新时间:2023-12-03 15:12:48 25 4
gpt4 key购买 nike

我正在尝试将程序从 Delphi 2010 转换为 Delphi XE7(32 位/Windows VCL)。当应用程序最大化或最小化时,过去在 D2010 中通过后期绑定(bind) OLE 自动执行 Excel 的代码现在在 Delphi XE7 中给出异常“无法设置应用程序类的窗口状态属性”。

我从具有以下常量的 ExcelXP 单元获取常量 xlmaximized 和 xlminimized: xlMaximized = $FFFFEFD7; xlMinimized = $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;

最佳答案

这可能是一个数据类型问题。 $FFFFEFD7 作为有符号 32 位整数,为 -4137(这也是 Excel 所期望的)。根据quick goolge search Delphi Longint 是有符号的 32 位 int,所以可能正在进行某种类型转换...

根据OP自己的研究,设定

System.Variants.DispatchUnsignedAsSigned := True;

解决了。

关于Excel 2010 自动化常量在 Delphi XE7 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27328018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com