Из разряда «Век живи - век учись»

Сколько лет я программирую на Дельфе — фиг его знает. Лет семь точно. Уж основы какие-никакие за семь лет изучить было можно.

Пишу клиент к базе данных. Ну это не суть важно, главное то, что клиент — MDI-форма, в которой каждая таблица выводится в отдельной форме. При входе в клиент должен выдаваться запрос логин/пароль — сделал отдельной модальной формой, вызываю её в OnShow главного окна. Всё прекрасно работает.

И вот, нечаянно тыкаю мышкой не туда, и переключаю свойство FormStyle у главной формы из fsMDIForm в fsMDIChild. При запуске, ессно, прога ругается, я исправляю ошибку и... И начинается странное — сразу после события OnCreate главной формы начинает выполняться OnShow. При вызове формы ввода логина/пароля — аксес виолейшен, что в высшей степени логично, потому как форма эта ещё не откриэйтилась. Т.е. раньше происходила следующая последовательность событий — MainForm.Create -> LoginForm.Create -> MainForm.Show -> LoginForm.Show. А тут, почему-то последовательность изменилась.
Меня потихоньку начинает колбасить. Выгружаю дельфю, удаляю все dcu — тот же глюк. Гм, неужто в памяти какой кусок кода висит? Вряд ли — но комп ребутаю. Не помогает.
Делаю новый проект, пишу в нём тот же самый код — работает. Возвращаюсь в базу данных — не работает. Проблема даже не в том, что эту ошибку нельзя исправить — ничего не стоит сделать динамическое создание формы, но хочется разобраться...
Беру, и в ТоталКоммандере начинаю построчно сравнивать DFM-файлы работающего и глючащего приложения. Отличия — только в координатах, позиции по умолчанию и... у глючащей формы visible выставлено в True.

Меняю на False и начинает работать. Оказывается, случайное изменение FormStyle выставило Visible в True, что, в свою очередь, изменило порядок вызываемых событий.

Я над этим бился полчаса :(


Рекомендуем почитать: