Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не изменяется заголовок MDI-child окна [D7, WinXP]


Vann ©   (2011-04-28 10:20:00) 

Какой-то очень странный баг нашелся в Delphi7. У меня MDI приложение, формы я создаю при выборе пунктов меню. Т.е. при разработке, форма создана, но автоматического создания при запуске приложение нет. Когда мне нужно вызвать дочернюю форму, я выполняю код вида:
Form2:= TForm2.Create(Form1);
При этом, если в обработчиках TForm2.FormCreate, TForm2.FormActivate или TForm2.FormShow я пытаюсь изменить текст заголовка окна (TForm2.Caption:='AAA'), приложение на это не реагирует. Причем, если положить на форму кнопку и сделать изменение заголовка по кнопке, то оно срабатывает, а вот при создании формы никак. В чем же дело?


Плохиш   (2011-04-28 22:58:00) [1]


> Видимо, при ручном создании формы, присвоение значения указателя
> на нее происходит только после обработки всех событий создания
> формы.

Вообще-то, присвоение производится тогда, когда в программе написан оператор присваивания, а последовательность выполнения операторов описана в основах избранного языка программирования.


Inovet   (2011-04-28 18:36:00) [2]

> [9] Vann   (28.04.11 15:00)
> Видимо, при ручном создании формы, присвоение значения
> указателя на нее происходит только после обработки всех
> событий создания формы

Выбрось переменную Form2 на помойку. В MDI TForm2 может быть много, и ты думаешь, что указатели на все объекты класса формы храняться в этой переменной? Вот подумай где бы они могли быть. Подсказака - что ты там в Create() передаёшь?


Vann   (2011-04-28 15:00:00) [3]

Действительно, ShowMessage выдает '', а проверка Form2=nil выдает True. Так что переменная формы действительно равна nil, хотя сама форма уже существует. Видимо, при ручном создании формы, присвоение значения указателя на нее происходит только после обработки всех событий создания формы. А ошибки нет, потому как работа идёт через сообщения. sniknik прав!


sniknik   (2011-04-28 14:30:00) [4]

> Неужели присвоение "не работает" и неужели шоумессадж показывает 'БББ' вместо 'ААА'?
вполне может '' показать, т.е. не присвоенное 'ААА', а получается метафорически именно 'БББ'. ;)
это если форма = nil. (ошибки не будет, т.к. с Caption через сообщения работа)


Медвежонок Пятачок   (2011-04-28 12:48:00) [5]

Form2.Caption:='AAA';
ShowMessage(Form2.Caption);

Неужели присвоение "не работает" и неужели шоумессадж показывает 'БББ' вместо 'ААА'?


Плохиш   (2011-04-28 12:45:00) [6]


> вот только кто-нибудь может еще объяснить

В серьëз уверен, что кому-делать нечего как рассказывать основы расписанные во всех книжках и в мировой помойке.


Медвежонок Пятачок   (2011-04-28 12:20:00) [7]

Но оно не работало.

Работало. Просто присвоение происходило не той форме, которой ты хотел


Vann   (2011-04-28 12:18:00) [8]


> дело в лишних буквах перед caption.
>
> caption := 'aaa';

Действительно, заработало без них. Кстати, я опечатался, конечно же, я присваивал значение объекту, а не типу, т.е. у меня было Form2.Caption:='AAA', без «T». Но оно не работало. А когда написал просто Caption:='AAA', то заработало. Я доволен, всем большое спасибо, вот только кто-нибудь может еще объяснить, почему всё-таки не работает Form2.Caption:='AAA', т.е. в чем же разница с Caption:='AAA'?


clickmaker   (2011-04-28 11:16:00) [9]

> если положить на форму кнопку и сделать изменение заголовка
> по кнопке, то оно срабатывает

и именно так TForm2.Caption:='AAA'?


Anatoly Podgoretsky   (2011-04-28 11:00:00) [10]

> Vann  (28.04.2011 10:20:00)  [0]

Потому что ты пытаешься сменить у класса, а не у объекта


Медвежонок Пятачок   (2011-04-28 10:27:00) [11]

дело в лишних буквах перед caption.

caption := 'aaa';


Наверх

Титульная страница Поиск, карта сайта Написать письмо