вопрос по созданию формы

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

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

вопрос по созданию формы

Сообщение NewUser » 25.06.2007 12:03:53

нужно из формы А создать форму Б, причем необходимо, чтобы одновременно можно было работать с двумя формами.

сейчас делаю так: по нажатии на кнопку
Код: Выделить всё
{создаем форму}
SForm:=TSForm.Create(self);
{показываем форму}
SForm.ShowModal;


при этом из вновь созданной формы SForm нельзя обратиться к форме MForm из которой был вызов на ее создание
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Re: вопрос по созданию формы

Сообщение oco » 25.06.2007 12:34:11

NewUser писал(а):нужно из формы А создать форму Б, причем необходимо, чтобы одновременно можно было работать с двумя формами.


Делай
Код: Выделить всё
SForm.Show;


NewUser писал(а):при этом из вновь созданной формы SForm нельзя обратиться к форме MForm из которой был вызов на ее создание


В юните, где находится SForm, после implementation сделай:
Код: Выделить всё
uses юнит_с_формой_А
oco
незнакомец
 
Сообщения: 8
Зарегистрирован: 20.01.2007 15:05:56
Откуда: Хмельницкий

Сообщение shade » 25.06.2007 13:04:40

Ну смотря что ты хочешь сделать...

Например, я в диалоговых окнах часто делаю так:
Код: Выделить всё
TSFrom = class (TForm)
...
public
function Execute(<аргументы выходные-выходные>): <код возврата, иногда Boolean>;
...

function TSFrom.Execute(<аргументы>): <код возврата>;
begin
  <инициализация формы - заполнение полей>
  if ShowModal = mrOk then <что-то делаем>
  else <делаем что-то другое>
  <еще что-нибудь можно сделать, например Free если тебе форма нужна только на время вызова>
end;


Можно даже сделать что-то типа этого:
Код: Выделить всё
TSFrom = class (TForm)
...
public
{!} class function Execute(<аргументы выходные-выходные>): <код возврата, иногда Boolean>;
...

class function TSFrom.Execute(<аргументы>): <код возврата>;
var Form: TForm1;
begin
  // воздаем форму
  Form := TForm1.Create;
  try
    // инициализируем форму
    From.Init(<аргументы>);
    // показываем форму
    Form.ShowModal;
    // завершаем работу, сохраняем если надо данные, возвращаем результаты
    Result := From.Finish(<аргументы>);
  finally
    // удаляем форму за не надобностью
    Form.Free;
  end;
end;


В качестве аргументов можно передавать что угодно, в том числе и другую форму, но не думаю что в этом есть необходимость, передавай только те данные которые реально нужны. Если хочешь передать одной форме другую, то возможно прийдется использовать циклическую зависимость юнитов (юнит А использует юнит Б, и юнит Б использует юнит А), что само по себе очень плохо и чревато ошибками и путаницей - отношение мастер - подчинённый значительно проще
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение shade » 25.06.2007 13:12:15

А ну и вызов формы, как-то я про него забыл
Код: Выделить всё
if TSFrom.Execute(<аргументы>) then ...
else ...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение NewUser » 26.06.2007 11:12:29

спасибо
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

Рейтинг@Mail.ru