Главная страница
    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.46 MB
Время: 0.008 c
6-101431
Витёк
2002-08-27 05:01
2002.10.31
Как пинговать компьютер host каждые t минут


3-101095
volodya_
2002-10-09 13:45
2002.10.31
ADO


8-101387
MYurik
2002-07-08 11:19
2002.10.31
Тени в GLScene!


3-101162
yaJohn
2002-10-10 15:23
2002.10.31
Как быстро перекачать данные между двумя DataSet?


8-101391
Юра
2002-07-04 00:02
2002.10.31
SoundCard





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский