Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ресурсы и стандартные модули

44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
Скажите пожалуйста, как исправить такие ошибки
Код:
[Error] WARNING. Duplicate resource(s):
[Error] Type 12 (CURSOR GROUP) 32761:
[Error] File Controls.res resource kept; file e:\prograrm files\borland\delphi7\lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32762:
[Error] File Controls.res resource kept; file e:\prograrm files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32763:
[Error] File Controls.res resource kept; file e:\prograrm files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32764:
[Error] File Controls.res resource kept; file e:\prograrm files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32765:
[Error] File Controls.res resource kept; file e:\prograrm files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32766:
[Error] File Controls.res resource kept; file e:\prograrm files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32767:
[Error] File Controls.res resource kept; file e:\prograrm files\borland\delphi7\Lib\Controls.res resource discarded.

Решил пройтись трассировкой по стандартным модулям
но для этого их надо перекомпилировать
составил граф - кто кого юзает
определил минимальное количество подключаемых модулей (см рисунок)
(типа если мы юзаем модуль А, а модуль А юзает модуль Б, а модуль Б юзает модуль А(в implementation'e), то если перекомпилировать только модуль А, то модуль Б будет попрежнему юзать не перекомпилированный)
создал новый проект, добавил кучу модулей, скопипастил все туда, настроил ссылки друг на друга...
директив {$R ...}нашел только три:
Project1 - {$R *.res}
Unit1 - {$R *.dfm}
Unit4;//Controls; - {$R Controls.res}
скопировал файл Controls.res в папку проекта
до того ка скопировал ишибки были следующие
Код:
[Error] WARNING. Duplicate resource(s):
[Error] Type 12 (CURSOR GROUP) 32761:
[Error] File e:\program files\borland\delphi7\Lib\Controls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32762:
[Error] File e:\program files\borland\delphi7\Lib\Controls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32763:
[Error] File e:\program files\borland\delphi7\Lib\Controls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32764:
[Error] File e:\program files\borland\delphi7\Lib\Controls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32765:
[Error] File e:\program files\borland\delphi7\Lib\Controls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32766:
[Error] File e:\program files\borland\delphi7\Lib\Controls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error] Type 12 (CURSOR GROUP), ID 32767:
[Error] File e:\program files\borland\delphi7\Lib\Controls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
19K
27 января 2011 года
Alegun
269 / / 10.09.2010
Возможно здесь происходит совпадение файл-ресурса (попытка задействовать его два раза, или файл Controls.res зарезервирован в среде Делфи). Могу ошибаться, но попробуйте просто переименовать файл Controls.res на MyControls.res и изменить директиву на {$R MyControls.res}.
44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
после переименования
Код:
[Error] WARNING. Duplicate resource(s):
[Error]   Type 12 (CURSOR GROUP), ID 32761:
[Error]     File MyControls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error]   Type 12 (CURSOR GROUP), ID 32762:
[Error]     File MyControls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error]   Type 12 (CURSOR GROUP), ID 32763:
[Error]     File MyControls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error]   Type 12 (CURSOR GROUP), ID 32764:
[Error]     File MyControls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error]   Type 12 (CURSOR GROUP), ID 32765:
[Error]     File MyControls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error]   Type 12 (CURSOR GROUP), ID 32766:
[Error]     File MyControls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.
[Error]   Type 12 (CURSOR GROUP), ID 32767:
[Error]     File MyControls.res resource kept; file e:\program files\borland\delphi7\Lib\Controls.res resource discarded.

если удалить Controls.res из E:\Program Files\Borland\Delphi7\Lib
 
Код:
[Error] File not found: 'Controls.res'
19K
27 января 2011 года
Alegun
269 / / 10.09.2010
Из Либ удалять не надо - Вы написали "скопировал файл Controls.res в папку проекта" вот здесь переименовка и должна лежать.

