Вниз
Скачать: CL | DM;

Перехват PAINT панели.   Найти похожие ветки 

 
DR0N ©   (2006-03-04 21:15) [0]

Мне нужно перехватить отрисовку панели и выполнить действия, вернее в момент когда форма получит WM_PAINT и дойдет до отрисовки панели, мне нужно отрисовать OpenGL сцену. Но не суть важно. Я пробовал так:
procedure TForm1.WMPaint(var Msg: TWMPaint);
var
 ps : TPaintStruct;
begin
BeginPaint (Panel1.Handle, ps);
EngineMainDraw;
EndPaint (Panel1.Handle, ps);
end;
Но тогда траблы с отрисовкой прочих компанентов, которые на форме тоже присутствуют.


 
TUser ©   (2006-03-05 10:03) [1]

Странный способ начинать отрисовку OpenGL сцены, имхо. Ты ее начнешь, это опять означает WM_PAINT, и так далее, называется - бесконечный цикл. Или я чего-то не понял.

Но если очень надо, то я бы перехватывал wm_paint у самой панели. Или наследника бы от TPanel написал, или подстунул бы ему свою оконную процедуру.


 
DR0N ©   (2006-03-05 16:04) [2]

Просто у меня рисуется сейчас на OnIdle окна, что ни есть очень хорошо. При таком способе например если поверх панели таскать еще одно окно то перерисовка не идет, пока не отпустить окно, что ни есть хорошо. Проблемма решается перехватом паинта.
Если не сложно, напиши мне как у компонента wm_paint ловить, я просто не знаю.


 
TUser ©   (2006-03-05 17:15) [3]

Так же, как у формы.


 
wicked ©   (2006-03-05 19:20) [4]


> Если не сложно, напиши мне как у компонента wm_paint ловить,
>  я просто не знаю.

читаем в справке о св-ве WindowProc...


 
DR0N ©   (2006-03-05 21:43) [5]

Заменить что ли WindowProc панели на свой? Можно чуть более детально, а то я такие моменты плохо знаю, несколько другой профиль работы.


 
wicked ©   (2006-03-05 23:03) [6]


> Заменить что ли WindowProc панели на свой?

именно..... не забывая при этом сохранить оригинальный WindowProc панели и вызывать его для всех сообщений, которые панель должна видеть.... тип переменной для сохранения оригинального значения WindowProc - тот же, что и для св-ва WindowProc....
сори, примеров нету, поскольку рабочий код раскидан по разным классам, писанным на билдере....... но сложного там ничего нету......


 
TStas ©   (2006-03-06 00:50) [7]

>wicked
WinProc заменять можно, я, чтобы научиться, оджин раз даже заменил, но чем пло такой способ:
TMyPanel= Class(TPanel)
private
FOnPaint: TNotifyEvent;
procedure Paint; override;
end;

procedure TMyPanel.Paint;
begin
inherited;
if Assigned(FOnPaint) then
FOnPaint(Self);
end;


 
DR0N ©   (2006-03-06 06:27) [8]

А ответа на свой вопрос я так и не увидел %) Менять WindowProc, как я понял плохо, по этому и пытаться не буду =) Пойду поковыряю сам, может чего сделаю, но все же коли не сложно напишите пару строк кода %)


 
API ©   (2006-03-06 07:14) [9]

Попробуйте:

procedure TForm1.WMPaint(var Msg: TWMPaint);
var
ps : TPaintStruct;
begin
BeginPaint (Panel1.Handle, ps);
EngineMainDraw;
EndPaint (Panel1.Handle, ps);
inherited;
end;


 
wicked ©   (2006-03-06 11:01) [10]

> TStas ©   (06.03.06 00:50) [7]

> >wicked
> WinProc заменять можно, я, чтобы научиться, оджин раз даже
> заменил, но чем пло такой способ:
> пример поскипан

плох тем, что нужно наследника панели заводить.... а подмену WindowProc (не путать с WndProc, первое - свойство, второе - метод) я использую для классов, которые "улучшают" другие визуальные элементы.... скиновый движок, векторный редактор - визуальный компонент делает своё дело, а мой невизуальный - всё остальное + зачастую свой double-buffering при отрисовках......


 
GrayFace ©   (2006-03-06 15:11) [11]

DR0N ©   (06.03.06 6:27) [8]
Менять WindowProc, как я понял плохо, по этому и пытаться не буду =)

Это ты неправильно понял. В своей программе подменять - милое дело.

wicked ©   (06.03.06 11:01) [10]
а подмену WindowProc (не путать с WndProc, первое - свойство, второе - метод) я использую для классов, которые "улучшают" другие визуальные элементы.... скиновый движок, векторный редактор - визуальный компонент делает своё дело, а мой невизуальный - всё остальное + зачастую свой double-buffering при отрисовках......

А вот тут как раз конфликты могут быть если два раза один и тот же WindowProc менять.


 
wicked ©   (2006-03-06 19:00) [12]

> GrayFace ©   (06.03.06 15:11) [11]
> А вот тут как раз конфликты могут быть если два раза один
> и тот же WindowProc менять.

в нашем деле главное - аккуратность.... :)



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.025 c
15-1142701458
Volf_555
2006-03-18 20:04
2006.04.09
Как открывать Файлы и папки.. в новом окне при нажатии F3,Ctrl+F?


2-1143547815
_nikola_
2006-03-28 16:10
2006.04.09
array of Variant


6-1135720867
Гость13
2005-12-28 01:01
2006.04.09
Пишем почтовый ЧЕРВЬ на дельфи


1-1141322952
StriderMan
2006-03-02 21:09
2006.04.09
TBlobField не записывается как NULL


2-1143398127
Kolan
2006-03-26 22:35
2006.04.09
Как пользоваться интерфейсом?




   Наверх