Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как перехватить сообщенния(WM_PAINT) определенному контролу [D2005, XP]


Evil ©   (2008-05-04 17:33:00) 

Появилась некая необходимость вивести картинку в окне прыложенния...
Но загвоздка заключаеться в том что форма уже перекрыта панелью и на ней имеются контролы... Пытался рисовавть через TControlCanvas... но
у панели есть свой обработчик на сообщенния WM_PAINT...
Так вот такой вопрос: Как перехватить(определыть) это собщенния для панели?


Evil   (2008-05-05 20:37:00) [1]

Пасиба всем! розобрался :)


Игорь Шевченко   (2008-05-05 09:29:00) [2]

хуки, хуки...

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   ...
   procedure FormCreate(Sender: TObject);
   ...
 private
   OldPanelProc: TWndMethod;
   procedure NewPanelProc (var Message: TMessage);
 end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 OldPanelProc := Panel1.WindowProc;
 Panel1.WindowProc := NewPanelProc;
end;

procedure TForm1.NewPanelProc (var Message: TMessage);
begin
 if Message.Msg = WM_PAINT then
 begin
    ... тут делаешь, что хошь
 end;
 OldPanelProc(Message);
end;


Johnmen   (2008-05-04 21:17:00) [3]


> Evil   (04.05.08 21:14) [11]

Ну и вызывай InvalidateRect, InvalidateRgn.


Johnmen   (2008-05-04 21:15:00) [4]


> Evil   (04.05.08 21:02) [8]

Всё равно, не понятно, ЗАЧЕМ перехватывать?
Кстати, рекомендую почитать про WM_PAINT, зачем нужен, как генерится, с чем едят. Очень полезно, и вопросы странные исчезнут...


Evil   (2008-05-04 21:14:00) [5]


> oldman ©   (04.05.08 21:08) [10]


рисую через ControlCanvas на Panel


Восхищенный   (2008-05-04 21:08:00) [6]

> Evil   (04.05.08 21:02) [8]

Не удастся. Это процедура НЕ получит сообщений панели.


oldman   (2008-05-04 21:08:00) [7]


> Evil   (04.05.08 21:02) [8]


Одно не понимаю - куда ты хочешь вывести картинку, если форма "перекрыта" панелью?


Evil   (2008-05-04 21:02:00) [8]


> Johnmen ©   (04.05.08 20:51) [7]
> > Evil   (04.05.08 19:44) [2]Зачем у панели определена процедура
> для перехвата?


вот эту процедуру "procedure WMPaint(var Message: TWMPaint); message WM_PAINT;" я запхав в модуль главной формы в надежде на то что удастся перехватить Messageдля мого контрола(Tpanel) и обработать по своему... но здесь я наступил на новые грабли... как отделыть те месаги которые йдут для моего контрола...


Johnmen   (2008-05-04 20:51:00) [9]


> Evil   (04.05.08 19:44) [2]

Зачем у панели определена процедура для перехвата?


oldman   (2008-05-04 20:46:00) [10]


> Evil   (04.05.08 17:33)  
> Но загвоздка заключаеться в том что форма уже перекрыта
> панелью
>
> Johnmen ©   (04.05.08 19:25) [1]
> Что такое "панель"?

> Evil   (04.05.08 19:44) [2]
> панель это TPanel :-)


Жаль, Орешник сдох...
:)))


Восхищенный   (2008-05-04 20:37:00) [11]

> Evil   (04.05.08 20:24) [4]

Про хук - см. SetWindowsHookEx с WH_CALLWNDPROC (RET).

Про потомок панели - это не проблема. Закрываешь проект, пишешь потомка панели, инсталлируешь его в среду, закрываешь все проекты. Потом блокнотом меняешь класс панели в pas и в dfm на свой. Открываешь проект - и вуаля!


Evil   (2008-05-04 20:24:00) [12]

Про хук по подробней(желательно маленький прымер) ...
О потомке панели уже подумовал но много кода уже написано... да и компоненты полдня на панели розполагал чтоб выглядело сносно... :)


Восхищенный   (2008-05-04 20:18:00) [13]

Или написать потомок панели, или поставить хук.


Evil   (2008-05-04 19:44:00) [14]

панель это TPanel :-)
процедуру  для перехвата опредилыв

procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

но вопрос остается в силе как опредилыть что сообщенния адресуется моему контролу?


Johnmen   (2008-05-04 19:25:00) [15]

Что такое "панель"?


Наверх

Титульная страница Поиск, карта сайта Написать письмо