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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2015, 05:22   #1
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию Создание компонентов

Здравствуйте!
Не подскажите ли, как создать форму Primer: tPrimer? При выполнении constructor появляется ошибка:
1.jpg
Как устранить эту ошибку?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  tPrimer = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  end;

var
  Form1: TForm1;
  Primer: tPrimer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   Primer:=tPrimer.Create(Application);
   Primer.Show;
end;

{ tPrimer }

constructor tPrimer.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Caption:='OK';
  Parent:=Form1;
end;

end.
Еще одна особенность: если создавать другие компоненты (TButton, TLabel), то такой ошибки не возникает!
Код:
tPrimer = class(TButton)
tPrimer = class(TLabel)
Почему возникает ошибка при создании именно формы? Заранее спасибо!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 06.11.2015, 07:23   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Обрати внимание на {$R *.dfm}. У юнита формы есть pas и одноименный dfm - ресурс. Поэтому и нельзя так.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.11.2015, 07:25   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

И как мне форму создать с новыми свойствами, используя constructor?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 06.11.2015, 07:26   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В новом юните. Один юнит - одна форма. И в чем идея родителем формы другую форму назначать? Фреймы не подходят?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.11.2015 в 07:28.
Аватар вне форума Ответить с цитированием
Старый 06.11.2015, 07:29   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Без юнита никак?
Мне надо другой класс сделать. Мне нежелательно использовать: Form:=TForm.Create(Application);
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 06.11.2015, 07:31   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Наследовать от TForm1? Если правильно понял, то

В одном юните TForm1 = class(TForm)
в другом tPrimer = class(TForm1)

В одном юните никак, по крайней мере не слышал об таком
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.11.2015, 08:16   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Спасибо! Буду думать!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 06.11.2015, 09:07   #8
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

Код:
constructor tPrimer.Create(AOwner: TComponent);
begin
  inherited CreateNew(AOwner); // <-- заменить Create на CreateNew?
  Caption:='OK';
  Parent:=Form1;
end;
Filka вне форума Ответить с цитированием
Старый 06.11.2015, 09:14   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
inherited CreateNew(AOwner); // <-- заменить Create на CreateNew?
CreateNew ДА!!! НО !!! не вызывать ЭТО в конструкторе, а использовать ЭТОТ конструктор для создания объекта.

Код:
primer:=TForm.CreateNew();
primer:=TFormPrimer.CreateNew()
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.11.2015 в 09:16.
evg_m на форуме Ответить с цитированием
Старый 06.11.2015, 09:20   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Поэтому и нельзя так.
Как вариант: Попробовать описать тело формы до этой директивы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание компонентов Janger Общие вопросы Delphi 11 29.06.2015 16:19
Создание новых компонентов... ALKOrobot Общие вопросы C/C++ 5 04.01.2011 19:42
динамическое создание компонентов DOLBY Компоненты Delphi 10 17.10.2010 14:03
Создание собственных компонентов D7 postal2 Помощь студентам 4 21.08.2009 09:07