Конференция "Corba" » Вызов формы внутреннего (dll) ActiveX сервера [Delphi, Windows]
 
  • helloeverybody © (28.01.08 18:11) [0]
    Всем привет!
    Сделал:
    1. Создал проект (File->New->ActiveX Library)
    2. Добавил в проект объект COM 'SimpleCOM' (File->New->COM Object)
    3. В Type Library Editor добавил новый метод ShowString в интерфейсах этого объекта. Сам метод состоит только из ShowMessage. Все компилируется в dll и вызывается из внешнего приложения (exe). НО!
    Никак не получается вызвать форму находящуюся в dll.
    Пробовал:
    function TSimpleCOM.ShowString(const str: WideString ): HResult;
    begin
      Form2.Create(nil);
      Form2.Show;
    end;
    В отладчике пропускает эти команды.
    Передать Application для вызова Form2.Create(Application) не знаю как, т.к. при определении параметров метода ShowString в Type Library Editor не знаю какой тип указать у данного параметра.
    В Интернете найти пока удалось немногое.
    Пожалуйста подскажите КАК ВЫЗВАТЬ ФОРМУ находящуюся в dll?
  • Ага (29.01.08 08:04) [1]
    Прежде чем браться за COM и ActiveX надо сначала разобраться как минимум с самыми элементарными основами.
  • Сергей М. © (29.01.08 09:49) [2]

    > Form2.Create(nil);


    Это и в обычном приложении работать не будет, не то что в AX
  • helloeverybody © (29.01.08 17:24) [3]

    > Это и в обычном приложении работать не будет, не то что
    > в AX


    Прошу прощения за некорректный код. На самом деле текст выглядит так:

    function TEditHierarchy.ViewEditHierarchy: HResult;
    begin
     MainGraphicForm:=TMainGraphicForm.Create(nil);
     Form1:=TForm1.Create(nil);
     Result:=Form1.ShowModal;
    end;
    Формы вызываются, но на панели задач выделяются отдельно. Мне же нужно чтобы все формы выходили в рамках одного приложения.
    Проблема заключается в том, что я не знаю как через метод интерфейса ViewEditHierarchy передать ссылку на приложение-клиент Application (чтобы указать его вместо nil), ведь в Type Library Editor не могу найти подходящего типа для параметра.

    Буду благодарен за совет.
  • umbra © (29.01.08 17:30) [4]

    > ведь в Type Library Editor не могу найти подходящего типа
    > для параметра

    Integer

    подходит.
  • Сергей М. © (29.01.08 17:46) [5]

    > я не знаю как через метод интерфейса ViewEditHierarchy передать
    > ссылку на приложение-клиент Application


    Какой нафих "Application" в приложении-клиенте, написанном на, к примеру, WinForth ?
  • helloeverybody © (29.01.08 17:47) [6]

    > Integer подходит.

    При компиляции пишет: Incompatible types 'TComponent' and 'Integer'
    А TComponent в комбобоксе выбора типа параметра Type Library Editor просто нет :(
  • Сергей М. © (29.01.08 17:50) [7]

    > TComponent в комбобоксе выбора типа параметра Type Library
    > Editor просто нет


    Откуда ж он там возьмется ?

    COM-технология, коей ты решил воспользоваться, как раз и создана для обеспечения возможности взаимодействия модулей, созданных в различных средах программирования/разработки.
  • helloeverybody © (29.01.08 17:56) [8]

    > Какой нафих "Application" в приложении-клиенте, написанном
    > на, к примеру, WinForth ?

    Как же иначе связывать форму из сервера dll с приложением, чтобы все это выглядело как одно приложение и чтобы форма не "болталась" отдельно?
  • ага (29.01.08 18:46) [9]

    > Как же иначе связывать форму из сервера dll с приложением,
    >  чтобы все это выглядело как одно приложение и чтобы форма
    > не "болталась" отдельно?

    Просто поставь ей borderStyle = bsDialog, bsToolWindow или bsSizeToolWindow. Полностью нормального поведения от формы все равно не добьешься. Можно правда то же самое и в CreateParams настроить, но эт лишняя возня.
  • umbra © (30.01.08 11:05) [10]

    > При компиляции пишет: Incompatible types 'TComponent' and
    > 'Integer'

    При компиляции какого кода? Надо ж типы приводить в нужных местах.
    А если интерфейс не наследник
    IDispatch

    , то допустим тип
    Pointer

    . Опять таки, надо приводить типы в нужных местах.
  • Сергей М. © (31.01.08 11:05) [11]

    > helloeverybody ©   (29.01.08 17:56) [8]



    > чтобы форма не "болталась" отдельно


    Отдельно "болтаются", в первую очередь, окна верхнего уровня.
    Окно твоей формы как раз таковым и является.
    Сделай его дочерним по отношению к окну вызывающего приложения.
    см. TWinControl.CreateParented
  • ага (01.02.08 05:17) [12]

    >см. TWinControl.CreateParented

    Сам пробовал? Я как-то пробовал, когда плагин делал для атмеловской студии, такая фигня получается - мама, не горюй. Особо правда не вникал  финансово не располагало, на ресурсном диалоге быстрей было сделать:)) Поделись опытом.
 
Конференция "Corba" » Вызов формы внутреннего (dll) ActiveX сервера [Delphi, Windows]
Есть новые Нет новых   [120350   +20][b:0][p:0.001]