2013-09-20 4 views
1

У меня есть сторонний активный X .ocx-файл, который я импортировал в Delphi XE2 и создал файл TLB.delphi обработка не визуальных событий в dll

Активная библиотека X - это «невизуальный» компонент, но отображается как изображение, если оно опускается на форму.

Я хочу вызвать этот компонент в библиотеке Active X и получить доступ к его методам и свойствам, но не знаю, как получить доступ к его событиям. Я думал, что могу добавить его в модуль данных, но это не похоже на возможность в палитре инструментов. Должно ли это быть возможным?

Я попытался добавить события, выполнив что-то вроде этого: actX3Party: = T3Party.Create (nil); actX3Party.On3PartyEvent: = myEventHandler;

но не знаю, как сделать «myEventHandler» обработчиком событий, так как нет формы.

Спасибо

ответ

1

Вам не нужна форма для реализации обработчика событий. Все, что вам нужно, это класс. Вы можете реализовать обработчик событий, используя либо методы экземпляра, либо методы класса. Естественно, если вы решите использовать методы экземпляра, вам нужно создать экземпляр экземпляра.

Итак, решите, хотите ли вы использовать методы экземпляра или методы класса. Затем создайте класс, определяющий обработчики событий. Если вы используете методы экземпляра, создайте экземпляр класса. Наконец, назначьте обработчики событиям.

Например:

type 
    TMyClass = class 
    public 
    class procedure MyHandler1(Sender: TObject); 
    procedure MyHandler2(Sender: TObject); 
    end; 

Я не знаю, какие параметры принимает вас событие, так что выше просто ради примера в. И, очевидно, вам нужно будет реализовать методы.

Вы можете использовать процедуру класса сразу:

actX3Party.On3PartyEvent := TMyClass.MyHandler1; 

Для метода экземпляра, сделайте экземпляр:

myInstance := TMyClass.Create; 
actX3Party.On3PartyEvent := myInstance.MyHandler2; 

Если код, который является назначение обработчиков событий для управления ActiveX существует в класс, тогда вам не нужен другой класс. Вы можете реализовать свои обработчики прямо в этом классе.

Итак, еще раз обработчики событий не должны быть реализованы в форме. Это просто методы класса.

+0

Технически можно реализовать обработчик событий без использования класса вообще. Вы можете использовать запись 'TMethod' и тип, чтобы выполнить одно и то же. Единственное требование состоит в том, что вам нужно добавить дополнительный явный параметр обработчику событий для размещения значения 'Self', но' TMethod' позволяет вам указать любое значение, которое вы хотите для параметра 'Self'. Он не должен быть указателем на объект или ссылкой на класс. –

+0

@RemyLebe Технически это действительно так. Я не думал, что этот уровень детализации уместен. –

+0

, так как ОП спрашивал, как создавать обработчики событий без формы, я думал, что стоит упомянуть, что существует подход без классов. –