Форум: "Corba";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];
Внизсделать 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 вся ветка
Форум: "Corba";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c