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

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

Выяснение причины сообщения "A component named . already exists" [D6]


Страницы:   1 2 3

Димон ©   (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)

Не пустая :)))

Братья, вы в общем-то о чем-то не том говорите. Я так понимаю, что с такой ситуацией вы просто не сталкивались :)  

Здесь есть явное нарушение работы "выделятеля уникальных имен" по причине сложно наведенной ошибки.

Собственно вопрос о алгоритме выделения имен. Что там предположительно может сломаться. :))


Страницы:   1 2 3

Наверх

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