Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1293219121
Фродвард
2010-12-24 22:32
2011.03.20
IntToStr -> ExtToStr


1-1248467150
Дмитрий Белькевич
2009-07-25 00:25
2011.03.20
Нашел баг в VCL Delphi 2009-го


3-1254149519
Diplomat
2009-09-28 18:51
2011.03.20
Использование доменов в IB FB


15-1291640916
Дмитрий С
2010-12-06 16:08
2011.03.20
Подскажите почтовый хостинг с возможностью алиасов с масками.


15-1291650651
stenfit
2010-12-06 18:50
2011.03.20
сохранение настроек





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский