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

Вниз

WM_VSCROLL   Найти похожие ветки 

 
МИФИст ©   (2002-09-18 19:32) [0]

Объясните, почему при вертикальной прокрутке RichEdit"а я не могу поймать сообщение WM_VSCROLL или WM_COMMAND->EN_VSCROLL?
Какое событие соответствует нажатию клавиши вниз или вверх?


 
Song ©   (2002-09-18 19:42) [1]

А как ловите?


 
МИФИст ©   (2002-09-18 20:20) [2]

protected
procedure WMCOM(var Mes: TMessage); message WM_COMMAND;
procedure WMSCR(var Mes: TMessage); message WM_VSCROLL;

первая процедура ловит другие сообщения, кроме EN_VSCROLL, вторая ничего не ловит


 
Song ©   (2002-09-18 21:27) [3]

Непонятно что у Вас за класс. Это наследник?


 
МИФИст ©   (2002-09-18 22:00) [4]

type
TForm2 = class(TForm)
...
protected
procedure WMCOM(var Mes: TMessage); message WM_COMMAND;
procedure WMSCR(var Mes: TMessage); message WM_VSCROLL;


 
MBo ©   (2002-09-18 23:09) [5]

Естественно, что сообщение прокрутки Richedit не приходит ФОРМЕ.
см. WindowProc


 
МИФИст ©   (2002-09-18 23:35) [6]

Не подскажите как её использовать, это то?
class TForm1 : public TForm
{
__published: // IDE-шные компоненты
TMemo *Memo1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
private: // Пользовательские объявления

public: // Пользовательские объявления
__fastcall TForm1(TComponent* Owner);

WNDPROC OldWindowProc;
};

CPP file:

LRESULT CALLBACK NewWindowProc(HWND hWnd, UINT msg, WPARAM w,
LPARAM l)
{

//Обрабатываем нужное нам сообщение
if (msg == WM_VSCROLL)
ShowMessage("The vertical scrollbar is scrolling!");

//Если нам необходимо прекратить дальнейшую обработку сообщения,
//то выходим и возвращаем ноль

//Вызываем старую оконную процедуру,
//которая обработает сообщение.
return CallWindowProc((FARPROC)Form1->OldWindowProc, hWnd, msg, w, l);
}
//----------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OldWindowProc = (WNDPROC)SetWindowLong(Memo1->Handle,
GWL_WNDPROC, (long)NewWindowProc);
}
//----------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
SetWindowLong(Memo1->Handle, GWL_WNDPROC, (long)OldWindowProc);
}
//----------------------------------------------------------------------


 
Alx2 ©   (2002-09-19 08:36) [7]

>Не подскажите как её использовать, это то?
Скорее всего то. В частности, для Memo.


 
Alx2 ©   (2002-09-19 08:43) [8]

>return CallWindowProc((FARPROC)Form1->OldWindowProc, hWnd, msg, w, l);

Вот это место: Form1->OldWindowProc
кривое. Нарушается классовая концепция :)

Лучше использовать
function MakeObjectInstance(Method: TWndMethod): Pointer;
Которая метода объекта позволяет использовать как оконную ф-ю.

PS
type
TWndMethod = procedure(var Message: TMessage) of object;



 
MBo ©   (2002-09-19 09:41) [9]

с приведенной системой перехвата придется MakeObjectInstance делать, как сказал Alx2, но можно и проще - RichEdit1.WndProc подменять своей процедурой, не забыв сохранить и вызвать старую



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
4-101580
Zion
2002-09-19 18:23
2002.10.31
Вопрос тоже кстати из-за неопытности....


3-101065
alenka
2002-10-11 03:16
2002.10.31
обновить записи


7-101532
Автответчик
2002-08-21 16:28
2002.10.31
Как программно позвонить через модем и сказать стандартную фразу?


1-101329
Net Prosto
2002-10-18 22:17
2002.10.31
Frames


14-101507
DeepProg
2002-10-12 15:27
2002.10.31
Fight Club