Delphi IDE изменяет список изображений в унаследованных файлах DFM - PullRequest
6 голосов
/ 15 марта 2011

При открытии формы, которая содержит унаследованный TImageList в Delphi (в данном случае 2010, но он может делать это и для других версий), среда IDE неизменно (я не могу найти рифму или ритм к ней) добавляет данные изображения снова в наследственную форму. Это затем увеличивает размер исполняемого файла. Кто-нибудь знает почему и как я могу остановить это? Я повторяю, изображение не изменилось.

Ответы [ 4 ]

5 голосов
/ 16 марта 2011

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

4 голосов
/ 15 марта 2011

Это известная проблема с TImageList, и вы ничего не можете с этим поделать, кроме повторного удаления данных мусора. (BeyondCompare может быть очень полезен здесь, особенно в сочетании с контролем исходного кода.) Если вы хотите, чтобы он был исправлен, пожалуйста, проголосуйте за отчет QC по нему.

4 голосов
/ 15 марта 2011

Это не «решение» проблемы, а скорее объяснение того, что происходит. Данные изображения для данного списка изображений сохраняются в виде двоичного двоичного объекта данных. Этот блок данных получается из базовой реализации IMAGELIST из comctl32.dll.

Вероятно, происходит то, что по какой-то причине реализация Windows в comctl32.dll по-разному передает данные изображения между экземпляром «предка» и экземпляром «потомка». Для Windows нет никакой связи между этими двумя экземплярами.

Способ наследования форм работает так, что он выполняет сравнение свойств за свойством между «потомком» и «предком» во время потоковой передачи, чтобы определить, следует ли записать данное свойство в форму. Поскольку данные изображения представляют собой непрозрачный двоичный объект goo, все, что мы можем сделать - это побайтное сравнение между тем, что пишет экземпляр TImageList на предке, и тем, что пишет экземпляр TImageList на потомке. Если бы отличался только один байт, потоковая система не имела бы другого выбора, кроме как записать данные из экземпляра-потомка при условии, что что-то изменилось. Например (и я не знаю деталей, так как он непрозрачен), если капля goo содержала временную метку, вполне возможно, что каждый раз, когда она записывается, данные будут отличаться.

2 голосов
/ 15 марта 2011

Моя рекомендация: никогда не храните изображения в файлах .dfm. Всегда помещайте их в файлы ресурсов и восстанавливайте контроль над своим приложением.

...