Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
CrazyDron
3 / 3 / 1
Регистрация: 08.07.2015
Сообщений: 32
1

Несколько форм на юнит

11.07.2015, 20:03. Просмотров 1087. Ответов 7
Метки нет (Все метки)

Добрый день!

Можно ли создать несколько форм в одном unit'е?

Пробовал в unit'е делать так:
Delphi
1
2
3
4
5
6
TForm2 = class(TForm)
......
var Form2 : TForm2
......
  Form2 := TForm2.Create(Self);
  Form2.Show;
Жалуется на то, что у новой формы нет ресурсов. Исправляю в проекте строку "RequireDerivedFormResource := False".

На экране отображаются две формы - исходная и созданная. Присваивая properties новой форме я могу менять её вид. Однако созданные внутри неё компоненты не отображаются. Например, создавал на форме2 Label1 (Form2.Label1 := TLabel.Create (Form2) ), присваивал ему местоположение (Left, Top, Width, height), caption, размер и цвет шрифта, вызывал Form2.Label1.Show - всё равно форма пустая.

Каким образом можно увидеть контролы на форме, а в идеале, как-то задать ей ресурсы, чтобы отобразить форму в Инспекторе объектов и можно было накидывать контролы как на первую форму?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2015, 20:03
Ответы с готовыми решениями:

Связать несколько форм между собой
Здравствуйте.Подскажите пожалуйста как связать между собой несколько...

Как запустить одновременно несколько форм в Lazarus'e?
Добрый день,возник такой вопрос: как запустить несколько форм...

Как объединить в одном проекте несколько форм?
Мне необходимо увязать 3 формы между собой. У меня есть в проекте одна...

Несколько форм в Delphi
Есть форма с картинкой Image и кнопками (названия разделов). Как сделать...

Несколько форм
Есть форма с картинкой Image и кнопками (названия разделов). Как сделать...

7
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26477 / 17781 / 7034
Регистрация: 22.10.2011
Сообщений: 31,295
Записей в блоге: 6
11.07.2015, 21:42 2
Лучший ответ Сообщение было отмечено CrazyDron как решение

Решение

Цитата Сообщение от CrazyDron Посмотреть сообщение
Исправляю в проекте строку "RequireDerivedFormResource := False"
Зачем? Достаточно создать форму:
Pascal
1
Form2 := TForm2.CreateNew(Application); // через CreateNew
В общем,
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
  TForm2 = class(TForm)
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  Form2: TForm2;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var L : TLabel;
begin
  Form2 := TForm2.CreateNew(Application);
  Form2.Show;
 
  L := TLabel.Create(Form2);
  L.Caption:='test';
  Form2.InsertControl(L);
end;
 
end.
прекрасно создает новую форму с лейблом на ней...

А чтобы работать с формой через редактор - тебе в любом случае нужен отдельный Unit, ибо LFM хранит только одну форму, а не несколько.
1
CrazyDron
3 / 3 / 1
Регистрация: 08.07.2015
Сообщений: 32
11.07.2015, 21:57  [ТС] 3
Цитата Сообщение от volvo Посмотреть сообщение
А чтобы работать с формой через редактор - тебе в любом случае нужен отдельный Unit, ибо LFM хранит только одну форму, а не несколько.
Печально. На текущий проект мне нужно где-то 20 форм, с кучей контролов на них. Есть большой шанс потеряться во всём этом многообразии, особенно в позиционировании и z-выравнивании контролов.
Значит, будем по старинке плодить кучу процедур.

В справке CreateNew смотрел, но почему-то не попробовал.
А вот насчёт InsertControl'а не знал.

