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

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

перехват скролинга компонента [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


Наверх

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