Форум: "Начинающим";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];
ВнизКак перехватить сообщенния(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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c