Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.20;
Скачать: CL | DM;

Вниз

сделать activex   Найти похожие ветки 

 
nastya   (2006-01-11 18:16) [0]

(Кинула вопрос в конференцию начинающих, но там не ответили, помогите подсказкой, если вам не сложно).

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


 
Набережных С. ©   (2006-01-11 21:42) [1]


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

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

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

А Вы уверены, что Вам нужен именно ActiveX? Может быть, будет достаточно обычного COM-объекта, реализующего потомка IDispatch? А чтобы кидать на форму, можно его после регистрации импортировать в Delphi стандартными средствами среды - Project/Import type library и выставить галкку Create Component wrapper.


 
DSKalugin ©   (2006-01-12 14:23) [2]

Скорей всего, вы хотите из имеющего класса сделать компонент, а не ActiveX, потому что на форму в большинстве случаев ложатся компоненты, а не ActiveX-ы


 
i_hate_vb   (2007-02-16 13:07) [3]

бодаюсь примерно с такой же ситуацией

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

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

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

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

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

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

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

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

вот они и плачут, просют активХ...


 
Romkin ©   (2007-02-19 13:33) [4]

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


 
i_hate_vb   (2007-02-19 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 ©   (2007-02-20 11:28) [6]

Ты не учитываешь, что интерфейсы также можно наследовать друг от друга.
Тебя же не удивляет, что TAutoObject реализует и IDispatch, и интерфейс-потомок от него ;)


 
i_hate_vb   (2007-02-20 12:49) [7]

да так и сделаю, понаследую их друг за другом...

просто "идеологически" оно не очень красиво - не родственники они! ;)


 
Romkin ©   (2007-02-21 11:04) [8]

Если не родственники - сделай основной объект, который через методы/свойства выдает нужный интерфейс. Тип свойства - IDispatch, а выдаваться будет конкретный заказанный интерфейс.
Так, например, сделан метод Add у книги Excel - добавить-то можно разные вещи, не только лист. Выдает IDispatch.



Страницы: 1 вся ветка

Текущий архив: 2011.03.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1291671003
Юрий
2010-12-07 00:30
2011.03.20
С днем рождения ! 7 декабря 2010 вторник


11-1232530908
Dy1
2009-01-21 12:41
2011.03.20
консоль


3-1255340705
Yurikon
2009-10-12 13:45
2011.03.20
Ошибка с драйвером Access


4-1221723822
mikaa
2008-09-18 11:43
2011.03.20
Shell_NotifyIcon в Windows 2003


2-1293114638
12
2010-12-23 17:30
2011.03.20
определить текущую ячейку в TStringGrid