Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lazarus

Войти
Регистрация
Восстановить пароль
 
CrazyDron
3 / 3 / 1
Регистрация: 08.07.2015
Сообщений: 32
#1

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

11.07.2015, 20:03. Просмотров 948. Ответов 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):

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

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

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

Несколько форм в Delphi - Delphi
Есть форма с картинкой Image и кнопками (названия разделов). Как сделать следующее: чтобы при нажатии кнопок осуществлялся переход на...

Несколько форм - Delphi
Есть форма с картинкой Image и кнопками (названия разделов). Как сделать следующее: чтобы при нажатии кнопок осуществлялся переход на...

Opengl несколько форм - OpenGL
Всем доброго времени суток, появился небольшой вопрос, на форме 1 есть 2 кнопки, 1 кнопка переход на форму 2 на которой с помощью opengl...

7
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25537 / 17090 / 5417
Регистрация: 22.10.2011
Сообщений: 30,262
Записей в блоге: 7
11.07.2015, 21:42 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
25537 / 17090 / 5417
Регистрация: 22.10.2011
Сообщений: 30,262
Записей в блоге: 7
11.07.2015, 23:08 #4
Цитата Сообщение от CrazyDron Посмотреть сообщение
На текущий проект мне нужно где-то 20 форм, с кучей контролов на них
Логики (в связи с темой топика) не вижу. Гораздо удобнее работать отдельными юнитами с 20-ю формами, чем все запихать в один модуль и потеряться сразу же.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25537 / 17090 / 5417
Регистрация: 22.10.2011
Сообщений: 30,262
Записей в блоге: 7
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
25537 / 17090 / 5417
Регистрация: 22.10.2011
Сообщений: 30,262
Записей в блоге: 7
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 и несколько форм - jQuery
Подскажите пожалуйста, делаю несколько форм, а точнее 4, но ajax обрабатывает без проблем первую форму, а вторую и т.д не хочет, делаю по...

Oledbadapter на несколько форм - C#
Как работать с oleDb на нескольких формах? На одной форме у меня производится выбор таблиц через кнопки. На этой же форме 5 адаптеров под...

Несколько подчиненных форм - MS Access
Здравствуйте! Я совсем чайник, впервые делаю базу с несколькими подчиненными таблицами (точнее, есть главная таблица, подчиненная и 6...

Несколько форм в программе - Delphi
Здравствуйте! Есть программа с несколькими формами. При клике на кнопку формы одна форма скрывается, появляется следующая. При этом...


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

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

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