Текущий архив: 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.46 MB
Время: 0.008 c