![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Текст опубликованного в компоненте события
Viva © (2005-04-01 10:42:00)Уважаемые Мастера!
Существует ли возможность создания собственного события,
опубликованного в компоненте, чтобы при клике на нём в
Инспекторе Объектов кроме описания процедуры появлялся ещё некоторый текст
Например вместо
procedure TForm1.MyComponentMyEvent(Sender: TObject;
var Operation: Integer);
begin
end;
появлялось бы:
procedure TForm1.MyComponentMyEvent(Sender: TObject;
var Operation: Integer);
begin
MyFunc(Operation);
end;
Юрий Зотов (2005-04-04 15:16:00) [1]> Viva © (04.04.05 05:50) [7]
В таком случае, код вызова функции DLL все-таки можно прописать в самом компоненте (и, видимо, лучше всего сделать это в методе диспетчеризации события).
const
DllName = '...'; // Имя файла DLL
DllFuncName '...'; // Имя функции DLL
type
TDllFunc = ...; // Тип функции DLL
TMyEvent = procedure(...) of object; // Тип события
TMyComp = class(...)
private
FOnMyEvent: TMyEvent;
protected
procedure DoMyEvent; dynamic;
public
constructor Create(AOwner: TComponent); override;
published
property OnMyEvent: TMyEvent reaf FOnMyEvent write FOnMyEvent;
end;
implementation
var
DllFunc: TDllFunc = nil;
constructor Create(AOwner: TComponent);
begin
inherited;
if not (csDesigning in ComponentState) and (DllFunc = nil) then
@DllLFunc := GetProcAddress(LoadLibray(DllName), DllFuncName)
end;
procedure DoMyEvent; dynamic;
begin
if Assigned(FOnMyEvent) then
begin
if @DllLFunc <> nil then
DllFunc(...);
FOnMyEvent(...)
end
end;
И все дела. Каждый раз, когда компоненту нужно возбудить событие, он, как обычно это и делается, вызывает метод его диспетчеризации и там сначала отрабатывает функция DLL, а затем - пользовательский обработчик. При этом и пользователю ничего лишнего писать не нужно, и DLL на этапе инсталляции (и в design-time) не требуется.
Viva (2005-04-04 05:50:00) [2]Имеется созданная сторонней организацией DLL, вызов функции из неё просто необходим для успешной работы компонента.
При создании экземпляра компонента вручную приходится заполнять тело обработчика события фактически всегда одним и тем же кодом.
Пока всё работает успешно, но лень писать (копировать) один и тот же код, вот и подумалось, а нет ли помощника (мастера), позволяющего облегчить эту задачу.
Мастерам - спасибо за проявленный интерес к теме.
jack128 (2005-04-02 00:58:00) [3]Viva © (01.04.05 11:35) [2]
требуется реализованная процедура MyFunc
а что, если вызов этой функции впишет эксперт, то её(функцию) уже не нужно реализовывать?
Юрий Зотов (2005-04-01 22:20:00) [4]> icWasya © (01.04.05 21:51) [4]
Дык... откуда же кто может знать, что ему нужно?
Тут гадать бесполезно. Скажет - увидим.
icWasya (2005-04-01 21:51:00) [5]> Юрий Зотов © (01.04.05 18:53) [3]
А тогда какой же смысл во всей этой затее с экспертом?
Такая фича используется при генерации кода обработчиков событий фреймов. Может это человеку нужно?
Юрий Зотов (2005-04-01 18:53:00) [6]> Viva © (01.04.05 11:35) [2]
Предположим, Вы задачу решили, эксперт написан и вызов MyFunc в тексте обработчика появляется.
Но что мешает юзеру Вашего компонента назначать обработчик собюытия не через Инспектор Объектов, а в коде?
Ничто не мешает. И он это обязательно когда-нибуть сделает, можно даже не сомневаться.
И что тогда? Он все равно сам, ручками должен будет вписать вызов MyFunc. А тогда какой же смысл во всей этой затее с экспертом? Выходит, никакого.
Налицо логическая ошибка в проектировании компонента. Поэтому давайте начнем с ИСХОДНОЙ задачи - что Вы хотите получить?
Viva (2005-04-01 11:35:00) [7]jack128писал
"если напишешь свой эксперт IDE" - не умею.
"Если тебе эта строка так нужна, то почему бы её в самом компоненте не прописать?"
В таком случае при компиляции и установке компонента
требуется реализованная процедура MyFunc
jack128 (2005-04-01 11:14:00) [8]если напишешь свой эксперт IDE, то можно наверное. Только зачем?? Если тебе эта строка так нужна, то почему бы её в самом компоненте не прописать?