procedure TMyControl.WMPaint;
begin
DoPaint;
inherited;
end;
procedure TMyControl.DoPaint;
Var hDC: THandle;
Rect: TRect;
Canvas: TCanvas;
i: Integer;
begin
if Assigned(Parent) then
begin
// Прямоугольник размеров контрола
Rect.Top := 0;
Rect.Bottom := Height-1;
Rect.Left := 0;
Rect.Right := Width-1;
// Создаем контекст
hDC := GetDC(Handle);
Canvas := TCanvas.Create;
Canvas.Handle := hDC;
// Рисуем контрол
Paint(Canvas,Rect);
// Освобождаем контекст
ReleaseDC(Handle,hDC);
Canvas.Free;
end;
end;
Отрисовка наследника TWinControl
Я кидаю на ScrollBox свои компоненты, которые являются наследниками от TWinControl, и, соответственно, сами себя рисуют по событию WMPaint.
Все риуется нормально. Но когда поскролишь немного ScrollBox, то компоненты перестают отрисовываться, пока их не заставишь принудительно. С родными компонентами, например, TEdit такого не возникает.
Как заставить наследников корректно отрисовываться всегда?
Цитата:
Originally posted by Sagittarius
Проблема вот в чем.
Я кидаю на ScrollBox свои компоненты, которые являются наследниками от TWinControl, и, соответственно, сами себя рисуют по событию WMPaint.
Все риуется нормально.
Проблема вот в чем.
Я кидаю на ScrollBox свои компоненты, которые являются наследниками от TWinControl, и, соответственно, сами себя рисуют по событию WMPaint.
Все риуется нормально.
Вроде как оконные компоненты, отрисовывающие себя сами, должны наследоваться от TCustomControl. Но это так, к слову.
А вообще, по поведению похоже на банальную утечку ресурсов GDI.
Цитата:
Originally posted by smartsoft
Вроде как оконные компоненты, отрисовывающие себя сами, должны наследоваться от TCustomControl. Но это так, к слову.
А вообще, по поведению похоже на банальную утечку ресурсов GDI.
Вроде как оконные компоненты, отрисовывающие себя сами, должны наследоваться от TCustomControl. Но это так, к слову.
А вообще, по поведению похоже на банальную утечку ресурсов GDI.
Не думаю, что утечка емеет место быть. Вот пример.
Код:
Цитата:
Originally posted by smartsoft
Вроде как оконные компоненты, отрисовывающие себя сами, должны наследоваться от TCustomControl.
Вроде как оконные компоненты, отрисовывающие себя сами, должны наследоваться от TCustomControl.
Добавляю еще одно важное условие, которое я упустил из виду. :(
На TScrollBox лежит еще один компонент, конечно же, мой :) Это наследник от TPanel, и уже на него кидаются другие компоненты.
Наследник от TPanel рисует на себе сетку, как в Delphi (точечки с определенным шагом). Так вот эти точечки рисуются корректно.