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