[英]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.