![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
перехват скролинга компонента [D7, WinXP]
lena19 © (2004-06-01 21:08:00)всем привет
народ подскажите как перехватить скролинг например у компонента
мемо
lena19 (2004-06-08 18:38:00) [1]на WindowProc все получилось .
всем спасибо .
wicked (2004-06-08 11:29:00) [2]а еще лучше, чем перекрытие WndProc, является свойство WindowProc - тогда и наследовать ничего не надо...
учите матчасть - это съэкономит вам и силы, и нервы, и хитрее будете... ;)
akvilon (2004-06-07 23:10:00) [3]ИМХО: лучше сабклассинг
akvilon (2004-06-07 23:08:00) [4]>>> CurrentHook:= setwindowshookex( Wm_Vscroll,@VscrollHook,0,memo1.Handle);
первым параметром этой функции должен быть параметр idHook: т.е. одна из констант WH_ , а вы ставите идентификатор сообщения, здесь и не так
lena19 (2004-06-07 20:31:00) [5]в приведенном мной примере просто не вошла строка с кодом
передачи сообщения по цепочке ловушек на самом деле она есть
akvilon (2004-06-07 01:07:00) [6]Вы, как я понял, хотите поставить локальную ловушку. Так вот в функцию ловушки передается структура (или запись) TMessage, которую обрабатываете и передаете дальше...
У каждого окна есть процедура обработки сообщений. Делфи (в VCL) переопределяет на свою, а потом вызывает стандартную (системную).
Ее можно переопределить на свою так
Memo.WindowProc := SubClassProc;
эта процедура также получает msg: TMessage
procedure TForm1.SubClassProc(var msg);
begin
case msg.message of
WM_HSCROLL: //
WM_HSCROLL: //
end;
Memo.WndProc(msg);
end;
procedure TForm1.Button1Click(...);
begin
Memo.WindowProc := SubClassProc;
end;
не проверял, но смысл передал :). Переопределение оконной процедуры удобнее ловушек, но работает только в пределах одного приложения, в отличии от ловушек.
То есть, этим кодом вы просто ставите свою процедуру обработки раньше всех других, а потом передаете всем другим :) та же ловушка
lena19 (2004-06-06 23:46:00) [7]TO akvilon
а можно чуть по подробнее (а то я не особо суть уловила)
akvilon (2004-06-06 18:59:00) [8]Если Memo принадлежит Вашему приложению, то лучше сабклассируйте окно Memo. Т.е. переопределите WindowProc у этого мемо на свою процедуру (она станет процедурой окна мемо), после обработки в ней сообщений WM_HSCROLL и WM_VSCROLL вызывайте родную процедуру
Memo.WndProc(msg: TMEssage).
lena19 (2004-06-06 01:43:00) [9]не могу поставить локальную ловушку
на скрол в мемо,
народ что я не так делаю ?????
procedure TForm1.Button1Click(Sender: TObject);
begin
CurrentHook:= setwindowshookex(Wm_Vscroll,@VscrollHook,0,memo1.Handle);
if currenthook = 0 then
beep;
end;
-------------------------------------------------------
function VscrollHook(nScrollCode:word; nPos:word; hwndScrollBar:longword): longword; stdcall;
begin
beep;
.....
end;
stany (2004-06-02 09:18:00) [10]обработать WM_HSCROLL and WM_VSCROLL