Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 657

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
У меня в 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™

Если форма модальная, то создавай форму, например, так (см. приложение):

Приложение:
  1. function RussianInputBox(const ACaption, ATitle: string;
  2. var AText: string): Boolean;
  3. begin
  4. InputBoxForm:= TInputBoxForm.Create(Application);
  5. with InputBoxForm do
  6. begin
  7. Caption:= ACaption;
  8. TitleLabel.Caption:= ATitle;
  9. Edit.Text:= AText;
  10. OkButton.Enabled:= AText <> '';
  11.  
  12. Result:= ShowModal <> mrCancel;
  13.  
  14. if Result
  15. then AText:= Edit.Text;
  16. end;
  17. end;
  18.  
  19.  
  20.  
  21. procedure ShowAbout;
  22. begin
  23. if not Assigned(AboutForm)
  24. then AboutForm:=TAboutForm.Create(Application);
  25. AboutForm.ShowHint:=ProgramSettings.ShowHints;
  26. try
  27. AboutForm.VersionLabel.Caption:='&#194;&#229;&#240;&#241;&#232;&#255; '+ProgVersion;
  28. AboutForm.ShowModal;
  29. finally
  30. FreeAndNil(AboutForm);
  31. end;
  32. 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]:

Ну даже не знаю. В меня в одно время была подобная проблема - там была "конкурентная борьба" - данные грузились по сети и иногда не успевали. Решено было предельно просто. был заведён класс флажков. Каждый юнит время от времени выставлял/снимать. Также был глобальный таймер, который время от времени перебирал все флажки и запускал определённые процедуры. В результате хоть и подтормаживало немного, но работало как часики
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:31
Выполнено за 0.02 сек.