Спасибо.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26477 / 17781 / 7034
Регистрация: 22.10.2011
Сообщений: 31,295
Записей в блоге: 6
11.07.2015, 23:08 4
Цитата Сообщение от CrazyDron Посмотреть сообщение
На текущий проект мне нужно где-то 20 форм, с кучей контролов на них
Логики (в связи с темой топика) не вижу. Гораздо удобнее работать отдельными юнитами с 20-ю формами, чем все запихать в один модуль и потеряться сразу же.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26477 / 17781 / 7034
Регистрация: 22.10.2011
Сообщений: 31,295
Записей в блоге: 6
11.07.2015, 23:11 5
Цитата Сообщение от CrazyDron Посмотреть сообщение
В справке CreateNew смотрел, но почему-то не попробовал
Когда пытаешься создать форму через
Pascal
1
Form2 := TForm2.Create(Application);
, IDE подсказывает, что делать:
0
Миниатюры
Несколько форм на юнит  
CrazyDron
3 / 3 / 1
Регистрация: 08.07.2015
Сообщений: 32
11.07.2015, 23:57  [ТС] 6
Цитата Сообщение от volvo Посмотреть сообщение
Когда пытаешься создать форму через
Код PascalВыделить код
1
Form2 := TForm2.Create(Application);
, IDE подсказывает, что делать:
Поэтому и смотрел справку, но не дожал мысль

Цитата Сообщение от volvo Посмотреть сообщение
Логики (в связи с темой топика) не вижу. Гораздо удобнее работать отдельными юнитами с 20-ю формами, чем все запихать в один модуль и потеряться сразу же.
Не согласен. У меня юниты используют много процедур/переменных. Насоздавал в одном юните, потом пишу другой - в нём требуется половина переменных/функций из предыдущего. Начинается - объявление общими переменных и процедуры из одной строчки, посылающие в другой юнит. Плюс идёт код с прицелом на будущие формы, заглушек уже повставлял - не перечесть

Но это всё словоблудие. Каждый делает так, как ему проще. В данной ситуации мне было бы проще иметь один юнит со всеми процедурами/переменными, и несколько форм.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26477 / 17781 / 7034
Регистрация: 22.10.2011
Сообщений: 31,295
Записей в блоге: 6
12.07.2015, 12:06 7
Цитата Сообщение от CrazyDron Посмотреть сообщение
Насоздавал в одном юните, потом пишу другой - в нём требуется половина переменных/функций из предыдущего
Это неправильная архитектура приложения. Лазарус (как и любая другая среда и любой другой язык) предназначен для создания приложений с правильной архитектурой. Поэтому не надо искать в IDE того, чего там не должно быть (оправдываясь тем, что это, видите ли, удобно). Лучше взять и не клепать приложение на коленке (из-за кажущегося удобства и простоты такого решения), а сесть и продумать его архитектуру так, чтобы в одной форме не требовалась половина переменных из другой. В частности - все, что дублируется - выносится в отдельный модуль, и подключается к обеим формам.
0
CrazyDron
3 / 3 / 1
Регистрация: 08.07.2015
Сообщений: 32
12.07.2015, 13:26  [ТС] 8
Цитата Сообщение от volvo Посмотреть сообщение
Это неправильная архитектура приложения. Лазарус (как и любая другая среда и любой другой язык) предназначен для создания приложений с правильной архитектурой. Поэтому не надо искать в IDE того, чего там не должно быть (оправдываясь тем, что это, видите ли, удобно). Лучше взять и не клепать приложение на коленке (из-за кажущегося удобства и простоты такого решения), а сесть и продумать его архитектуру так, чтобы в одной форме не требовалась половина переменных из другой. В частности - все, что дублируется - выносится в отдельный модуль, и подключается к обеим формам.
Легко сказать... В общем-то, так и делаю. Код наполовину портируется, наполовину пишется заново.
0
12.07.2015, 13:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2015, 13:26

Несколько форм
Я знаю, что тема уже мусолилась много раз, но все же. Существует статический...

Ajax и несколько форм
Подскажите пожалуйста, делаю несколько форм, а точнее 4, но ajax обрабатывает...

Combobox и несколько форм
Подскажите, что не так в коде? Выдает ошибку Unit1.pas(34): Type of expression...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru