Форум: "Основная";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
ВнизКак добавить компоненту новое событие? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c