Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отрисовка наследника TWinControl

302
06 января 2005 года
Sagittarius
648 / / 12.04.2003
Проблема вот в чем.
Я кидаю на ScrollBox свои компоненты, которые являются наследниками от TWinControl, и, соответственно, сами себя рисуют по событию WMPaint.
Все риуется нормально. Но когда поскролишь немного ScrollBox, то компоненты перестают отрисовываться, пока их не заставишь принудительно. С родными компонентами, например, TEdit такого не возникает.
Как заставить наследников корректно отрисовываться всегда?
10
06 января 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Sagittarius
Проблема вот в чем.
Я кидаю на ScrollBox свои компоненты, которые являются наследниками от TWinControl, и, соответственно, сами себя рисуют по событию WMPaint.
Все риуется нормально.


Вроде как оконные компоненты, отрисовывающие себя сами, должны наследоваться от TCustomControl. Но это так, к слову.

А вообще, по поведению похоже на банальную утечку ресурсов GDI.

302
10 января 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by smartsoft

Вроде как оконные компоненты, отрисовывающие себя сами, должны наследоваться от TCustomControl. Но это так, к слову.

А вообще, по поведению похоже на банальную утечку ресурсов GDI.


Не думаю, что утечка емеет место быть. Вот пример.

Код:
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;
302
10 января 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by smartsoft
Вроде как оконные компоненты, отрисовывающие себя сами, должны наследоваться от TCustomControl.


Добавляю еще одно важное условие, которое я упустил из виду. :(
На TScrollBox лежит еще один компонент, конечно же, мой :) Это наследник от TPanel, и уже на него кидаются другие компоненты.
Наследник от TPanel рисует на себе сетку, как в Delphi (точечки с определенным шагом). Так вот эти точечки рисуются корректно.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог