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

Вниз

Как перехватить сообщенния(WM_PAINT) определенному контролу   Найти похожие ветки 

 
Evil   (2008-05-04 17:33) [0]

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


 
Johnmen ©   (2008-05-04 19:25) [1]

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


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

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

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

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


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

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


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

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


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

> Evil   (04.05.08 20:24) [4]

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

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


 
oldman ©   (2008-05-04 20:46) [6]


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

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


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


 
Johnmen ©   (2008-05-04 20:51) [7]


> Evil   (04.05.08 19:44) [2]

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


 
Evil   (2008-05-04 21:02) [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) и обработать по своему... но здесь я наступил на новые грабли... как отделыть те месаги которые йдут для моего контрола...


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

> Evil   (04.05.08 21:02) [8]

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


 
oldman ©   (2008-05-04 21:08) [10]


> Evil   (04.05.08 21:02) [8]


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


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


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


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


 
Johnmen ©   (2008-05-04 21:15) [12]


> Evil   (04.05.08 21:02) [8]

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


 
Johnmen ©   (2008-05-04 21:17) [13]


> Evil   (04.05.08 21:14) [11]

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


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

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

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;


 
Evil   (2008-05-05 20:37) [15]

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



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

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

Наверх




Память: 0.5 MB
Время: 0.018 c
2-1210594045
smartleds
2008-05-12 16:07
2008.06.01
Коллеги , подскажите как при выводе вместо запятой ,


15-1208248182
AlexDan
2008-04-15 12:29
2008.06.01
Название проги для выключения компа.


2-1209995988
Инна
2008-05-05 17:59
2008.06.01
Запрос и удаление


9-1170746481
maxProg
2007-02-06 10:21
2008.06.01
Текстура (Direct3D)


15-1208423289
shlst
2008-04-17 13:08
2008.06.01
DVD на ноуте с P2-mmx 230мгц и win98