2014-09-13 2 views
0

Delphi XE6 - Я создаю плагин на основе COM для Excel с помощью AddInExpress. Все работает до этого момента. Я добавил меню ленты, которое пользователь может щелкнуть, чтобы показать конкретную информацию. Я хочу показать это в вызове компонента HTMLPopup (по TMS Software). Это всплывающая форма, предназначенная для отображения информации на основе форматирования HTML. Декларация компонента -Delphi - Создание компонента в DLL, когда у меня нет родителя

HTMLPopup := THTMLPopup.Create(AOwner: TComponent); 

Мой вызов состоит в том, что у меня нет (или не могу понять), что является применимым владельцем. Поскольку это LIBRARY/DLL, у меня нет формы «Соблюдать» это.

Я попытался установить

HTMLPopup := THTMLPopup.Create(self); // Errors on compile, SELF undeclared 

Когда я установил владельца к DataModule, я получаю AV во время выполнения.

Я попытался установить

HTMLPopup :=THTMLPopup.Create(Application); //Again, error at runtime. 

as well as ... HTMLPopup :=THTMLPopup.Create(nil); //Again, error at runtime. 

Единственный способ решения проблемы я нашел его, чтобы создать форму, но оставить его скрытым, а затем создать свой HTMLPopup с владельцем быть моей скрытой форме. Кажется, это своего рода «kludgey». Правильно ли это?

Благодаря

ответ

2

Обычно вы бы передать nil как владелец, который означает, что компонент будет бесхозным. Это будет означать, что ваш код будет отвечать за последующий вызов Free, чтобы уничтожить компонент.

Если ваш компонент не может считаться несостоявшимся, я боюсь, что скрытая форма или аналогичная информация, вероятно, является наиболее целесообразным решением.

Возможно, вы обратитесь к поставщику компонента, чтобы получить от них поддержку. В конце концов, они знают компонент лучше, чем кто-либо. И, возможно, проблема - не что иное, как простая ошибка в этом контроле.

Вы также можете избежать использования стороннего элемента управления и узла TWebBrowser.

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