Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как добавить компоненту новое событие? [D6, Win95/98]


Mars ©   (2002-09-11 15:46:00) 

Например RichEdit"у событие onScroll.


Song   (2002-09-11 18:01:00) [1]


protected
Procedure WhetherIsWindowsShutDown(Var Msg:TMessage); message WM_ENDSESSION;
...

Procedure TForm1.WhetherIsWindowsShutDown(Var Msg:TMessage);
Begin
IF Msg.wParam=1 then MainForm.Close;
inherited;
End;


Сразу предупреждаю тех, кто захочет после моего ответа сказать что WM_ENDSESSION не катит, нужен WM_QUERYENDSESSION. Дык вот много раз убеждался и сейчас могу сказать: просто для того, чтобы закрыть форму и/или выполнить действия некритичные по времени, этого события достаточно.


Mars   (2002-09-11 17:55:00) [2]

Дааа, я чето думал все так просто!
Щас попробую чего то склеить из Ваших ответов.


Старый Паскалист   (2002-09-11 16:28:00) [3]

И в обработчиках собыитий inherited не забудь!!!.

procedure WMHScroll(var Msg: TScrollMessage); message WM_HScroll;
begin
inherited;
with Msg do
begin
DoScroll(...);
end;
end;


MBo   (2002-09-11 16:20:00) [4]

пример наследника с обработчиком событий
http://www.swissdelphicenter.ch/en/showcode.php?id=1068


Старый Паскалист   (2002-09-11 16:18:00) [5]

А генерить событие кто будет? - ты думаешь, если назвал событие
OnScroll, то его кто-то вызовет при прокрутке?
Нужно ловить соответствующие события и в их обработчика генерировать событие.

Надо ловить сообщения. возникающие при скроллировании.
В грубом приближении что-то вроде

TMyRichEdit = class(TRichEdit)
private
FOnScroll: TScrollEvent;
published
property OnScroll: TScrollEvent read FOnScroll write FOnScroll;
procedure DoScroll(...); dynamic;
//begin
// Генеришь событие
// if Assigned(FOnScroll) then FOnScroll(...);
//end;
procedure WMHScroll(var Msg: TScrollMessage); message WM_HScroll;
// begin
// with Msg do
// begin
// DoScroll(направление, Msg.ScrollCode, Msg.Pos..., вобщем, преобразовывать инфу из Msg в то, что нужно для TScrollEvent);
// end;
// end;
procedure WMVScroll(var Msg: TScrollMessage); message WM_VScroll; //
// то же самое с учётом направления
//
end;


Демонов Е.В.   (2002-09-11 16:16:00) [6]

>>Пробую через наследника,
>>компилятор пропускает, но на событие никаких реакций!

Действительно, смешно , ты бы тогда просто в тексте программы написал : -
//Delphi, Хочу программму такую .... чтобы ..."
Компилятор тоже пропустит - но такую, чтобы .... не сделает


Виктор Щербаков   (2002-09-11 16:10:00) [7]

Обработчик события, который храниться в FOnScroll ты должен вызывать сам из кода твоего компонента. Ты это делаешь?


Mars   (2002-09-11 16:04:00) [8]

Пробую через наследника,
компилятор пропускает, но на событие никаких реакций!

TMyRichEdit = class(TRichEdit)
private
FOnScroll: TScrollEvent;
published
property OnScroll: TScrollEvent read FOnScroll write FOnScroll;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
MRE1:TMyRichEdit;
begin
MRE1:=TMyRichEdit.Create(Self);
MRE1.OnScroll:=MREScroll;
end;

procedure TForm1.MREScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
ShowMessage("onScroll Event");
end;


MBo   (2002-09-11 15:48:00) [9]

Проще всего сделать наследника.
Можно и перекрыть WindowProc


Наверх

Титульная страница Поиск, карта сайта Написать письмо