|
Вопрос # 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]:
Ну даже не знаю. В меня в одно время была подобная проблема - там была "конкурентная борьба" - данные грузились по сети и иногда не успевали. Решено было предельно просто. был заведён класс флажков. Каждый юнит время от времени выставлял/снимать. Также был глобальный таймер, который время от времени перебирал все флажки и запускал определённые процедуры. В результате хоть и подтормаживало немного, но работало как часики
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|