Очень странное поведение: Delphi 5 добавляет компонент в мою форму с пустым именем - PullRequest
2 голосов
/ 19 февраля 2011

Теперь это очень загадочный вопрос, надеюсь, вы мне поможете.

У меня есть пользовательский компонент, производный от TCustomControl, который входит в пакет.Этот пакет правильно скомпилирован и установлен в D5.Пакет также требует использования другой библиотеки компонентов, библиотеки ImageEn.

У меня есть приложение, которое использует этот компонент. До недавнего времени все казалось нормальным, но теперь, после некоторых недавних изменений вкомпонент (в основном меняя имя используемых типов) У меня очень странное поведение.В форме, где размещен этот компонент, Delphi создаст, я бы сказал, просто без причины, компонент TImageEnIo (из библиотеки ImageEn), который даже не был включен в dfm формы.

Еще более загадочным являетсяТот факт, что этот добавленный компонент imageenio не имеет имени, что вызывает у меня много проблем при попытке запустить приложение (ошибка времени выполнения).Если я удалю этот компонент, он появится снова, как только что-то будет обновлено (например, если я переключусь между текстом и формой dfm).Delphi просто добавляет эту вещь в любую форму, где я использую свой пользовательский компонент.Это происходит только тогда, когда мой пользовательский компонент присутствует, другие компоненты пакета не генерируют эту проблему.

Я заметил, что он создает 1 из этих пустых TImageenio для каждого пользовательского компонента в форме, и более того, еслиЯ переключаюсь назад и вперед между текстом и представлениями формы dfmit, добавляя еще один компонент imageenio каждый раз, когда я делаю это.

Наконец, проблема не зависит от приложения, поскольку это будет происходить с любым приложением, пока я добавляю свой пользовательский компонент в форму.

Теперь я перекомпилировал все изображение и мойПакет много раз, я даже пытался восстановить более старую версию компонента, но проблема сохранялась (я совершенно уверен, что у меня не было опыта с более старой версией), я пробовал что-либо мыслимое, но я не могу понять это.Я в полной растерянности, пожалуйста, совет. Если вам нужна дополнительная информация, пожалуйста, спросите, я постараюсь объяснить лучше.

Большое спасибо тем, кто найдет время ответить.

Ответы [ 3 ]

3 голосов
/ 19 февраля 2011

Казалось бы, проблема была вызвана недавними изменениями в вашем пользовательском компоненте.

Вы должны использовать свою систему контроля версий, чтобы вернуться к известной хорошей версии.Затем перейдите к промежуточным версиям кода, возможно, используя бинарный поиск для повышения эффективности.После того, как вы изолировали ревизию, в которой появилась ошибка, вы сможете изучить изменения кода в этой ревизии и выявить проблему.

3 голосов
/ 19 февраля 2011

Дикая догадка: ваш пользовательский компонент прямо или косвенно создает экземпляр TImageEnIo с неверным владельцем.Вместо использования Self (т. Е. Экземпляра пользовательского компонента) он использует свойство Owner, которое указывает на форму, в которой он находится.

1 голос
/ 19 февраля 2011

Первое, что я бы попробовал, - это запустить новое приложение, создать один из ваших пользовательских элементов управления во время выполнения и поместить точки останова в сторонний исходный код, в котором создается компонент TImageEnIo, конструктор компонента будетхорошо.Если поведение времени разработки демонстрируется также во время выполнения, будет достигнута точка останова, и вы сможете выяснить часть кода, создающую компонент из трассировки стека.

В противном случае возможна отладкаПоведение во время разработки путем отладки IDE с другим экземпляром IDE, но я не знаю, как это можно сделать с помощью D5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...