|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Форма и непутевый программист или Как приручить непутевую форму?
Ломаю голову над этой казалось бы простой задачей уже несколько дней, но видно мне самому понять это не суждено. Суть проблемы. Есть проект в котором имеется n - количество форм(не суть). И одна из них(не главная) всегда открывается при старте программы! Прекрасно понимаю что сам где-то накосячил . Только не могу понять где. Что я сделал: Project - Options - MainForm Стоит загрузочная форма все правильно и все формы AutoCreate.
Вот собственно и код проекта: Код:
program Project1; uses Vcl.Forms, Windows, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, Unit3 in 'Unit3.pas' {Form3}, Unit4 in 'Unit4.pas' {Form4}, Unit5 in 'Unit5.pas' {Form5}, Unit6 in 'Unit6.pas' {Form6}, Unit7 in 'Unit7.pas' {Form7}, Unit8 in 'Unit8.pas' {Form8}, Unit9 in 'Unit9.pas' {Form9}, Unit10 in 'Unit10.pas' {Form10}, Unit11 in 'Unit11.pas' {Form11}, Unit12 in 'Unit12.pas' {Form12}, Unit13 in 'Unit13.pas' {Form13}, Unit14 in 'Unit14.pas' {Form14}, Unit16 in 'Unit16.pas' {Form16}, Unit17 in 'Unit17.pas' {Form17}, Unit18 in 'Unit18.pas' {LoadForm}, Unit19 in 'Unit19.pas' {Form19}; {$R *.res} var HM: THandle; function Check: boolean; begin HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex'); Result := (HM <> 0); if HM = 0 then HM := CreateMutex(nil, false, 'MyOwnMutex'); end; begin if Check then Exit; Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TLoadForm, LoadForm); Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm4, Form4); Application.CreateForm(TForm5, Form5); Application.CreateForm(TForm6, Form6); Application.CreateForm(TForm7, Form7); Application.CreateForm(TForm8, Form8); Application.CreateForm(TForm9, Form9); Application.CreateForm(TForm10, Form10); Application.CreateForm(TForm11, Form11); Application.CreateForm(TForm12, Form12); Application.CreateForm(TForm13, Form13); Application.CreateForm(TForm14, Form14); Application.CreateForm(TForm16, Form16); Application.CreateForm(TForm17, Form17); Application.CreateForm(TForm19, Form19); Application.Run; end. Открывается постоянно Form6. Такие мысли что где-то спряталось что-то типа Form6.Show были, проверил все несколько раз - безрезультатно. Пробовал закоментировать все формы кроме Form6 и LoadForm не помогло. А самое интересное, по моему мнению, что если закрыть Form6 больше ее открыть не получается. Заранее спасибо за помощь! PS Form6.Visible:=false не предлагать. |
#2
|
||||
|
||||
Всё же предложу Form6.Visible:=false, в инспекторе, как у всех остальных кроме главной, проверьте. Или попробуйте удалить на время эту форму из списка (Project > Remove from project...) случайно другая форма не начнёт вести себя так же?
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
||||
|
||||
у Form6 выключи (False) Visible в инспекторе объектов.
Пишу программы за еду. __________________ |
#4
|
|||
|
|||
Form6.Visible := false в инспекторе безусловно помогает, но потом в run time я не могу ее заставить появиться(не открывается). Да и что то мне подсказывает это не выход, ибо так не должно быть. Удалить только попробовал, итог - другой формы не вылетает.
|
#5
|
||||
|
||||
Форма открывается, вероятно её просто не видно, попробуйте Form6.Visible := true для показа
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
|||
|
|||
Цитата:
Код:
Form6.Show; Form6.ShowModal; Form6.Visible:=true; А так же Код:
Form6.free; Form6 := tForm6.create(application); И все это в разных вариация не приносит результата. |
#7
|
|||
|
|||
Толи лыжи не едут, то я ...
|
#8
|
||||
|
||||
Вы эту форму создаёте статически при запуске сборки, и Form6.free здесь не требуется, достаточно Close;
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#9
|
|||
|
|||
Создавая форму динамически( изключая ее из AutoCreate )
Код:
Form6 := tForm6.create(application); На пример в событие OnCreate form19(это последняя форма которая загружается) к примеру код Код:
Form6:= tForm6.create(application); А берем любую другую форму и все ок. |
#10
|
||||
|
||||
Visible == false это значение по умолчанию. формы с true сразу появляются на экране.
Пишу программы за еду. __________________ |
#11
|
||||
|
||||
рекомендую создавать и разрушать формы по мере их необходимости - сделать следующее:
1. убрать все формы (кроме главной) из автосоздаваемых: Project --> Options --> Forms --> переместить все, кроме главной (и модулей) в Available Forms 2. при надобности создавать нужную форму: Код:
if (not Assigned(form2)) then form2:=Tform2.Create(Self); form2.show; {или form2.showModal;} Код:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; form2:=nil; end; Я за здоровый экстрим! Спасибо за "спасибо") |