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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 00:44   #1
pinguinjkeke
Новичок
Джуниор
 
Регистрация: 14.03.2012
Сообщений: 2
Смущение Класс-родитель и несколько предков

У меня существует класс родитель TFurniture. Он имеет несколько классов-наследников, в частности TPicture.
Все классы-наследники, конечно-же имеют общие черты, поэтому используют один и тот же конструктор, но разную процедуру прорисовки, которая объявлена в родителе как виртуальная.
Obj - это массив создаваемых объектов, типом данных которого является TFurniture.
Задавая значение SpinEdit'ах формы меняются параметры и объекты на PaintBox перерисовываются. Также должно быть и с SetPic.

Вопрос - как задать параметр SetPic по действию Button1?

Не вариант, если SetPic будет принадлежать TFurniture(родителю), что является нерациональным, т.к. параметр картинки свойственен только для TPicture. Этот параметр не должен относиться к TTable и TStand.

Код находится здесь. Не поместился в форум. http://pastebin.com/eNDz7jNL

Короче, у меня проблема родителей и детей
pinguinjkeke вне форума Ответить с цитированием
Старый 14.03.2012, 01:05   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Также должно быть и с SetPic.
В коде TPicture, нет ни намека на использование FPic.
Подозреваю,что канва, принадлежащая базовому классу - не обновляется.

Далее класс TPicture является стандартным классом Delphi, и живет в:
Цитата:
Vcl.Graphics,
И вместо вашего класса оно берет базовый класс среды. Хотя должно выносить мозг по этому поводу.
Человек_Борща вне форума Ответить с цитированием
Старый 14.03.2012, 01:14   #3
pinguinjkeke
Новичок
Джуниор
 
Регистрация: 14.03.2012
Сообщений: 2
По умолчанию

Спасибо за быстрый ответ.
А зачем обновлять канву?
TPicture переименовал в TPic.
Пока рано использовать FPic, я считаю. Я пока не представляю как просто реализовать доступ к property pic
http://pastebin.com/wQw9W8xF
pinguinjkeke вне форума Ответить с цитированием
Старый 14.03.2012, 02:41   #4
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Как-то так:
Код:
var
Obj: Array[0..2] of TFurniture;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  tmpPic: TPic absolute Obj[0];   // Вариант 1
begin
  Obj[0] := TPic.Create(какие-то параметры);
  if not (Obj[0] is TPic) then
    Exit;

  tmpPic.Pic := MyPic;   // Вариант 1

  TPic(Obj[0]).Pic := MyPic;   // Вариант 2

  (Obj[0] as TPic).Pic  := MyPic;   // Вариант 3
end;
И еще - уберите вызов метода Draw() из конструктора, не для таких целей предназначен последний. Лучше открытым этот метод сделать и непосредственно вызывать откуда нужно.
А вобще унаследуйся лучше от класса TGraphicControl - там тебе и канва уже есть и метод Paint() виртуальный...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Родитель окна - чужое окно. Johnson Общие вопросы Delphi 0 15.08.2011 20:52
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Родитель-потомок Владимир Чернов Общие вопросы Delphi 0 07.12.2010 12:48
Родитель-потомок Владимир Чернов Помощь студентам 0 01.12.2010 15:53
Delphi. Создание нового класса, его "предков". Krechet Помощь студентам 0 26.04.2009 15:52