![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выяснение причины сообщения "A component named . already exists" [D6]
Димон © (2005-03-01 12:02:00)Есть примерно такой код, который выполняется в одном из методов другой формы:
kForm := TMyForm.Create(Application);
try
Result := kForm.ShowModal = mrOk;
if Result then
kForm.SaveResults(ResultObject);
finally
kForm.Release();
end;
После этого кода результаты диАлогового ввода пользователя, сохраненные командой SaveResults в ResultObject, неким образом обрабатываются.
Бывают случае когда обработка заканчивается с ошибкой. После этого в пириведенном выше коде возбуждается исключение указанное в сабже.
Вопрос: что приводит к такой ошибке?
Проде бы TComponent должен сам заботиться о выборе имени дабы избежать конфликта имен в рамках своего owner. С чем может быть связано отсутствие такого подбора в моем случае?
Anatoly Podgoretsky (2005-03-01 20:24:00) [1]Зависание
Димон (2005-03-01 20:11:00) [2]
> [38] Набережных С. © (01.03.05 19:35)
может и нету :))
> [39] Anatoly Podgoretsky © (01.03.05 19:48)
Проблемы? Можно подробнее? :) Какие, например.
Anatoly Podgoretsky (2005-03-01 19:48:00) [3]Набережных С. © (01.03.05 19:00) [36]
Попробуй все-таки заменить Release на Free.
Набережных С. © (01.03.05 19:00) [36]
Попробуй все-таки заменить Release на Free. Ну для моего спокойствия:) Тем более, что релиз здесь вроде как и ни к
Release должен применяться внутри объекта (класса), вот с ним были проблемы при применении извне.
А Free снаружи, проблем тоже ни когда не было.
Набережных С. (2005-03-01 19:35:00) [4]Ну могу только сказать, что в такой конструкции(с Free) у меня никогда ни единой проблемы не было. Прошелся поиском, такая ошибка генерится только в методе TComponent.ValidateRename. Копай, где и как он вызывается - вставка, удаление, переименование.
I>
> Теперь никак - не могу смоделировать
А может, ее уже и нету?<
Димон (2005-03-01 19:06:00) [5]
> [36] Набережных С. © (01.03.05 19:00)
да я уже заменил:)
Самая проблема теперь протестировать. Ошибку мне так и не удалось смоделировать. Когда-то давно, давно, только когда я написал этот блок я видел сам пару раз эту ошибку. Теперь никак - не могу смоделировать:((((((
Набережных С. (2005-03-01 19:00:00) [6]
> Димон (01.03.05 18:55) [35]
Попробуй все-таки заменить Release на Free. Ну для моего спокойствия:) Тем более, что релиз здесь вроде как и ни к чему...
Димон (2005-03-01 18:55:00) [7]
> [34] Набережных С. © (01.03.05 18:47)
не в этом дело:))) [5] показывает, что ты можешь создавать сколько угодно одинаковых форм. Об уникальности имен позаботится сам vcl.
Набережных С. (2005-03-01 18:47:00) [8]
> kForm.Release();
Возможно, к моменту второй попытки выполнить этот код тот экземпляр , который был создан при первом обращении, еще не уничтожен. Ну а так как имя у всех TMyForm одно и то-же, загружаемое из ресурсов, то и получаем эту ошибку. Поставь точку останова в OnDestroy, если дело в этом, то сразу обнаружишь. А имена компонентов на форме уникальны только в пределах этой формы.
Димон (2005-03-01 18:40:00) [9]
> [32] Юрий Зотов © (01.03.05 18:35)
Повторно прошу прощения, Юрий.
1) Ругается на "TForm_MLDocumentFilter". Где ругается, не знаю. Т.к. посторю, что не могу смоделировать ошибку - все со слов нашей техподдержки, которые лично видели ошибку, но не знают предысторию ее возникновения.
2) Application
Юрий Зотов (2005-03-01 18:35:00) [10]> Димон (01.03.05 18:10) [30]
> Кстати да, я не сказал в вопросе, что ругается на имя формы, а
> не на имя внутреннего компонента. Прошу прощения, не подумал,
> что это важно.
Дим, ну ни фига себе! Это же в корне переворачивает ситуацию. Выходит, мы 30 постов просто не понимали друг друга.
Начинаем сначала:
- приведите все же имя формы, на которое ругается;
- кто является ее Owner'ом - Application или кто-то еще?
Димон (2005-03-01 18:14:00) [11]Понимаете ли, если бы я смоделировал ситуацию ошибки (я говорил, что знаю ее только на словах), то мог бы понять, что нарушается в этом механизме. Если не с использование "use debug dcu", то хоть cpu бы просмотрел.
Но смотря на алгоритм наделения компонентов уникальными номерами я не могу понять, что в нем может пойти не так.
Собственно надежда на то, что кто-то с этим вопросом разбирался.
Всем спасибо.
Димон (2005-03-01 18:10:00) [12]Кстати да, я не сказал в вопросе, что ругается на имя формы, а не на имя внутреннего компонента. Прошу прощения, не подумал, что это важно.
:)
Димон (2005-03-01 18:09:00) [13]Контрольный вопрос, или я что-то не понимаю?
Причем здесь внутренние компоненты? Ругается то на имя формы! Именно оно "already exists", а не имя внутренних компонентов.
Указанные методы я смотрел. Да, не очень детально. Но я как раз и не понимаю, какие могут быть причины, чтобы не делать суффикс "_xxx" к имени формы.
Собственно о том и спрашиваю. Может знаете :)
Юрий Зотов (2005-03-01 18:03:00) [14]> Димон (01.03.05 16:28) [27]
> ей богу вы придираетесь к словам
Да мне-то что? Это не я придираюсь, а программа, которая не работает.
> Зависимые компоненты также создаются. Я лично непосредственно
> это не делаю.
А какая программе разница, чей код вызвал Create - Ваш или Борланловский?
> Все мое утверждение было о том, что в любом случае при
> создании формы (даже той, которая разработана в design time)
> имя должно выставиться уникальным, что и демонстрирует пример
> из [5].
Сорри, мне не хочется повторять в третий раз [14] и [18]. Очень советую внимательно посмотреть TReader.ReadRootComponent в Classes.
Димон (2005-03-01 16:28:00) [15]Юрий, при всем моем уважении, ей богу вы придираетесь к словам :)
Я привел пример, что и как я создаю. Зависимые компоненты также создаются. Я лично непосредственно это не делаю.
Все мое утверждение было о том, что в любом случае при создании формы (даже той, которая разработана в design time) имя должно выставиться уникальным, что и демонстрирует пример из [5].
:))
Юрий Зотов (2005-03-01 16:09:00) [16]> Димон (01.03.05 13:45) [19]
> Привет с внутренними компонентами неприминим - т.к. внутренние
> компоненты я не создаю.
Пишем: TForm2.Create(Application).Show - и видим форму со всеми ее компонентами. Мы их создавали? Нет, мы создавали только саму форму. Но они же есть - значит, кто-то их создал?
Так откуда же они взялись, как Вы считаете? И что в свете этого означает процитированная Ваша фраза, раз Вы сами говорите, что форма не пустая?
Димон (2005-03-01 14:24:00) [17]Во! ЗдрАвая информация. Есть у меня ощущение, что глюк :)
BlackTr (2005-03-01 14:22:00) [18]У меня такая фигня была на 5 делфи, вылечилось установкой обновлений...
До конца так и не вьехал в чем причина была :)
Димон (2005-03-01 14:02:00) [19]Собственно в алгоритме я со временем сам разберусь. Сейчас исправил пока очисткой имени. Но вопрос все-таки волнует, что может так сломаться, что форма не может снова быть создана. :)) И если кто-то с таким же сталкивался, то буду крайне рад получить данную информацию.
Димон (2005-03-01 13:56:00) [20]
> [21] KSergey © (01.03.05 13:49)
Не пустая :)))
Братья, вы в общем-то о чем-то не том говорите. Я так понимаю, что с такой ситуацией вы просто не сталкивались :)
Здесь есть явное нарушение работы "выделятеля уникальных имен" по причине сложно наведенной ошибки.
Собственно вопрос о алгоритме выделения имен. Что там предположительно может сломаться. :))