Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Application.CreateForm [D7]


Novichok_New ©   (2007-02-25 08:55:00) 

В проекте у меня три формы. В проекте мне приходится работать с большим колличеством данных (я их храню в таблице на Form3). Но вот не задача: загружуется она третьей, а при загрузке все остальные форме заполняются из неё! И вторая проблема SaveToFile(таблицы на Form3) происходит при Form3.Close, а если мы её не открывали, то конечно и закрывать нечего и... при закрытии программы данные за сеанс работы пропадают! :-(
Поэтому я хотел задать два вопросика:
1. Как загрузить первой 3-ю форму, не отображая её?
2. Как выполнить то - что прописано в onClose формы №3 из Form2 или 1?
Пока у меня только идея:
Form3.Show;
Form3.Close;
:-)


GrayFace   (2007-02-27 09:09:00) [1]

Leonid Troyanovsky ©   (25.02.07 23:32) [8]
В чем, собс-но, сомнение?

Нет, уже нет сомнений. Действительно, сам по себе Form2.OnClose при закрытии MainForm не отрабатывает.


Desdechado   (2007-02-26 12:10:00) [2]

Form3.Visible:=False в дизайнере


SlymRO   (2007-02-26 10:56:00) [3]

Вместо form3 datamodule использовать не пробовали?


Leonid Troyanovsky   (2007-02-25 23:32:00) [4]


> GrayFace ©   (25.02.07 21:10) [7]

> Почему же?

В чем, собс-но, сомнение?

--
Regards, LVT.


GrayFace   (2007-02-25 21:10:00) [5]

Еще лучше использовать OnCloseQuerry вместо OnClose, т.к. при завершении работы/сеанса OnClose не вызывается. А OnClose использовать только для изменения параметра CloseAction при необходимости.

Leonid Troyanovsky ©   (25.02.07 11:45) [5]
Если только в OnClose MainForm будет оный вызов.

Почему же?


Novichok_New   (2007-02-25 12:50:00) [6]

Leonid Troyanovsky, спасибо Вам за все комментарии и помощь!


Leonid Troyanovsky   (2007-02-25 11:45:00) [7]


> Novichok_New ©   (25.02.07 11:26) [4]

> А если так "извратиться":

А зачем извращаться, если можно нормально сделать.
Зачем, например, всегда создавать форму, если она
может и не понадобится в течении жизни приложения?

Форма - это не контейнер для хранения данных (см. также TDateModule),
а средство для взаимодействия с юзером.

Так что нормальным будет, например, хранение данных в
свойствах MainForm, а показ их - по необходимости,
при посредстве Form3.


> По идее, и загружать должно нормально и при FormMain.Close
> -> получим Form3.Close!!!

Если только в OnClose MainForm будет оный вызов.

--
Regards, LVT.


Novichok_New   (2007-02-25 11:26:00) [8]

А если так "извратиться":
Запускаем программу:
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:12:00) [9]


> 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 10:44:00) [10]

Вы всё говорите правильно, 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 09:40:00) [11]


> Novichok_New ©   (25.02.07 08:55)  

> В проекте у меня три формы. В проекте мне приходится работать
> с большим колличеством данных (я их храню в таблице на Form3).
>  Но вот не задача: загружуется она третьей, а при загрузке
> все остальные форме заполняются из неё!


Вообще-то, проще сделать так:
Данные загружаются/подготавливаются при создании главной формы
(это первая созданная в проекте).
Ну, а изменения сохраняются в файл в OnCloseQuery главной формы.

Form3, которая, видимо, служит редактором для загружаемых данных,
создается/показывается по необходимости.

Тогда формы, нуждающиеся в данных получат вовремя, т.е. после
создания главной формы. Кстати, обращаться к ней очень просто:
Application.MainForm. Для этого возможно понадобится прописать
в разделе implementation uses MainFormUnit.

--
Regards, LVT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо