Форум: "WinAPI";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Внизперехват скролинга компонента Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c