где fmReserve = class(TForm)
Как показывает практика, я могу много раз выполнять этот код, при этом будет создано несколько одинаковых форм и Delphi при создании каждой новой формы будет к ее имени приписывать порядковый номер: fmReserve_1, fmReserve_2, ...
НО!
Время от времени этот же код выдает мне ошибку
Сomponent named fmReserve already exists
Закономерность возникновения которой мне совершенно непонятна.
Может кто пояснить?
Почему я обычно могу создать несколько одинаковых форм, но иногда — нет ?
Здравствуйте, konstbel, Вы писали:
K>Время от времени этот же код выдает мне ошибку K>
K>Сomponent named fmReserve already exists
K>
K>Закономерность возникновения которой мне совершенно непонятна.
В конструкторе пишем Name:='MyComponent' и всегда получаешь эту ошибку.
K>Может кто пояснить? K>Почему я обычно могу создать несколько одинаковых форм, но иногда — нет ?
Здравствуйте, DarkMaster, Вы писали:
DM>Name:=''; и ошибки не будет.
Ну, это понятно, спасибо. У меня в конструкторе вообще нет присвоения Name, все делает Delphi при инициализации формы.
Мне непонятно: почему обычно оно работает, а иногда нет?
Что такого происходит, из-за чего дельфийский код обеспечения разных имен перестает работать?
Получается, что он при первой проверке не видит уже существущий компонент, а при второй — видит?
Из-за чего? Создаются подряд две формы?
Сколько не пытался воспроизвести — не получается.
Здравствуйте, konstbel, Вы писали:
K>Почему я обычно могу создать несколько одинаковых форм, но иногда — нет ?
а что, если исходники посмотреть?
TComponent.SetName вызывает TComponent.ValidateName, которая, в свою очередь, вызывает функцию FindComponent (поиск компонента по имени среди компонентов, для которых Self является владельцем (Owner)). И если компонент с таким же именем найден, то вызывается Exception с сообщением формата SDuplicateName. Теперь стоит посмотреть на свой код. Почему к моменту fmReserve:=TfmReserve.Create(self);
у self уже является владельцем компонента с таким же именем.
Здравствуйте, konstbel, Вы писали:
K>Что такого происходит, из-за чего дельфийский код обеспечения разных имен перестает работать? K>Получается, что он при первой проверке не видит уже существущий компонент, а при второй — видит? K>Из-за чего? Создаются подряд две формы? K>Сколько не пытался воспроизвести — не получается.
Ищи где в коде (деструктора?) создаваемой формы есть что-то вроде Icon.Free or Canvas.Free.