Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как обрабатывать wm_paint [D7, WinXP]


Ugrael ©   (2005-07-28 17:08:00) 

Народ, помогите разобраться новичку.Уперся рогом и все. НЕ ПОНИМАЮ как работает ?! Суть проблемы проста, но я что но попал в ечный цикл и никак не пойму как работает.Итак-
На форме рисую например квадрат.Рисую средствами API.
при схлопывании\обновлении\перекрытии окна рисунок затирается.
Везде написано, что надо обрабатывать сообщение wm_pain.
и все, тут у меня в голове затык.8( как ? не пойму ... и примеров что то пока не нашел. бо пример нужен для полного ...новичка.Кому не в лом либо отошлите к инфе, либо напишите как это сделать ?заранее спасибо.


alpet   (2005-07-29 12:37:00) [1]

после прорисовки:

ValidateRect (hWnd, nil);
msg.result := 0; // message has handled


Ugrael   (2005-07-29 11:49:00) [2]

заработало, но заработало ... постоянно перерисовывается вся область экрана.... может я что то не так сделал ?
я в обработке процедуры wm_paint поставил вызов своей процедуры рисования. это правильно ? или это надо как то по другому перерисовывать ? мне ж надо ( по учебникам) перерисовать только область которая была перекрыта. причем один раз....


GrayFace   (2005-07-29 02:51:00) [3]

А как его правильно обрабатывать в API? Дело в том, что тот hdc, который подается функции "Doesn't allow drawing". Но зачем тогда он нужен?


Leonid Troyanovsky   (2005-07-28 19:33:00) [4]


> Ugrael ©   (28.07.05 17:08)

> ...новичка.Кому не в лом либо отошлите к инфе, либо напишите
> как это сделать ?заранее спасибо.


Чарльз Калверт "Дельфи Х: Энциклопедия пользователя".
Разнообразные примеры для разных категорий читателей!

--
Regards, LVT.

PS. Прошу не считать данное сообщение рекламой.


Чапаев   (2005-07-28 18:12:00) [5]

> TForm1 = class (TForm)
Это в конференции-то WinAPI? Тогда уж проще дубль-кликнуть в инспекторе объектов около OnPaint...


BiN   (2005-07-28 17:47:00) [6]

WMPaint (var msg: TWMPaint)


Ugrael   (2005-07-28 17:36:00) [7]

alpet. спасибо, вроде примерно понял что то ...
вот только после вставки этих строк не проходит компиляция.
пишет, что Invalid message parametr list на строчку
procedure WMPaint (msg: TWMPaint); message WM_PAINT;


Ugrael   (2005-07-28 17:23:00) [8]

а код примерно такой:
при создании формы получаю hdc формы.
в табличку заносятся координаты рисунка. и потом вызывается процедура перерисовки.
procedure redraw();
begin

beginpath(hdc);
polygon(dc,ar,4);
endpath(dc);
rgn:=pathtoregion(dc);
fillrgn(dc,rgn,brush);

end;


alpet   (2005-07-28 17:21:00) [9]


type
TForm1 = class (TForm)
      ...
    private
     procedure WMPaint (msg: TWMPaint); message WM_PAINT;
    end;
...
procedure TForm1.WMPaint;
begin
canvas.Rectangle (...);
end;


Ugrael   (2005-07-28 17:17:00) [10]

если честно я даже не знаю где вообще обрабатывать сообщения нужно. 8(


Чапаев   (2005-07-28 17:13:00) [11]

> и примеров что то пока не нашел. бо пример нужен для полного ...новичка.
Была такая отличная книжка Borland Pascal for Windows (издательство Диалектика). Там хоть и Win16 расписывается, но зато всё на API...

А тебе нужно в case'у, где ты обрабатываешь сообщения добавить ещё и обработку WM_PAINT. Если непонятно, кидай код.


Наверх

Титульная страница Поиск, карта сайта Написать письмо