簡體   English   中英

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

[英]Excel 2010 automation constants not working in Delphi XE7

我正在嘗試將程序從Delphi 2010轉換為Delphi XE7(32位/ Windows VCL)。 以前在D2010中使用通過后期綁定OLE自動化Excel的代碼現在在應用程序最大化或最小化時,在Delphi XE7中提供異常“無法設置應用程序類的Window狀態屬性”。

我從具有這些常量的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預期的)。 根據快速goolge搜索 Delphi Longint簽署32位int,所以也許有一些類型轉換正在進行...

根據OP自己的研究,設定

System.Variants.DispatchUnsignedAsSigned := True;

解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM