Конференция "Corba" » сделать activex [Delphi]
 
  • nastya (11.01.06 18:16) [0]
    (Кинула вопрос в конференцию начинающих, но там не ответили, помогите подсказкой, если вам не сложно).

    У меня есть класс (не компонент). Подскажите, пожалуйста, примерную последовательность действий(с подробностями разберусь сама), для того, чтобы оформить его как activeX. Чтобы получался невизуальный activeX, который можно кинуть на форму и пользоваться его методами.
    Пыталась использовать стандартный ActiveXControl, но он наследует от готового компонента (м.б. я недопоняла).
  • Набережных С. © (11.01.06 21:42) [1]

    > Подскажите, пожалуйста, примерную последовательность действий(с
    > подробностями разберусь сама)

    Милая девушка, примерная последовательность занимает в MSDN с десяток немаленьких топиков, и это действительно только "примерная последовательность", без описания каких-либо тонкостей. Боюсь, что без чтения книг или внимательного изучения MSDN, используя TActiveXControl в качестве примера, Вам никак не обойтись.

    > Чтобы получался невизуальный activeX, который можно кинуть
    > на форму и пользоваться его методами.

    А Вы уверены, что Вам нужен именно ActiveX? Может быть, будет достаточно обычного COM-объекта, реализующего потомка IDispatch? А чтобы кидать на форму, можно его после регистрации импортировать в Delphi стандартными средствами среды - Project/Import type library и выставить галкку Create Component wrapper.
  • DSKalugin © (12.01.06 14:23) [2]
    Скорей всего, вы хотите из имеющего класса сделать компонент, а не ActiveX, потому что на форму в большинстве случаев ложатся компоненты, а не ActiveX-ы
  • i_hate_vb (16.02.07 13:07) [3]
    бодаюсь примерно с такой же ситуацией

    [quote]А Вы уверены, что Вам нужен именно ActiveX? Может быть, будет достаточно обычного COM-объекта, реализующего потомка IDispatch?[/quote]

    сделал обычный сом-объект, тестовые примеры на делфи работают отлично как при создании обьектов руками, так и с сгенерированным компонентом-врапером

    а с visual basic-ом одни траблы, кричат "дай активх, мы его положим на форму и не будем гемороится"

    и вот как сделать невизуальный активХ? показывать то нечего

    кроме траблы с событиями есть еще такая трабла: базовый класс реализует неск. интерфейсов ("загрузить файл", "сказать, что файл правильный" и т.д.); смысл возни - конвертация загруженного файла, для каждого направления конвертации свой интерфейс

    на делфи все просто - создал базовый объект, загрузил в него настройки исходного файла, потом QueryInterface с IID нужного интерфейса, заполнил где надо свойства и сделал Make - "та-дам!" все класс

    при этом интерфейсов конвертации много, так что я переопределяю QueryInterface и для нужных IID создаю обьекты, реализующие эти интерфейсы

    а в этом *** vb все ж не как у людей - в мою QueryInterface никогда управление не попадает и vb ругается, что не найден интерфейс

    вот они и плачут, просют активХ...
  • Romkin © (19.02.07 13:33) [4]
    i_hate_vb   (16.02.07 13:07) [3] Опять ты? :)
    Зачем тебе для каждой конвертации свой интерфейс? Интерфейс должен быть один, а коклассов - для кадой конвертации свой.
    По поздему связыванию доступен только один интерфейс, default.
  • i_hate_vb (19.02.07 16:14) [5]
    > Опять ты? :)

    угу :)

    пожалуюсь - "зачем":

    конвертируем файл в че-то; при этом у этой задачи есть настрйоки:
    1) имя исходного файла
    2) свойства файла (read only), читаются после загрузки п. 1

    3) папка, куда ложить результ
    4) имя файла, который получится
    5) диапазон кадров для обработки (с/по)

    6) заголовок окна
    7) размер окна
    8) что-то-еще

    конвертируем файл в что-то другое; у этой задачи настройки такие
    1) имя исходного файла
    2) свойства файла (read only), читаются после загрузки п. 1

    3) папка, куда ложить результ
    4) имя файла, который получится
    5) диапазон кадров для обработки (с/по)

    6) кодек для видео
    7) кодек для аудио
    8) битрейцт видео
    9) что-то еще

    получается, что мне для первого случая нужно описать интерфейс, который полностью описывает пункты 1-8 первого прмиера, для второго случая - интерфейс, который полностью описывает пункты 1-9 второго примера, при этом ведь п. 1-2, 3-5 совпадают, все свойства по идее часто можно оставлять "как есть"

    так что я сделал кучку интерфейсов "по темам":
    пункты 1-2:
    ISourceReader
     source_filename: string;
     frames: integer;
     width: integer;
     height: integer;
    end;

    пункты 3-5:
    ITaskProps
     dest_folder: string;
     dest_name: string;
     frame_from: integer;
     frame_to: integer;
    end;

    все конверторы имеют общего предка
    IBaseBuilder
     make;
    end;

    конвертация в ехе
    IEXEMaker = interface (IBaseBuilder)
     caption: string;
     size: size_enum;
    end;

    конвертация в видео
    IVideoMaker = interface (IBaseBuilder)
     video_codec: string;
     video_butrate: integer;
     audio_codec: string;
     audio_bitrate: integer;
    end;

    плюс интерфейс для событий
    IBaseBuilderEvents
     on_video
     on_error
     on_succ
    end;

    делаю кокласс для конвертации в ехе - реализует интерфейсы ISourceReader (default), IBuilderEvents (source, default), ITaskProps, IExeMaker

    В реализации сделал класс
     TSourceReaderAX = class(TActiveXControl, ISourceReader, ITaskProps)

    от него хочу наследовать все конверторы... и все ж отлично работает, если б не этот *** vb

    вижу пока один вариант - каждый интерфейс конвертации описать полностью; задумка была, что вдруг что-то будет в функционал добавлятся - добавлю в поближе к базовому интерфейсу и все; а теперь надо будет всех везде помнить...
  • Romkin © (20.02.07 11:28) [6]
    Ты не учитываешь, что интерфейсы также можно наследовать друг от друга.
    Тебя же не удивляет, что TAutoObject реализует и IDispatch, и интерфейс-потомок от него ;)
  • i_hate_vb (20.02.07 12:49) [7]
    да так и сделаю, понаследую их друг за другом...

    просто "идеологически" оно не очень красиво - не родственники они! ;)
  • Romkin © (21.02.07 11:04) [8]
    Если не родственники - сделай основной объект, который через методы/свойства выдает нужный интерфейс. Тип свойства - IDispatch, а выдаваться будет конкретный заказанный интерфейс.
    Так, например, сделан метод Add у книги Excel - добавить-то можно разные вещи, не только лист. Выдает IDispatch.
 
Конференция "Corba" » сделать activex [Delphi]
Есть новые Нет новых   [134431   +8][b:0][p:0]