Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Текст опубликованного в компоненте события   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
2-1131523754
Goast
2005-11-09 11:09
2005.11.27
Мерцает image!


14-1131523910
Zacho
2005-11-09 11:11
2005.11.27
Фантастика про армию и войну Игоря Поля


1-1130948246
ali_tash
2005-11-02 19:17
2005.11.27
Как закрывать пройденные записи в OracleDataSet


14-1130871615
Некто
2005-11-01 22:00
2005.11.27
МУПы это пережиток соц. прошлого


3-1128543771
Слоник
2005-10-06 00:22
2005.11.27
Delphi 8 - как использовать сторонний ODBC-драйвер