Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2012, 14:07   #1
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию Canvas does not allow drawing

Доброго времени суток.
Пишу компонент-наследник класса TComboBox и сталкиваюсь с ошибкой 'Canvas does not allow drawing' при выполнении процедуры Paint:
Код:
procedure TCustomStormbox.Paint;
var R,TextRect:TRect;
begin
inherited;
FCanvas.Lock;
  // Creating a checkbox rectangle
  R.Left:=0;
  R.Top:=0;
  R.Right:=20;
  R.Bottom:=20;
  // Create a text rectangle
  TextRect.Left:=R.Left+5;
  TextRect.Top:=R.Top+1;
  TextRect.Right:=TextRect.Left+FWidth;
  TextRect.Bottom:=TextRect.Top+FHeight;
  // Settings parametrs for checkbox filling and framing
  FCanvas.Brush.Style:=bsSolid;
  FCanvas.Brush.Color:=FColors.Background;
  FCanvas.Pen.Color:=FColors.Border;
  // Начало ошибки:
  FCanvas.FrameRect(R);
  FCanvas.FillRect(R);
  case Fstate of
    ssChecked: FCanvas.Draw(R.Left,R.Top,FGlyphs.Checked);
    ssGrayed: FCanvas.Draw(R.Left,R.Top,FGlyphs.Grayed);
  end;
  // Drawing a text
  FCanvas.Brush.Style:=bsClear;
  FCanvas.Font.Name:=FFont.Name;
  FCanvas.Font.Size:=FFont.Size;
  FCanvas.Font.Color:=FFont.Color;
  FCanvas.TextRect(TextRect,0,0,FCaption);
FCanvas.Unlock;
end;
С чем это может быть связано? Везде где ни читаю, там канвас элементарно все рисует. Вот, если нужно, создание самого компонента:
Код:
constructor TCustomStormbox.Create(AOwner:TComponent);
begin
FParent:=AOwner;
FCanvas:=TCanvas.Create;
FState:=ssNormal;
Paint;
Подскажите в чем же ошибка. Спасибо.
kettanaito вне форума Ответить с цитированием
Старый 12.01.2012, 01:34   #2
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Сколько не мучил - все одного и то же... Ребята, в чем же тут проблема? Может что-то где-то не объявлено...
kettanaito вне форума Ответить с цитированием
Старый 12.01.2012, 17:56   #3
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Владелец компонента на момент его создания не имеет Handle, не визуализирован и куча других причин. Убирайте в конструкторе Paint. И не надо в конструкторе присваивать Parent - Owner может и не быть TWinControl
ReportCube вне форума Ответить с цитированием
Старый 12.01.2012, 22:55   #4
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

ReportCube, так а когда мне описывать Paint? Если я хочу по сути аналогичный компонент, но перерисовать его по-своему? Не могу же я вызывать процедуру отрисовки вне модуля компонента.
kettanaito вне форума Ответить с цитированием
Старый 12.01.2012, 23:18   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так вам надо убрать в конструкторе вызов Paint, а не его вообще.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.01.2012, 23:54   #6
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Пепел Феникса, погодите, я в чем-то теряюсь:
Код:
type TCustomStormBox = class(TCheckbox);
procedure Paint; - перерисовываем басовый TCheckBox;
...
type TStormBox = class(TCustomStormBox);
И как правильно перерисовать элемент?
kettanaito вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертировать System::Drawing::Color: в integer или String narien Общие вопросы C/C++ 3 08.01.2012 21:39
как сгрупировать объекты Drawing zvladm Microsoft Office Excel 2 26.04.2010 09:25
Canvas guffer Обсуждение статей 1 21.08.2009 10:19
System.Drawing.dcuil KyzDmitry Компоненты Delphi 3 14.08.2009 17:08
Error: "Canvas does not allow drawing", Delphi7 VVM Общие вопросы Delphi 2 19.07.2009 16:38