Конференция "Компоненты" » Не создается наследник [D7, WinXP]
 
  • zorik © (25.01.07 09:38) [0]

     TLabelClass = class of TLabel;

     TLabelRed = class(TLabel)
     public
       constructor Create(AOwner: TComponent); override;
       destructor Destroy; override;
     end;

    constructor TLabelRed.Create(AOwner: TComponent);
    begin
     inherited Create(AOwner);
     Font.Color := clRed;
    end;

    destructor TLabelRed.Destroy;
    begin
     inherited Destroy;
    end;



    Вариант вызова 1
    ...
    var
     r: TlabelRed;
    begin
     r := TlabelRed.Create(Form1);
    ...


    Здесь все нормально, попадаем в конструктор TLabelRed.Create (метка красная)

    Вариант вызова 2

    Процедура вызова:
    procedure DrawLabel(lb: TLabel; lbclass: TLabelClass);
    begin
     lb := TLabelClass.Create(Form1);
    end;

    Сам вызов:
    var
     lb: TLabelRed;
    begin
     DrawLabel(lb, TlabelRed);
    ...


    А здесь не попадаем в конструктор TLabelRed.Create (метка красная)
  • zorik © (25.01.07 09:44) [1]
    Опечатка: Во втором случае метка черная
  • vlad-mal © (25.01.07 09:50) [2]
    Нужно :
     lb := lbclass.Create(Form1);


    а не:

     lb := TLabelClass.Create(Form1);

  • zorik © (25.01.07 10:09) [3]
    Я уже сам увидел, но это не удачный пример. Реально было сложнеее, но справился. Пишу свой компонент и несколько наследников от него. Потом нужно вызывать конструкторы их создания. Компилятор выдавал ошибку что не может перегрузить статический метод. Объявил в базовом классе конструктор Create как виртуальный и все получилось

    TTeoTable = class
    ...
    public
     constructor Create; virtual;
    ...
    end;

    TNASTable = class
    ...
    public
     constructor Create; override; (раньше здесь не было override поэтому не создавался наследник)
    ...
    end;

    Всем спасибо. Тема закрыта

 
Конференция "Компоненты" » Не создается наследник [D7, WinXP]
Есть новые Нет новых   [119193   +118][b:0][p:0.001]