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

Вниз

Как добавить компоненту новое событие?   Найти похожие ветки 

 
Mars   (2002-09-11 15:46) [0]

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


 
MBo ©   (2002-09-11 15:48) [1]

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


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

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

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;



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

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


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

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

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


 
Старый Паскалист   (2002-09-11 16:18) [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;


 
MBo ©   (2002-09-11 16:20) [6]

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


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

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

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


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

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


 
Song ©   (2002-09-11 18:01) [9]


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. Дык вот много раз убеждался и сейчас могу сказать: просто для того, чтобы закрыть форму и/или выполнить действия некритичные по времени, этого события достаточно.



Страницы: 1 вся ветка

Текущий архив: 2002.09.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
3-73539
gera-killer
2002-09-02 15:02
2002.09.23
Delphi + Btrieve?


14-73876
.nuke
2002-08-29 15:01
2002.09.23
А здесь есть кто из Ульяновска?


1-73603
KIR
2002-09-12 11:46
2002.09.23
Как правильно вывести PopupMenu


1-73584
ikivio
2002-09-09 04:36
2002.09.23
Определение конца записи в памяти переменной или функции


1-73665
-==stranger==-
2002-09-12 10:47
2002.09.23
Нужен ввод формул...