Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

### Обновление программ на Delphi: решение проблем позднего связывания OLE в Delphi XE7

Delphi , Технологии , OLE

Обновление программ на Delphi: решение проблем позднего связывания OLE в Delphi XE7

При обновлении программ, написанных на Delphi, часто возникают различные проблемы, связанные с изменением версий компонентов, таких как библиотеки Office. Одна из таких проблем связана с использованием констант Excel в Delphi XE7, которые ранее работали в Delphi 2010. В частности, при попытке автоматизировать Excel через позднее связывание OLE, возникает исключение "Unable to set the Window state property of the application class", когда приложение максимизировано или минимизировано.

Проблема

Константы xlMaximized и xlMinimized, используемые для установки состояния окна Excel, перестали работать в Delphi XE7. В Delphi 2010 эти константы, полученные из модуля ExcelXP, имели значения $FFFFEFD7 и $FFFFEFD4 соответственно. Однако, если использовать простые числовые значения -4137 и -4140, программа работает корректно.

Пример кода

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
  xla.WindowState := xlMaximized;  //-4137;  Работает корректно, если использовать это число
end;

procedure TForm3.MinExcelClick(Sender: TObject);
begin
  xla.WindowState := xlMinimized; //-4140; Работает корректно, если использовать это число
end;

Анализ проблемы

Проблема, вероятно, связана с изменением типа данных констант в новых версиях Delphi. В Delphi 2010 значения $FFFFEFD7 и $FFFFEFD4 интерпретируются как ShortInt, что соответствует ожиданиям Excel. В Delphi XE7 эти же значения интерпретируются как LongInt, что приводит к ошибке.

Решение проблемы

Решение заключается в корректной интерпретации типов данных. В соответствии с исследованиями пользователя, установка свойства System.Variants.DispatchUnsignedAsSigned в значение True позволяет решить проблему.

System.Variants.DispatchUnsignedAsSigned := True;

Выводы

При обновлении программ на Delphi важно учитывать изменения в типовых системах и поведении компонентов. В случае с автоматизацией Excel, важно убедиться, что используемые константы корректно интерпретируются и соответствуют ожиданиям Excel. Использование позднего связывания OLE требует особого внимания к типам данных и их интерпретации в различных версиях Delphi.

Эта статья предназначена для специалистов, работающих с Delphi и Object Pascal, и содержит практический пример решения проблемы, с которой они могут столкнуться при обновлении своих проектов.

Создано по материалам из источника по ссылке.

Описание контекста: При обновлении программ на Delphi возникают проблемы с поздним связыванием OLE в Delphi XE7, связанные с изменениями в типовых системах и некорректной интерпретацией констант Excel, что требует корректировки типов данных для их правил


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 16:21:55/0.0033829212188721/0