Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Создание OCX, как?


Автор: Igel 20.2.2003, 14:26
Народ, подскажите, может кто сталкивался, как можно в Дельфе создать OCX-компонент. И вообще что это такое, что необходимо?

Автор: stab 20.2.2003, 18:35
Для Delphi 6:

1. Пишеш обычный VCL-компонент и добавляеш его в палитру компонентов.
2. File->New->Other->ActiveX->ActiveX Control
3. VCL Class Name = твой VCL-компонент
4. остальное понятно

Автор: Igel 21.2.2003, 14:31
Во-первых, у меня Дельфа 5.5
Во-вторых, мой компонент почему-то не виден в списке VCL Class Name
В-третьих, не понятно, что дальше!!

Автор: stab 21.2.2003, 22:52
Цитата
Во-первых, у меня Дельфа 5.5


все то ж самое тока менюшки другие

Цитата
Во-вторых, мой компонент почему-то не виден в списке VCL Class Name


Component->Install Component... или сразу при содании VCL компонента нажать Install.

Цитата
В-третьих, не понятно, что дальше!!

А чего дальше-то, если у тя VCL компонент полностью написан, то ни чего дальше делать и не надо. В ActiveX компоненте будет реализовано все, что ты сделал для VCL. Если тебе не понятно как писать VCL компоненты, то лучше купи книгу, на форуме этому толком не научишся.

Автор: Igel 25.2.2003, 21:58
Ладно, может ты не понял, но поясню подробнее:
1. создаю VCL-компонент, по образу готового и хочу его отдать коллеге, который работает в Басике, и ему он нужон ввиде OCX. Как говорится, Ежу понятно...
2. Значит так, он у меня есть (VCL-компонент) и работает. Я хОчу его в OCX преобразовать. Жму File - New... - ActiveX, в списке ActiveX Control. Затем Ок!
3. Появляется оконце - "ActiveX Control Wizard". Но в списке VCL Class Name нету моего компонента. Как впрочем и того, по образу и подобию которого я делал свой.

Наверное в последнем и загвоздка. Не все VCL-компоненты можно преобразовать в OCX. Так или еще что-то забыл? Если так, то в чем загвоздка, что нужноconfused.gif

Автор: FinAlex 25.2.2003, 22:14
Создай ocx от TPanel и в конструкторе налепи на на эту панель че хошь, например экземпляр своего класса. может заработает...

Автор: Cashey 25.10.2006, 08:08
Разовью тему проблемы
Цитата(cully @  20.2.2003,  19:35 Найти цитируемый пост)
Для Delphi 6:

1. Пишеш обычный VCL-компонент и добавляеш его в палитру компонентов.
2. File->New->Other->ActiveX->ActiveX Control
3. VCL Class Name = твой VCL-компонент

ОК. Этап пройден. Дальше остается только откомпилировать проект и тут начинается....:
1.  В автоматически созданном Delphi модуле ***Impl1 в секции initialization прописывается
Код

initialization
  TActiveXControlFactory.Create(
    ComServer,
    TMyControlX,
    TMyControl,
    Class_MyControlX,
    1,
    '',
    0,
    tmApartment);
end.

Но никакого Class_MyControlX в природе не существует.
2. Ругается на несовместимость типов TStrings и IStrings. Об этом я уже http://forum.vingrad.ru/topic-118018.html

Потом может и еще чего-то вылезит. Для начало может кто-то сможет разъяснить проблему под пунктом 1

Автор: Cashey 25.10.2006, 08:41
Хотя.... базовый клас StringGrid к примеру, откомпилировался нормально....

Автор: Yanis 25.10.2006, 10:18
Цитата
File -> New -> Other -> ActiveX -> ActiveX Control
ActiveX Control Wizard: { 
    VCL Class Name: "TButton [StdCtrls]";
    New ActiveX Name: <default/for_choice>; 
    Implementatiosn Unit: <default/for_choice>;
    Project Name: <default/for_choice>;
    Threading Model: Apartment;
    ActiveX Control Options: {
  <default/for_choice>
    };
};
-> Ok
-> Shift + Ctrl + S -> For example: "C:\testocx\" (pas and dpr)
-> Shift + F9
-> Win + R -> C:\testocx
Our ocxy (ButtonXControl1.ocx in my case) must be there ;)

Автор: Cashey 25.10.2006, 10:30
Цитата(Yanis @  25.10.2006,  11:18 Найти цитируемый пост)
TButton [StdCtrls]

из стандартной кнопки создается, проверено, а вот из пользовательского (работающего) компонента - нет smile 
Конкретный пример описал http://forum.vingrad.ru/topic-118133/0.html#entry900129 

Автор: Yanis 29.10.2006, 08:33
Цитата(Cashey @  25.10.2006,  11:30 Найти цитируемый пост)
из стандартной кнопки создается, проверено, а вот из пользовательского (работающего) компонента - нет 

Прочитал в справке, что для того что бы кастомный компонент можно было использовать в ActiveX wizard-е, нужно регистрировать компонент в среде при помощи RegisterNonActiveX. Точнее, использовать её после RegisterComponents в процедуре Register.
У меня так и не получилось заставить появиться мой компонент в Wizard-е smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)