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

Перехват события закрытия внешнего редактора объекта TOLEContainer в Borland Developer Studio 2006 на Delphi

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

Перехват события закрытия внешнего редактора объекта TOLEContainer в Borland Developer Studio 2006 на Delphi

Вопрос, который стоит перед разработчиками, работающими с компонентом TOLEContainer в Borland Developer Studio 2006, заключается в необходимости отслеживания момента закрытия внешнего редактора OLE-объекта. Это может потребоваться для выполнения определенных действий с объектом после его изменения в редакторе. Стандартное событие OnDeactivate в данном случае не работает, и разработчики сталкиваются с необходимостью найти альтернативный способ перехвата этого события.

Описание проблемы

В Borland Developer Studio 2006 для Delphi существует проблема с перехватом события закрытия внешнего редактора для объектов типа TOLEContainer, когда свойство AllowInPlace установлено в False. После изменения OLE-объекта в редакторе, пользователю необходимо выполнить определенные действия с этим объектом внутри TOLEContainer, но стандартные средства не позволяют это сделать.

Альтернативный ответ

В документации Microsoft указано, что OLE-объект вызывает метод OnShowWindow интерфейса IOleClientSite, который реализован в компоненте TOLEContainer. Параметр fShow этого метода указывает, открывается ли окно объекта или закрывается.

Подтвержденный ответ

Для решения проблемы не требуется модификация исходного кода VCL. Можно использовать интерфейс IAdviseSink, который позволяет получать уведомления о различных событиях, связанных с OLE-объектом. Вот пример кода, который демонстрирует, как можно перехватить закрытие внешнего редактора:

uses
  ActiveX;

type
  TForm1 = class(TForm, IAdviseSink)
    // Компоненты формы
    Button1: TButton;
    OleContainer1: TOLEContainer;
    // Остальные компоненты и процедуры
    procedure OnClose;
  end;

implementation

// Процедуры интерфейса IAdviseSink
procedure TForm1.OnClose;
begin
  ShowMessage('Внешний редактор закрыт!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OleContainer1.InsertObjectDialog then begin
    // Закрытие соединения
    OleContainer1.OleObjectInterface.Advise(IAdviseSink(Self), Connection);
  end;
  // Остальной код
end;

procedure TForm1.CloseConnection;
begin
  // Код для закрытия соединения
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CloseConnection;
  // Остальные действия
end;

// Остальные процедуры класса

При нажатии на кнопку Button1 происходит вставка объекта в OleContainer1 и установка соединения для получения уведомлений через IAdviseSink. Процедура OnClose вызывается, когда внешний редактор закрывается, и в ней можно выполнять необходимые действия.

Заключение

Использование интерфейса IAdviseSink позволяет перехватить необходимые события, связанные с жизненным циклом OLE-объекта, и выполнить требуемые действия без необходимости изменения исходного кода компонента TOLEContainer. Это решение подходит для разработчиков, работающих с Borland Developer Studio 2006 и желающих отслеживать закрытие внешнего редактора OLE-объектов.

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

Проблема заключается в необходимости перехватить событие закрытия внешнего редактора OLE-объекта в компоненте TOLEContainer, используемом в Borland Developer Studio 2006, для выполнения определенных действий после редактирования объекта, что невозможно с


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

Получайте свежие новости и обновления по 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:24:37/0.0034489631652832/0