procedure TCustomForm.WMPaint(var Message: TWMPaint);
var
DC: HDC;
PS: TPaintStruct;
begin
if not IsIconic(Handle) then
begin
ControlState := ControlState + [csCustomPaint];
inherited;
ControlState := ControlState - [csCustomPaint];
end
else
begin
DC := BeginPaint(Handle, PS);
DrawIcon(DC, 0, 0, GetIconHandle);
EndPaint(Handle, PS);
end;
end;
Delphi. создание визуальных компонент.
Собственно интересует один момент: рисование компонента.
Для прорисовки компонента я перегружаю Paint(в TGraphicControl), но смушает, то что он слищком часто перерисовывается.
Как наиболее оптимально рисовать компоненту?
Слошком часто - это как?
Собственно я так понимаю, что стандартные компоненты перерисовываеют только необходимую часть. Как это сделать и какие сообщения перехватывать?
Код:
Попробуй, может поможет.
Но предупреждаю сзаранее, я визуальных компонент не создавал, а данный пример нашол только что...
2 misha_turist Paint выполняется при сообщении WM_PAINT... поэтому то, что ты предложил и то, что используется - равносильно....
Цитата:
компоненты перерисовываеют только необходимую часть
TCanvas.ClipRect
А как определить какую часть нужно перерисовать?
а вообще при правильно поставленных задачах такого гимора не должно быть
а вообще при правильно поставленных задачах такого гимора не должно быть[/QUOTE]
Я имею виду например такую ситуацию:
Над моей компонентой проехало окно, винда же должна компоненте передать какую ее часть нужно перерисовать, что-бы не перерисовывать компоненту полностью.
Как мне этот месседж получить?
у нормального окна можно спросить GetUpdateRect апишкой прямоугольник прорисовки
А дабл буфферинг ставил?
TCanvas.ClipRect - этот Rect и требует перерисовки...