| 
| 
 | Вопрос # 657/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!У меня в Delphi6 появился какой-то глюк - при выполнении application.createForm(TForm1,Form1) сразу происходит вызов Show. В самой форме обработчие OnCreate не прописан.Форма не главная Должна показываться только при выборе соответствующего пункта меню в главной форме. А она появляется сразу при запуске программы вместе с главной формой. Что это может быть и как с ним бороться?
 
|  |   Вопрос задал: Мережников Андрей (статус: Абитуриент)Вопрос отправлен: 22 июня 2007, 15:45
 Состояние вопроса: открыт, ответов: 3.
 |  Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович Здравствуйте, Мережников Андрей!Такое поведение нормальное если форма - MDI Child. Боротся с ним можно только исключив форму из списка автосоздания в проекте (или просто выбросить строчку application.createForm(TForm1,Form1) из dpr-файла) и создавать форму в тот момент. когда она нужна.
 
|  | Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)Время отправки: 22 июня 2007, 18:22
 Оценка за ответ: 3
 Комментарий к оценке: Спасибо за ответ, но форма нормальная - не MDIChild |  Ответ #2. Отвечает эксперт: Вадим К Здравствуйте, Мережников Андрей!Если внимательно присмотритесь к свойствам формы, то увидите свойство Visible. Для главной формы оно безразлично, а вот для не главной - должо быть False. Поиграйтесь этим свойством.
 
 Но на будующее, я бы рекомендовал научиться создавать формы самостоятельно. две лишних строчки кода, но преимуществ - немеряно
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 22 июня 2007, 21:35
 Оценка за ответ: 2
 |  Ответ #3. Отвечает эксперт: min@y™ Если форма модальная, то создавай форму, например, так (см. приложение): Приложение:Переключить в обычный режим function RussianInputBox(const ACaption, ATitle: string;                         var AText: string): Boolean;begin  InputBoxForm:= TInputBoxForm.Create(Application);  with InputBoxForm do    begin      Caption:=            ACaption;      TitleLabel.Caption:= ATitle;      Edit.Text:=          AText;      OkButton.Enabled:=   AText <> '';       Result:= ShowModal <> mrCancel;       if Result        then AText:= Edit.Text;    end;end;   procedure ShowAbout;begin if not Assigned(AboutForm)  then AboutForm:=TAboutForm.Create(Application); AboutForm.ShowHint:=ProgramSettings.ShowHints; try  AboutForm.VersionLabel.Caption:='Âåðñèÿ
'+ProgVersion;  AboutForm.ShowModal; finally  FreeAndNil(AboutForm); end;end;
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 23 июня 2007, 10:02
 Оценка за ответ: 3
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 25 июня 2007, 16:22; участников в обсуждении: 2. 
|   | Мережников Андрей (статус: Абитуриент), 24 июня 2007, 17:54 [#1]:Спасибо за ответы. Вопрос не в том, чтобы форма не показывалась, а в том, чтобы метод Show вызывался когда ему положено,а не сразу при создании формы. В OnShow есть обращения к модулям данных, которые при создании формы еще не проинициализированы. Конечно можно создавать форму самой последней, но это не выход |  
|   | Вадим К (статус: Академик), 24 июня 2007, 18:10 [#2]:Надо логику софтины менять. Формы делаем на автосоздаваемыми, а создаём вручную.
 К тому же, что то у вас не так, так как OnShow срабатывает при появлении формы, а не при создании.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Мережников Андрей (статус: Абитуриент), 25 июня 2007, 16:08 [#3]:В вопросе я так и писал, что, что-то не так, как должно быть. С этим я и хочу разобраться. Желательно,чтобы поведение системы было предсказуемым. А форму из списка автосоззаваемых я убрал сразу после появления указанного глюка. И создаю ее вручную |  
|   | Вадим К (статус: Академик), 25 июня 2007, 16:22 [#4]:Ну даже не знаю. В меня в одно время была подобная проблема - там была "конкурентная борьба" - данные грузились по сети и иногда не успевали. Решено было предельно просто. был заведён класс флажков. Каждый юнит время от времени выставлял/снимать. Также был глобальный таймер, который время от времени перебирал все флажки и запускал определённые процедуры. В результате хоть и подтормаживало немного, но работало как часики Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |