Форум: "Начинающим";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
ВнизApplication.CreateForm Найти похожие ветки
← →
Novichok_New © (2007-02-25 08:55) [0]В проекте у меня три формы. В проекте мне приходится работать с большим колличеством данных (я их храню в таблице на Form3). Но вот не задача: загружуется она третьей, а при загрузке все остальные форме заполняются из неё! И вторая проблема SaveToFile(таблицы на Form3) происходит при Form3.Close, а если мы её не открывали, то конечно и закрывать нечего и... при закрытии программы данные за сеанс работы пропадают! :-(
Поэтому я хотел задать два вопросика:
1. Как загрузить первой 3-ю форму, не отображая её?
2. Как выполнить то - что прописано в onClose формы №3 из Form2 или 1?
Пока у меня только идея:
Form3.Show;
Form3.Close;
:-)
← →
Leonid Troyanovsky © (2007-02-25 09:40) [1]
> Novichok_New © (25.02.07 08:55)
> В проекте у меня три формы. В проекте мне приходится работать
> с большим колличеством данных (я их храню в таблице на Form3).
> Но вот не задача: загружуется она третьей, а при загрузке
> все остальные форме заполняются из неё!
Вообще-то, проще сделать так:
Данные загружаются/подготавливаются при создании главной формы
(это первая созданная в проекте).
Ну, а изменения сохраняются в файл в OnCloseQuery главной формы.
Form3, которая, видимо, служит редактором для загружаемых данных,
создается/показывается по необходимости.
Тогда формы, нуждающиеся в данных получат вовремя, т.е. после
создания главной формы. Кстати, обращаться к ней очень просто:
Application.MainForm. Для этого возможно понадобится прописать
в разделе implementation uses MainFormUnit.
--
Regards, LVT.
← →
Novichok_New © (2007-02-25 10:44) [2]Вы всё говорите правильно, Leonid Troyanovsky!
Но решая таким образом вопрос, мы не добъёмся главного: не показывать при загрузке Form3!
Я пытался решить вопрос аналогично:begin
Application.Initialize;
Application.CreateForm(TForm3, Form3); //получаем Form3.Show-!!!!
Application.CreateForm(TFormMain, FormMain);
Application.Run;
end.
И я думаю, что просто не верно пишу:procedure TFormMain.BitBtn1Click(Sender: TObject);
begin
Form3.FormClose; //правда она не открыта :-)
end;
Неужели такое не возможно?!
← →
Leonid Troyanovsky © (2007-02-25 11:12) [3]
> Novichok_New © (25.02.07 10:44) [2]
> Но решая таким образом вопрос, мы не добъёмся главного:
> не показывать при загрузке Form3!
Отнюдь, проблема, как раз, решается кардинально.
Form3 будет показываться только тогда, когда это нужно.
Например, убрав ее из списка автосоздаваемых в нужный
момент делаем:
with TForm3.Create(nil) do
try
ShowModal;
finally
Free;
end;
Другой вопрос - как Form3 будет редактировать данные,
которые храняться, скажем, в Form1 - в главной форме.
Это тоже довольно просто - просто надо использовать не,
скажем, TStringGrid, а TDrawGrid.
> Application.CreateForm(TForm3, Form3); //получаем Form3.
> Show-!!!!
Получаем, что главной формой будет Form3.
--
Regards, LVT.
← →
Novichok_New © (2007-02-25 11:26) [4]А если так "извратиться":
Запускаем программу:begin
Application.Initialize;
Application.CreateForm(TFormMain, FormMain);
Application.Run;
end.
Затем в onCreate - FormMain:begin
Application.CreateForm(TForm3, Form3);
Form3.Hide;
... //загружаем данные из Form3 в FormMain!
end;
По идее, и загружать должно нормально и при FormMain.Close -> получим Form3.Close!!!
← →
Leonid Troyanovsky © (2007-02-25 11:45) [5]
> Novichok_New © (25.02.07 11:26) [4]
> А если так "извратиться":
А зачем извращаться, если можно нормально сделать.
Зачем, например, всегда создавать форму, если она
может и не понадобится в течении жизни приложения?
Форма - это не контейнер для хранения данных (см. также TDateModule),
а средство для взаимодействия с юзером.
Так что нормальным будет, например, хранение данных в
свойствах MainForm, а показ их - по необходимости,
при посредстве Form3.
> По идее, и загружать должно нормально и при FormMain.Close
> -> получим Form3.Close!!!
Если только в OnClose MainForm будет оный вызов.
--
Regards, LVT.
← →
Novichok_New © (2007-02-25 12:50) [6]Leonid Troyanovsky, спасибо Вам за все комментарии и помощь!
← →
GrayFace © (2007-02-25 21:10) [7]Еще лучше использовать OnCloseQuerry вместо OnClose, т.к. при завершении работы/сеанса OnClose не вызывается. А OnClose использовать только для изменения параметра CloseAction при необходимости.
Leonid Troyanovsky © (25.02.07 11:45) [5]
Если только в OnClose MainForm будет оный вызов.
Почему же?
← →
Leonid Troyanovsky © (2007-02-25 23:32) [8]
> GrayFace © (25.02.07 21:10) [7]
> Почему же?
В чем, собс-но, сомнение?
--
Regards, LVT.
← →
SlymRO (2007-02-26 10:56) [9]Вместо form3 datamodule использовать не пробовали?
← →
Desdechado © (2007-02-26 12:10) [10]Form3.Visible:=False в дизайнере
← →
GrayFace © (2007-02-27 09:09) [11]Leonid Troyanovsky © (25.02.07 23:32) [8]
В чем, собс-но, сомнение?
Нет, уже нет сомнений. Действительно, сам по себе Form2.OnClose при закрытии MainForm не отрабатывает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c