Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
3-1167045552
tytus
2006-12-25 14:19
2007.03.18
10g Express edition & DOA 4.0.7 - проблема с коннектом


5-1149955795
Alextp
2006-06-10 20:09
2007.03.18
Мерцание при обработке Resize


15-1172050398
DVM
2007-02-21 12:33
2007.03.18
Вопрос знатокам FreeBSD


15-1171983055
Axis_of_Evil
2007-02-20 17:50
2007.03.18
о сканере


2-1172504174
Tru
2007-02-26 18:36
2007.03.18
написание математически функций в делфи