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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2009, 19:15   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Не рисует наследуемый класс.

Помогите разобраться:
Код:
unit Unit2;

interface

uses
  ExtCtrls, Classes,Dialogs;

type
  TCap = class(TImage)
  private
    { Private declarations }
  public
    //конструктор
		constructor Create(AOwner: TComponent); override;
		//деструктор :)
		destructor  Destroy; override;
  end;


implementation

constructor TCap.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  left:=10;
  top:=10;
  width:=100;
  height:=20;
  Canvas.LineTo(10,50);
end;

destructor TCap.Destroy;
begin
  inherited;

end;

end.
2) Нужно ли писать
inherited Create(AOwner); или достаточно просто inherited?

3) Чувствую, там не хватает parent'a... Но не смог найти чему его присвоить из свойств AOwner =\

1)Из первого юнита создаю объект так:
Код:
var
  cap:TCaptcha;
begin
  cap:=TCaptcha.Create(self);
end;//это всё button1.click
Но ничего не происходит (Т.е. экземпляр создаётся, но не рисует Canvas.LineTo(10,50)
TwiX вне форума Ответить с цитированием
Старый 02.10.2009, 19:28   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
 TCap = class(TImage)
Код:
cap:TCaptcha;
???
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 02.10.2009, 21:07   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Ой) Это я когда сюда писал переправлял. Так тож не робит (В том смысле, что я по другому не пробовал)

Добавлено: Parent точно её не надо добавлять?
TwiX вне форума Ответить с цитированием
Старый 02.10.2009, 22:03   #4
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Parent конечно нужен, это же визуальный компонент:
Код:
constructor TCap.Create(AOwner: TComponent);
begin
  inherited;
  left:=10;
  top:=10;
  width:=100;
  height:=20;
  Canvas.LineTo(10,50);
  Parent := Form1; 
end;
Цитата:
inherited Create(AOwner); или достаточно просто inherited?
Можно просто inherited.
inherited Create(AOwner); так нужно если у предка несколько конструкторов, без этого компилятор не будет знать какой вызвать.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 02.10.2009, 22:26   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от Daramant Посмотреть сообщение
Parent конечно нужен, это же визуальный компонент:
Код:
constructor TCap.Create(AOwner: TComponent);
begin
  inherited;
  left:=10;
  top:=10;
  width:=100;
  height:=20;
  Canvas.LineTo(10,50);
  Parent := Form1; 
end;

Можно просто inherited.
inherited Create(AOwner); так нужно если у предка несколько конструкторов, без этого компилятор не будет знать какой вызвать.

А по AOwner можно получить родителя? ведь мы же передаём self - по сути form1. А что бы сделать Parent := Form1; , нужно подключать unit1.
TwiX вне форума Ответить с цитированием
Старый 02.10.2009, 23:29   #6
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Parent и Owner имеют различное назначение.
Parent - это объект-контейнер, который содержит данный объект.
Например Parent-ом может быть форма(TForm), панель(TPanel), группбокс(TGroupBox) и другие контейнеры.
Визуально - это тот объект, на котором будет расположен твой.

Owner - это объект-владелец, он отвечает за уничтожение твоего объекта, когда будет уничтожен сам. Owner можно не назначать, но тогда тебе придется самому уничтожать твой объект.

Теперь по коду:
Вынеси Parent в параметр конструктора и не будет проблем:
Код:
type
  TCap = class(TImage)
  private
    { Private declarations }
  public
    constructor Create(AOwner: TComponent; AParent: TWinControl);
    destructor  Destroy; override;
  end;
Код:
constructor TCap.Create(AOwner: TComponent; AParent: TWinControl);
begin
  inherited Create(AOwner);
  left:=10;
  top:=10;
  width:=100;
  height:=20;
  Canvas.LineTo(10,50);
  Parent := AParent;
end;

destructor TCap.Destroy;
begin
  inherited;

end;
Использование:
Код:
var
  c: TCap;
begin
  c := TCap.Create(Self, Self);
end;
Конечно Parent можно присвоить и так:
Код:
Parent := TWinControl(AOwner);
Но, думаю, мой вариант будет более гибок.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 03.10.2009, 01:08   #7
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Сделал так:
Код:
parent:=AOwner as TWinControl;
=)
TwiX вне форума Ответить с цитированием
Старый 03.10.2009, 11:59   #8
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Это эквивалентные формы:
Parent := TWinControl(AOwner);
Parent := AOwner as TWinControl;
Разница в том, что во втором случае дополнительно происходит проверка типов.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль не рисует! fire_on Паскаль, Turbo Pascal, PascalABC.NET 26 11.08.2009 18:20
Класс Юлёк Фриланс 6 15.06.2008 15:00
TListView; не рисует цветом TCanvas JetAPI Компоненты Delphi 9 24.08.2007 22:22