Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1140019073
Ольга
2006-02-15 18:57
2006.04.09
Странное сообщение SQL-сервера


3-1140067253
Рафик
2006-02-16 08:20
2006.04.09
Помогите создать запрос по дате


1-1141745031
Кефир87
2006-03-07 18:23
2006.04.09
Минимизация НЕ главной формы


2-1143192167
DmitryNekl
2006-03-24 12:22
2006.04.09
Сохранение сжатого bmp-файла в ClientDataSet


2-1143014274
RomanH
2006-03-22 10:57
2006.04.09
Данные ClientDataSet из MDI формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский