Canvas потомка

Juve
Дата: 14.11.2007 19:01:36
Всем привет!
Создал класс "А" от TImage, он методом "M" рисует на своей канве всякую муть. От него наследуется класс "В". Создаю экземаляр класса "B" и вызываю метод "М" - пусто. Если создать такой же метод в классе "В" или сделать override метода "М" - разумеется работает. (Рисую через self.canvas). Получается, что описанный в классе "А", self - есть указатель на объект класса "А", хотя изначально создавался класс "B". Да и self.className = "B".
1. Объясните, пожалуйста, почему так получается
2. Можно ли методом одного класса рисовать на канве потомков, и если да то как?
Сильно не ругайте только ))
Naf
Дата: 14.11.2007 19:05:29
Juve
Всем привет!
Создал класс "А" от TImage, он методом "M" рисует на своей канве всякую муть. От него наследуется класс "В". Создаю экземаляр класса "B" и вызываю метод "М" - пусто. Если создать такой же метод в классе "В" или сделать override метода "М" - разумеется работает. (Рисую через self.canvas). Получается, что описанный в классе "А", self - есть указатель на объект класса "А", хотя изначально создавался класс "B". Да и self.className = "B".
1. Объясните, пожалуйста, почему так получается
2. Можно ли методом одного класса рисовать на канве потомков, и если да то как?
Сильно не ругайте только ))


Боюсь, что А, Б и М не отделаться. Придется код показывать
Juve
Дата: 14.11.2007 19:16:51
Верхний класс (который "А") и метод "drawSelf"
 TEdVmtComponent = class (tImage)
  ...
  protected
     procedure drawSelf;
  end;

procedure drawSelf;
begin
  self.Canvas.Rectangle(0,0,self.Width,self.Height);
end;
Класс потомок (который "В")
 TEdVmtImageDs = class(TEdVmtComponent)
  ...
  end;
Форма - контейнер

 Tf_edVisualEditor = class(TForm)

procedure myProc;
begin
      vtImg:=TEdVmtImageDs.Create(self);
      vtImg.Parent:=self;
      vtImg.Left:=x;
      vtImg.Top:=y;
      vtImg.drawSelf;
end;
Naf
Дата: 14.11.2007 19:20:51
procedure drawSelf;
begin
  Canvas.Rectangle(0,0,self.Width,self.Height);
end;
может так писать без self
Naf
Дата: 14.11.2007 19:23:05
Случайно self не назван какой нибудь член класса?
Ivengo
Дата: 14.11.2007 19:30:33
Насчет protected уверены?
Naf
Дата: 14.11.2007 19:33:34
Ivengo
Насчет protected уверены?

точно, а я пропустил
alex0
Дата: 15.11.2007 10:21:01
Naf
procedure drawSelf;
begin
  Canvas.Rectangle(0,0,self.Width,self.Height);
end;
может так писать без self


тогда уж:
procedure drawSelf;
begin
  Canvas.Rectangle(0,0,Width,Height);
end;
Juve
Дата: 15.11.2007 10:32:09
Дык...а куда его? Пробовал в public, published...
Ega
Дата: 15.11.2007 10:43:59
в public