Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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.015 c
14-1131051081
Profi
2005-11-03 23:51
2005.11.27
Почему программисты на С++ ценятся больше чем на Delphi?


2-1131810989
The Sound
2005-11-12 18:56
2005.11.27
Кирилица в имени файла.


2-1131296696
ant_
2005-11-06 20:04
2005.11.27
цыклы


14-1131429644
Laymer
2005-11-08 09:00
2005.11.27
ODBC для FireBerd


14-1131494060
JUS
2005-11-09 02:54
2005.11.27
Есть ли сайт где можно сразу отправить много много смс сообщений?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский