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

Вниз

перехват скролинга компонента   Найти похожие ветки 

 
lena19   (2004-06-01 21:08) [0]

всем привет
народ подскажите как перехватить скролинг например у компонента
мемо


 
stany ©   (2004-06-02 09:18) [1]

обработать WM_HSCROLL and WM_VSCROLL


 
lena19   (2004-06-06 01:43) [2]

не могу поставить локальную ловушку
на скрол в мемо,
народ что я не так делаю ?????

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;


 
akvilon   (2004-06-06 18:59) [3]

Если Memo принадлежит Вашему приложению, то лучше сабклассируйте окно Memo. Т.е. переопределите WindowProc у этого мемо на свою процедуру (она станет процедурой окна мемо), после обработки в ней сообщений WM_HSCROLL и WM_VSCROLL вызывайте родную процедуру
Memo.WndProc(msg: TMEssage).


 
lena19   (2004-06-06 23:46) [4]

TO akvilon
а можно чуть по подробнее (а то я не особо суть уловила)


 
akvilon ©   (2004-06-07 01:07) [5]

Вы, как я понял, хотите поставить локальную ловушку. Так вот в функцию ловушки передается структура (или запись) 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-07 20:31) [6]

в приведенном мной примере просто не вошла строка с кодом
передачи сообщения по цепочке ловушек на самом деле она есть


 
akvilon ©   (2004-06-07 23:08) [7]

>>> CurrentHook:= setwindowshookex(Wm_Vscroll,@VscrollHook,0,memo1.Handle);

первым параметром этой функции должен быть параметр idHook: т.е. одна из констант WH_ , а вы ставите идентификатор сообщения, здесь и не так


 
akvilon ©   (2004-06-07 23:10) [8]

ИМХО: лучше сабклассинг


 
wicked ©   (2004-06-08 11:29) [9]

а еще лучше, чем перекрытие WndProc, является свойство WindowProc - тогда и наследовать ничего не надо...
учите матчасть - это съэкономит вам и силы, и нервы, и хитрее будете... ;)


 
lena19   (2004-06-08 18:38) [10]

на WindowProc все получилось .
всем спасибо .



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

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

Наверх




Память: 0.49 MB
Время: 0.055 c
3-1088583709
_serg_
2004-06-30 12:21
2004.07.25
Нахождение запросов, отдающих большой набор данных (в байтах)


1-1089552216
b@nz@i
2004-07-11 17:23
2004.07.25
подскажите срочно как в TRICHEDIT загрузить word документ (с нажа


3-1088753179
Manfred8
2004-07-02 11:26
2004.07.25
Decision Cube


8-1083904486
nkoleda
2004-05-07 08:34
2004.07.25
Информация в примечании Excel


4-1086467408
AndreySoft
2004-06-06 00:30
2004.07.25
Как запретить нажатие клавиши "WINDOWS"