Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.02.2014, 13:17
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию Форма и непутевый программист или Как приручить непутевую форму?

Ломаю голову над этой казалось бы простой задачей уже несколько дней, но видно мне самому понять это не суждено. Суть проблемы. Есть проект в котором имеется 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  
Старый 16.02.2014, 15:33
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Всё же предложу Form6.Visible:=false, в инспекторе, как у всех остальных кроме главной, проверьте. Или попробуйте удалить на время эту форму из списка (Project > Remove from project...) случайно другая форма не начнёт вести себя так же?
Ответить с цитированием
  #3  
Старый 16.02.2014, 16:05
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

у Form6 выключи (False) Visible в инспекторе объектов.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 16.02.2014, 16:20
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Form6.Visible := false в инспекторе безусловно помогает, но потом в run time я не могу ее заставить появиться(не открывается). Да и что то мне подсказывает это не выход, ибо так не должно быть. Удалить только попробовал, итог - другой формы не вылетает.
Ответить с цитированием
  #5  
Старый 16.02.2014, 16:24
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Форма открывается, вероятно её просто не видно, попробуйте Form6.Visible := true для показа
Ответить с цитированием
  #6  
Старый 16.02.2014, 16:28
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Alegun
Форма открывается, вероятно её просто не видно, попробуйте Form6.Visible := true для показа

Код:
Form6.Show;
Form6.ShowModal;
Form6.Visible:=true;

А так же

Код:
  Form6.free;
  Form6 := tForm6.create(application);

И все это в разных вариация не приносит результата.
Ответить с цитированием
  #7  
Старый 16.02.2014, 16:29
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Толи лыжи не едут, то я ...
Ответить с цитированием
  #8  
Старый 16.02.2014, 16:31
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вы эту форму создаёте статически при запуске сборки, и Form6.free здесь не требуется, достаточно Close;
Ответить с цитированием
  #9  
Старый 16.02.2014, 16:41
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Создавая форму динамически( изключая ее из AutoCreate )
Код:
Form6 := tForm6.create(application);
Она ведь не должна сразу появляться?
На пример в событие OnCreate form19(это последняя форма которая загружается) к примеру код
Код:
Form6:= tForm6.create(application);
Приводит к открытию формы 6.
А берем любую другую форму и все ок.
Ответить с цитированием
  #10  
Старый 16.02.2014, 16:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Visible == false это значение по умолчанию. формы с true сразу появляются на экране.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #11  
Старый 17.02.2014, 09:38
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

рекомендую создавать и разрушать формы по мере их необходимости - сделать следующее:
1. убрать все формы (кроме главной) из автосоздаваемых: Project --> Options --> Forms --> переместить все, кроме главной (и модулей) в Available Forms
2. при надобности создавать нужную форму:
Код:
if (not Assigned(form2)) then form2:=Tform2.Create(Self);
form2.show; {или form2.showModal;}
3. в обработчике события OnClose формы добавить:
Код:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
  form2:=nil;
end;
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter