|
#1
|
|||
|
|||
Модальная форма
Ситуация следующая: средствами Delphi создан компонент ActiveX, который используется в другой программе, а именно 1С платформы 8.2.13.219. У компонента есть свойство типа COM-объект ещё одного ПО. Также у компонента есть свойство форма, которая должна выводиться поверх всех окон Windows. Эта форма создается при создании ActiveX и выводится/закрыватся по определенным событиям от СОМ-объекта. На форме есть несколько кнопок.
Проблема: если в 1С открыта модальная форма, то форма, которая выводится компонентом и все её элементы становятся недоступными. При этом все остальные окна и в том числе 1С доступны. Причём если закрыть модальную форму 1С, то форма компоненты становится доступной. В чём может быть проблема и как её решить? Информация которая может быть полезной: 1) procedure TActiveX.ActiveXCreate(Sender: TObject); ... FModalForm := TModalForm.Create(self); 2) Событие1 - ModalForm.Show; Событие2 - ModalForm.Close; 3) Свойства формы: BorderStyle - bsSizeToolWin FormStyle - fsStayOnTop Position - poScreenCenter все остальные вроде по-умолчанию ))). 4) разрабатывал на Delphi 7 и пробовал на Delphi 2010 Последний раз редактировалось Tutamas, 30.09.2011 в 16:44. |
#2
|
|||
|
|||
Решение
Немного неправильно выразил постановку задачи - необходимо была не модальная, а форма отображаемая поверх всех окон. Вобщем решение найдено.
1) При создании ActiveX программно создаем форму procedure TActiveX.ActiveXCreate(Sender: TObject); ... FModalForm := TForm.Create(self); 2) Некоторые её свойства: BorderStyle - bsSizeToolWin FormStyle - fsStayOnTop Position - poScreenCenter 3) Устанавливаем SetWindowLong(FModalForm.Handle, GWL_HWNDPARENT, GetDesktopWindow); 4) В определенных местах вызываем Show и Close Всё |