Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: WinAPI и системное программирование > Обработка TWMNotify для ListView |
Автор: ChaserHA 5.2.2007, 15:39 | ||||
Всем привет. Обрабатываю сообщение TWMNotify для ListView.
Проблема: если ListView находится на форме, то сообщение обрабатвается, ели ListView поместить к примеру на Panel, то TForm1.WMNotify не срабатывает. Вроде как в такой ситуации надо перекрыть WndProc, но у меня не выходит (( Пишу в FormCreate "Panel1.WindowProc:=WndProc;", затем обрабатываю,
но вылетает ошибка. Может это конечно полный бред, тогда подскажите как сделать правильно. |
Автор: MetalFan 5.2.2007, 21:34 |
не, ну правильно) присвоил только Msg, а в остальном мусор содержится. пиши Msg := TWMNotify( Message ); и вообще, более "звучные" названия давай переменным) а то Msg.Msg както неочень имхо смотрится) + хошь каверзный вопрос? как высоко летит? вектор движение и ускорение измерить не пробовали? а если серьезно - КАКАЯ ошибка? |
Автор: ChaserHA 6.2.2007, 09:23 | ||
Благодарю за внимание, исправил, но теперь выдается ошибка "Stack overflow".
|
Автор: MetalFan 6.2.2007, 09:27 |
а зачем ты WMNotify(Msg) делаешь?! или убери эту строчку, или убери message WM_NOTIFY; |
Автор: ChaserHA 6.2.2007, 09:30 |
Если убрать эту строчку ничего не меняется, т.е. опять появляется "Stack overflow". |
Автор: ChaserHA 6.2.2007, 13:08 | ||
На всякий случай привожу полный код. Если разкомментировать procedure WndProc и Panel1.WindowProc:=WndProc;, то "Stack overflow". Как сделать чтобы все это работало?
|
Автор: MetalFan 6.2.2007, 23:57 |
странно) хотя понятно. ошибка в глаза бросается. что у тебя полчуается.... - перекрыт метод WndProc у формы. - он же назначается как WindowProc Panelи. приходит сообщение форме, потом попадает в WindowProc панели, которым является WindowProc формы, который опять отдает сообщение WindowProc панели... вот вам и рекурсия и переполнение стека варианты решения: 1) *убери в FormCreate переназначение WindowProc панели * в "перекрытом" WndProc вызывать не inherited, а inherited WndProc(Message); 2) *убрать перекрывание WndProc. * назвать новый метод NewWndProc. * в OnCreate сохранить в поле класса FOldWndProc старый обработчик типа TWndMethod * в NewWndProc вызывать FOldWndProc |
Автор: osvirt 1.4.2012, 13:01 | ||||
День добрый. Похожая неразрешимая (мной ![]() простецкий код:
все работает пока не помещу на Panel (которая сама на панели лежит... не знаю: может там еще придется че-то дописывать из-за этого?) добавление этого:
не меняет ничего... подскажите нубу, как заставить календарь срабатывать на месте ![]() |