Главная страница
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.021 c
2-1210344915
Jeqa
2008-05-09 18:55
2008.06.01
свойства из инспектора объектов


15-1208530289
altera
2008-04-18 18:51
2008.06.01
Изменение размеров изображения не меняя размеров tImage-а


2-1210254880
WebSQLNeederr
2008-05-08 17:54
2008.06.01
Напомните как в Стринглист удалить повторяющиеся строки?


15-1208330576
Slider007
2008-04-16 11:22
2008.06.01
С днем рождения ! 16 апреля 2008 среда


2-1209735021
Kostafey
2008-05-02 17:30
2008.06.01
Как установить курсор в TTable на определенную запись ?