Форум: "Компоненты";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизТекст опубликованного в компоненте события Найти похожие ветки
← →
Viva © (2005-04-01 10:42) [0]Уважаемые Мастера!
Существует ли возможность создания собственного события,
опубликованного в компоненте, чтобы при клике на нём в
Инспекторе Объектов кроме описания процедуры появлялся ещё некоторый текст
Например вместо
procedure TForm1.MyComponentMyEvent(Sender: TObject;
var Operation: Integer);
begin
end;
появлялось бы:
procedure TForm1.MyComponentMyEvent(Sender: TObject;
var Operation: Integer);
begin
MyFunc(Operation);
end;
← →
jack128 © (2005-04-01 11:14) [1]если напишешь свой эксперт IDE, то можно наверное. Только зачем?? Если тебе эта строка так нужна, то почему бы её в самом компоненте не прописать?
← →
Viva © (2005-04-01 11:35) [2]jack128 писал
"если напишешь свой эксперт IDE" - не умею.
"Если тебе эта строка так нужна, то почему бы её в самом компоненте не прописать?"
В таком случае при компиляции и установке компонента
требуется реализованная процедура MyFunc
← →
Юрий Зотов © (2005-04-01 18:53) [3]> Viva © (01.04.05 11:35) [2]
Предположим, Вы задачу решили, эксперт написан и вызов MyFunc в тексте обработчика появляется.
Но что мешает юзеру Вашего компонента назначать обработчик собюытия не через Инспектор Объектов, а в коде?
Ничто не мешает. И он это обязательно когда-нибуть сделает, можно даже не сомневаться.
И что тогда? Он все равно сам, ручками должен будет вписать вызов MyFunc. А тогда какой же смысл во всей этой затее с экспертом? Выходит, никакого.
Налицо логическая ошибка в проектировании компонента. Поэтому давайте начнем с ИСХОДНОЙ задачи - что Вы хотите получить?
← →
icWasya © (2005-04-01 21:51) [4]> Юрий Зотов © (01.04.05 18:53) [3]
А тогда какой же смысл во всей этой затее с экспертом?
Такая фича используется при генерации кода обработчиков событий фреймов. Может это человеку нужно?
← →
Юрий Зотов © (2005-04-01 22:20) [5]> icWasya © (01.04.05 21:51) [4]
Дык... откуда же кто может знать, что ему нужно?
Тут гадать бесполезно. Скажет - увидим.
← →
jack128 © (2005-04-02 00:58) [6]Viva © (01.04.05 11:35) [2]
требуется реализованная процедура MyFunc
а что, если вызов этой функции впишет эксперт, то её(функцию) уже не нужно реализовывать?
← →
Viva © (2005-04-04 05:50) [7]Имеется созданная сторонней организацией DLL, вызов функции из неё просто необходим для успешной работы компонента.
При создании экземпляра компонента вручную приходится заполнять тело обработчика события фактически всегда одним и тем же кодом.
Пока всё работает успешно, но лень писать (копировать) один и тот же код, вот и подумалось, а нет ли помощника (мастера), позволяющего облегчить эту задачу.
Мастерам - спасибо за проявленный интерес к теме.
← →
Юрий Зотов © (2005-04-04 15:16) [8]> 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) не требуется.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c