Как правильно обратиться к другой форме?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Как правильно обратиться к другой форме?

Сообщение GAMER »

Есть Form1 и Form2.
В первой форме идет вызов
Application.CreateForm(TForm2,Form2);

Вызываю (создаю) 2 экземпляра Form2.

Как правильно обратиться к свойствам первого экземпляра Form2 и второго экземпляра Form2?
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

переделать процедуру создания так, чтобы созданные формы создавались не в Form2 а в ваши переменные через которые к формам вдальнейшем будет обращение
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Э-э-э, не понимаю. Можно примерчик простой?
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

грубо говоря

Код: Выделить всё

var
  Form2a,Form2b:TForm2
...
Application.CreateForm(TForm2,Form2a);
Application.CreateForm(TForm2,Form2b);
...
Form2a.doSomething;
Form2b.doSomething;
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Спасибо за подсказку, так и понял. Но что-то коряво закрытие форм работает. Разбираюсь.
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

А разве не правильнее:

Код: Выделить всё

var
  Form2a,Form2b:TForm2
...

Form2a:=TForm2.Create(Self);
Form2b:=TForm2.Create(Self);



Ну по крайней мере я так практиковал.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Application.CreateForm(TForm2,Form2a);
Form2a:=TForm2.Create(Self);
Считаются идентичными. Как-то обсуждалось на данном форуме, вроде.

Меня смущает одна проблемка, пока не готов ее описать, так как не знаю, я туплю или баг таки.

Добавлено спустя 16 минут 47 секунд:
Проблемка следующая.
Создаю дочерные формы:
Application.CreateForm(TFrmFoto,FrmFoto1);
Application.CreateForm(TFrmFoto,FrmFoto2);
В дочерной форме есть такое:

Код: Выделить всё

 public
    { public declarations }
    Stip: AnsiString;         

В основной форме вызываю: FrmFoto1.Stip:='1'; и FrmFoto2.Stip:='27';
При этом, когда делаю FrmFoto1.Close; то при деббагинге вижу значение Stip='27';
Почему?
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

емнип разница в том что первая форма созданная через Application.CreateForm будет главной и при закрытии ее закроется приложение, простой конструктор не устанавливает главную форму. Также раньше нельзя было создать CreateForm не наформошлепаную форму (без ресурсов), сейчас это регулируется через переменную RequireDerivedFormResource

Добавлено спустя 4 минуты 23 секунды:
>>Почему?
Телепаты в отпуске, сделай минимальный пример, по пути наверно сам разберешся))
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Да, стоит написать пример с нуля, возможно где-то в коде что-то не так.

PS. По ходу у меня бага где-то. Тестовый пример отработал правильно.

Добавлено спустя 25 минут 36 секунд:
Нашел багу у себя. Как всегда, не там где думал изначально :) Спасибо за подсказки.
Ответить