首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel 2010自动化常量在Delphi XE7中不起作用

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

Stack Overflow用户
提问于 2014-12-06 03:37:22
回答 1查看 1.6K关注 0票数 6

我正在尝试将一个程序从Delphi2010转换到Delphi (32位/windows)。过去在D2010中工作的代码--通过后期绑定OLE实现自动Excel --现在在Delphi XE7中出现了“无法设置应用程序类的窗口状态属性”的异常,当应用程序被最大化或最小化时。

我从具有以下常数的ExcelXP单元中得到常数am最大值和最小值: xlmaximized = $FFFFEFD7;xlminimized = $FFFFEFD4;

但是,如果我使用简单的常量值-4137和-4140,程序工作正常。我意识到我一定是在做一些简单的错误的事情。

下面是一些说明问题的示例代码。我对此进行了测试,它在Delphi2010中工作,但在Delphi XE7中不起作用。我想这一定与更新版本中常量的处理方式有关(?)有人能给我指明正确的方向吗?提前感谢!

代码语言:javascript
复制
//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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-06 10:39:03

这可能是一个数据类型问题。$FFFFEFD7作为一个带符号的32位整数是-4137 (也是-4137所期望的)。据快速古尔格搜索德尔菲隆特是签署32位int,所以可能有一些类型铸造正在进行.

根据OP自己的研究,

代码语言:javascript
复制
System.Variants.DispatchUnsignedAsSigned := True;

解决了它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27328018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档