Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.09.2018, 11:45
aford aford вне форума
Прохожий
 
Регистрация: 14.03.2018
Сообщения: 12
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию Динамическое создание компонентов на модальной форме

Всем привет.
Не пойму в чем проблема, создаю модальную форму, на ней в onCreate должны динамически создаваться компоненты, но они создаются только если владельцем является панель. В чем может быть дело?

Тут все прекрасно работает
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  Memo: TMemo;
begin
  Memo:= TMemo.Create(Form1);
  Memo.Parent:= Form1;
end;

А тут нет
Код:
procedure TForm1.btn1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2:= TForm2.Create(Application);
  Form2.ShowModal;
end;

// unit2
procedure TForm2.FormCreate(Sender: TObject);
var
  Memo: TMemo;
begin
  Memo:= TMemo.Create(Form2);
  Memo.Parent:= Form2;
end;
Ответить с цитированием
  #2  
Старый 08.09.2018, 06:27
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,176
Версия Delphi: 7, XE3, 10.2
Репутация: 49086
По умолчанию

потому что в момент OnCreate переменная Form2 еще не инициализированна (ну или там указатель на другой экземпляр формы, если переменная переиспользуется). Надо использовать Self:
Код:
procedure TForm2.FormCreate(Sender: TObject);
var
  Memo : TMemo;
  Button : TButton;
begin
  Button := TButton.Create(Self);
  Button.Parent := Self;
  Button.ModalResult := mrOK;
  Button.Top := 8;
  Button.Left := 8;
  Button.Caption := 'OK';

  Memo := TMemo.Create(Self);
  Memo.Parent := Self;
  Memo.Top := Button.Top + Button.Height + 8;
  Memo.Left := 8;
  Memo.Lines.Text := 'Created in OnCreate';
end;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
aford (10.09.2018)
Ответ



Delphi 10.1 Berlin

Delphi 10.1 Berlin — самый быстрый способ создавать и обновлять интенсивно работающие с данными, распределенные и сильно взаимодействующие приложения с развитым и визуально привлекательным пользовательским интерфейсом для Windows 10, Mac, мобильных устройств, IoT и других платформ.


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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2018

ВКонтакте   Facebook   Twitter