Вот информация о директиве:
Директива компилятора, связывающая с выполняемым модулем файлы ресурсов [COLOR=#000000]Область действия локальная[/COLOR]
[COLOR=#000000]Директива компилятора [/COLOR][COLOR=#ff00ff][FONT=Courier New]{$R}[/FONT][/COLOR][COLOR=#000000] указывает файлы ресурсов (.DFM, .RES), которые должны быть включены в выполняемый модуль или в библиотеку. Указанный файл должен быть файлом ресурсов Windows. По умолчанию расширение файлов ресурсов - .RES.[/COLOR] [COLOR=#000000]В процессе компоновки компилированной программы или библиотеки файлы, указанные в директивах {$R}, копируются в выполняемый модуль. Компоновщик Delphi ищет эти файлы сначала в том каталоге, в котором расположен модуль, содержащий директиву {$R}, а затем в каталогах, указанных при выполнении команды главного меню Project | Options на странице Directories/Conditionals диалогового окна в опции Search path или в опции /R командной строки DCC32.[/COLOR]
[COLOR=#000000]При генерации кода модуля, содержащего форму, Delphi автоматически включает в файл .pas директиву {$R *.DFM}, обеспечивающую компоновку файлов ресурсов форм. Эту директиву нельзя удалять из текста модуля, так как в противном случае загрузочный модуль не будет создан и генерируется исключение EResNotFound.[/COLOR]

[COLOR=#000000][FONT=Times New Roman]Duplicate Resources Error[/FONT][/COLOR]
[COLOR=#000000][FONT=Times New Roman]У вас есть исходный код VCL? Если да, то в этом случае ее можно всю перекомпилировать, добавив каталог к вашему библиотечному пути (Library path) в опциях среды (Environment Options | Library). Я думаю это нужно сделать, чтобы отделаться от этой ошибки. При другом способе необходимо вычислить вызывающую проблему директиву $R, временно удалить ее, и осуществить перекомпиляцию. Временно выключить директиву $R можно добавлением '.' перед $ (но это не единственный путь выключить ее). [/FONT][/COLOR]

[COLOR=#000000][FONT=Times New Roman]Вероятно, вы сабкласситесь от VCL. Убедитесь в том, что идентификатор ресурса для вашей иконки уникальный. Просто загрузите ее в любой редактор ресурсов, и измените ее номер. После этого вы должны пересобрать вашу библиотеку. [/FONT][/COLOR]

[RIGHT][COLOR=#ff6600][FONT=Arial Unicode MS]©[/FONT][/COLOR][COLOR=#ff6600][FONT=Courier New]Drkb::02170[/FONT][/COLOR][/RIGHT]

[COLOR=#7f0000][FONT=Times New Roman]Примечание от Vit[/FONT][/COLOR]

[COLOR=#7f0000][FONT=Times New Roman]В 99% случаев эта ошибка возникает при установке компонента, так как при добавлении компонента к пакету Дельфи автоматически к проекту добавляет и ресурс, если же этот ресурс уже определён в исходном коде компонента то и возникает эта ошибка. Откройте или менеджер проекта или исходный код DPK файла и удалите оттуда ссылку на ресурс, оставив её только в исходном коде компонента.[/FONT][/COLOR]
[RIGHT][COLOR=#ff6600][FONT=Arial Unicode MS]©[/FONT][/COLOR][COLOR=#ff6600][FONT=Courier New]Drkb::02171[/FONT][/COLOR][/RIGHT]
10
27 января 2011 года
Freeman
3.2K / / 06.03.2004
Причиной ошибки являются совпадающие ресурсы, а не имя файла.

Как понимаю, речь идёт о дополнительных курсорах, вроде перетаскивания или "пальца", используемых в VCL. Возможно, где-то по путям, где расположены библиотеки, лежат файлы для старой версии Delphi или перемешаны пути от нескольких версий Delphi.

Поскольку ресурсы явно стандартные, имя файла вряд ли будет другое. Предлагаю поискать, где ещё есть Controls.res.
44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
т.е. где лежит controls.res неважно - в Либе или в папке проэкта - проверял на новом пустом проэкте
если в Либе controls.res нету, а в одном из моих модулей написано {$R MyControls.res}
то если в папке проэкта лежит Mycontrols.res - ненайден controls.res
....если в папке проэкта лежит controls.res - ненайден Mycontrols.res
....если в папке проэкта лежат оба файла (одинаковые с разными именами) - [Error] WARNING. Duplicate resource(s):
277
27 января 2011 года
arrjj
1.7K / / 26.01.2011
Mycontrols.res удали или удали из него дублированные ресурсы, оставь controls.res в папке либ
44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
Цитата: Alegun
[COLOR=#000000][FONT=Times New Roman]Duplicate Resources Error[/FONT][/COLOR]
[COLOR=#000000][FONT=Times New Roman]У вас есть исходный код VCL? Если да, то в этом случае ее можно всю перекомпилировать, добавив каталог к вашему библиотечному пути (Library path) в опциях среды (Environment Options | Library). Я думаю это нужно сделать, чтобы отделаться от этой ошибки. [/FONT][/COLOR]


ой, а можно поподробнее
исходный код VCL вроде есть, иначе откуда бы тогда я копировал тексты этих модулей
какой каталог надо добавить к библиотечному пути - свой собственный?,
что в него скопировать - Lib? Sources? sources\VCL?

также привожу граф всех модулей, используемых приложением

44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
Цитата: arrjj
Mycontrols.res удали или удали из него дублированные ресурсы, оставь controls.res в папке либ


а чем просматривать и редактировать файлы *.res?

19K
27 января 2011 года
Alegun
269 / / 10.09.2010
Это всё относится к подключаемым визуальным компонентам, в данном случае тактика немного другая : увж. Freeman заметил правильно - придётся переименовать ID ресурсов (их в файле Mycontrols.res (не controls.res) лежит всего семь):
Cursor
- 32761 (напр. 12761)
- 32762
- 32763
- 32764
- 32765
- 32766
- 32767
так же нужно изменить и обращение к ним, в подключенных копиях стандартных модулей (придётся искать).

Файлы ресурсов редактируются стандартным редактором (Tools-> Image Editor)
44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
Цитата: Alegun

так же нужно изменить и обращение к ним, в подключенных копиях стандартных модулей (придётся искать).


OK, и как выглядят обращения к ним?

277
27 января 2011 года
arrjj
1.7K / / 26.01.2011
LoadFromResource, LoadFromResourceId, и т.д. А может они там вообще не используются.
имхо проще удалить дублированное использование файла ресурсов.

Или удали дублированные ресурсы из файла mycontrols.res.
19K
27 января 2011 года
Alegun
269 / / 10.09.2010
Controls.pas (копия)
...
{ Cursor identifiers }
type
TCursor = -32768..32767;// поменять на -32768..12767
...
const
crDefault = TCursor(0);
crNone = TCursor(-1);
crArrow = TCursor(-2);
crCross = TCursor(-3);
crIBeam = TCursor(-4);
crSize = TCursor(-22);
crSizeNESW = TCursor(-6);
crSizeNS = TCursor(-7);
crSizeNWSE = TCursor(-8);
crSizeWE = TCursor(-9);
crUpArrow = TCursor(-10);
crHourGlass = TCursor(-11);//=12762
crDrag = TCursor(-12);
crNoDrop = TCursor(-13);//=12767 и т.д.
crHSplit = TCursor(-14);//=12764
crVSplit = TCursor(-15);//=12765
crMultiDrag = TCursor(-16);
crSQLWait = TCursor(-17);
crNo = TCursor(-18);
crAppStart = TCursor(-19);
crHelp = TCursor(-20);
crHandPoint = TCursor(-21);
crSizeAll = TCursor(-22);

Нет, изменение диапазона TCursor не помогает (возникает искличительная ситуация), придётся менять явно.
44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
ОК, с ошибками компиляции разобрались, теперь пошли ошибки выполнения
приведу список модулей
//Unit2 in 'Unit2.pas', - Dialogs
//Unit3 in 'Unit3.pas', - Forms
//Unit4 in 'Unit4.pas', - Controls
//Unit5 in 'Unit5.pas', - Themes
//Unit6 in 'Unit6.pas', - ExtCtrls
//Unit7 in 'Unit7.pas', - StdCtrls
//Unit8 in 'Unit8.pas', - StdActns
//Unit9 in 'Unit9.pas', - Clipbrd
//Unit10 in 'Unit10.pas',- Printers
//Unit11 in 'Unit11.pas',- ActnList
//Unit12 in 'Unit12.pas',- Menus
//Unit13 in 'Unit13.pas',- ImgList
итак сначала выполняется begin в project1, потом end в ImgList
потом инициализация Themes
потом инициализация Controls
потом инициализация ActnList
потом инициализация Menus
, где при выполнении RegisterClass(TMenuItem); возникает ошибка
 
Код:
Project Project 1 .exe raised exception class EFilerError with message 'A class named TMenuItem already
exists'. Process stopped. Use Step or Run to continue.

итак - что может вызвать эту ошибку?
19K
27 января 2011 года
Alegun
269 / / 10.09.2010
А что пишет ОС, (не Делфи) если нажать снова на Run?
44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
Runtime error 217 at 004124BB

а может существует какой-нибудь более простой способ перекомпилировать всю библиотеку?
10
27 января 2011 года
Freeman
3.2K / / 06.03.2004
А разве недостаточно просто исключить из Unit4 {$R Controls.res}?
19K
27 января 2011 года
Alegun
269 / / 10.09.2010
Вообще-то, в документации написано, что если "Runtime error 217" возникает - это значит испорчен или потерян какой-то файл... А может просто взьять и удалить все дэкэушки (у кого пасы есть) в чистую из Либ, глядишь и скомпилиться библиотека по-новой, без заморочек?
277
27 января 2011 года
arrjj
1.7K / / 26.01.2011
Скорее всего автор просто гдето подключает оригинальные юниты, которые выполняют RegisterClass(TMenuItem); а потом и его скопипащеный код также пытается зарегестрировать этот класс, вот и получается беда.

Да и вообще идея автора непонятна зачем перекомпилировать для трассировки если есть сорсы и при трассировке delphi и так сама в них зайдёт и покажет исполняемый в данный момент код.
44K
27 января 2011 года
FeelUs
57 / / 10.05.2010
ура - удалил forms.dcu из либа и из либ\дебаг, кинул forms.pas в папку проэкта - скомпилировалось, и трассировать можно

а RegisterClass был объявленв Classes
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог