|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Добрый день! Мучаюсь с переводом большого проекта с Delphi 2007 на Delphi XE8. Проект сейчас уже нормально компилируется на XE8 - но только в том случае если не открывать его модули в редакторе Delphi. Если же открыть какой-либо модуль в Delphi - он тут же в секцию USES добавляет свои модули - которых по его мнению для данной формы не хватает. Почему добавляет - я так понимаю, потому что у меня в секции USES перебор с разными IFDEF, IFNDEF и т. д. и Delphi путается, добавляет модули, которые не нужны, а потом проект не компилируется - ругается, что повторное использование модуля в секции USES. Возникает вопрос - как запретить Delphi что-то автоматически вставлять в секцию USES и вообще автоматически редактировать текст в PAS-файлах - тем более при обычном Save? Пусть даже при этом не будет работать редактор форм. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 00:05 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Никак. Если нужно компилировать и там и там, то используйте Unit aliasing. Подбирал экспериментально. Так же создавал папку с "пустыми" юнитами (типа System.ImageList) от новой Delphi в старом проекте и включал её в пути. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 00:14 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Среда добавляет модули тех компонентов, которые находятся на форме. Создавайте компоненты ДИНАМИЧЕСКИ, тогда среда ничего добавлять не будет. Странно считать, что компонент на форме ЕСТЬ, а модуля в USES не должно быть ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 00:28 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
DimaBr Среда добавляет модули тех компонентов, которые находятся на форме. Создавайте компоненты ДИНАМИЧЕСКИ, тогда среда ничего добавлять не будет. Странно считать, что компонент на форме ЕСТЬ, а модуля в USES не должно быть Они есть в секции USES - но среда это не понимает. Пример (у меня сложнее - но я для краткости минимизировала данный глюк Delphi XE8, в D2007 такого небыло): {$DEFINE cond} unit Unit1; interface uses System.Classes, Vcl.Controls, Vcl.StdCtrls; //среда сама добавляет хлам в USES uses {$IF Defined(cond)} Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls {$ENDIF}; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('100'); end; end. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 01:08 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Наталья87 Код: pascal 1.
Попробуй Код: pascal 1.
Мало ли, вдруг поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 01:17 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Наталья87Пример (у меня сложнее - но я для краткости минимизировала данный глюк Delphi XE8, в D2007 такого небыло): Уберите второй "USES". Он как горец - может быть только один. Я бы на вашем месте избавился от условной компиляции совсем, но об этом мы уже говорили в прошлом году, не так ли?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 01:23 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Кажется, удалось победить среду после почти года мучений. Среда добавляет мучор в секцию USES если в ней используется что-то подобное USES {IF Defined}...{ELSE}...{IFEND} или USES {$I some_unit.pas} Решение вопроса. Вместо слова USES пишем {$I USES.pas} в USES.pas прописываем одно слово из 4-х букв USES потом после этого можно писать модули с кучей IFDEF и как угодно вообще, в том числе {$I some_units} в этом случае среда разработки Delphi теряется и ничего не добавляет в секцию USES Правда, визуальный редактор форм более недоступен для модулей, где так прописали Но если что то надо подредактировать визуально в конкретном модуле - меняем обратно {$I USES.pas} на USES подредактируем, подчистим мусор за средой, заменим обратно USES на {$I USES.pas} Чтобы сократить данные действия - можно вместо {$I USES.pas} прописывать {$IFNDEF hack} {$I USES.pas} {$ELSE} uses {$ENDIF} тогда менять надо будет всего лишь одну букву по умолчанию ifndef а для возможности использования визуального редактора в конкретной форме меняем на ifdef потом когда то, что нужно подредактируем - подчистим мусор за средой и вернем обратно IFNDEF то есть получается 2 режима - визуальная среда разработки мусорит и работает, либо не работает, но и не мусорит недостаток в том, что не получится всё равно заставить визуальный редактор работать, но при этом не мусорить как в delphi 7 ... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 01:56 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 01:59 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Слишком разный список модулей у меня (а также последовательностей их вызова) для D2007 и для XE8 поэтому сложно от этих IFDEF и {$I } в секции USES избавиться. Буду пробовать что то с alias-ами но тут тоже все не совсем очевидно. А пока пусть будет это решение с квадратными колесами и чтобы проект компилировался в обоих средах (причем в D2007 будет все как прежде, ничего не изменится, а в XE8 будут требоваться ухищрения). Если бы удалось запретить среде XE-8 разработки что-то добавлять в USES, понять как можно пакетно добавлять несколько модулей в USES - цены бы ей небыло можно было бы гораздо быстрее на нее перейти совсем ... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 02:14 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Странно слышать такое, когда у меня уже более четверти века нормально работает такая секция uses Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 02:38 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Наталья87, Код: pascal 1. 2. 3. 4. 5.
А теперь подумайте, какая строка с uses будет, если не будет объявлен дефайн? Конечно, вы понимаете, что дефайн объявлен всегда. Но среда-то об этом не знает и допускает, что дефайн можетт быть не объявленным. И в этом случае будет uses; А такого не должно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 07:57 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Нельзя толком в редактируемых формах что-то с uses сделать, всегда будет что-то да нарушаться. Если не редактировать - то можно дефайнами обойтись ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 10:09 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
RAD до сих пор не может нормально обрабатывать $IF конструкции в режиме кода. Чистые $IFDEF - нормально. Даже если сделать {$IF Foo} {$DEFINE Bar} и потом {$IFDEF Bar} - тоже не прожует. Нормальное решение: либо чистый IFDEF, либо алиасы и пустые юниты-заглушки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 10:31 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal RAD до сих пор не может нормально обрабатывать $IF конструкции в режиме кода. Чистые $IFDEF - нормально. Даже если сделать {$IF Foo} {$DEFINE Bar} и потом {$IFDEF Bar} - тоже не прожует. Нормальное решение: либо чистый IFDEF, либо алиасы и пустые юниты-заглушки. Проблема в том, что {$I } тоже плохо обрабатывает в секции USES, а мне нужно в каждую форму подключить одинаковый набор модулей в строго определенном порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 10:45 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Нет, мой велосипед с квадратными колёcами (размещенный здесь в 2 часа ночи) что-то слишком плохо едет. Еще один вариант решения. Представляю на суд сообщества. Мне нужно чтобы в каждой форме в USES были прописаны определенные модули (собственно, для этого и подключается) {$I USES.inc} в секцими USES Думаю сделать так: USES {AUTO1} //обычный комментарий с четко обозначенным содержимым для поиска //здесь всякая шушара, которую Delphi сам добавляет, список может пополняться при развитии проекта USES Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls {AUTO2} //тут добавляем свои модули - используя как {$I }, так и {$IFDEF}, {$IF Defined} и т. д. ; Далее как обычно работаем с проектом, Delphi видит "свою" секцию USES (между AUTO1 и AUTO2) для разной шушары, видит свои модули и больше ничего автоматически не добавляет. Если потребуется использовать новый модуль - просто пишем скрипт на AutoIt, который во всех формах проекта заменяет текст между {AUTO1} {AUTO2} на нужный Тоже своего рода велосипед - но колёса уже почти круглые, неудобств минимум кроме необходимости периодически запускать AutoIt скрипт, который нужно написать только 1 раз ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 10:48 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
northener Странно слышать такое, когда у меня уже более четверти века нормально работает такая секция uses Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
У Вас тут нет ни одного инклуда. А неплохо бы вынести всё что у вас в отдельный файл VCL.pas И писать в каждом модуле проекта, где такой набор модулей в таком порядке нужен USES {$I VCL.pas}, ...; Вот только XE-8 это не прожуёт. А в Delphi 2007 нормально будет работать в том числе в Form Designer. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 10:56 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
goldmi45 Наталья87, Код: pascal 1. 2. 3. 4. 5.
А теперь подумайте, какая строка с uses будет, если не будет объявлен дефайн? Конечно, вы понимаете, что дефайн объявлен всегда. Но среда-то об этом не знает и допускает, что дефайн можетт быть не объявленным. И в этом случае будет uses; А такого не должно быть. Среда Delphi 2007 может быть тоже не понимала - но хотя бы не мусорила в этом случае. А среда Delphi XE-8 не понимает - но при этом с радостью вставляет свою шушару и делает проект некомпилируемым. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 11:01 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Наталья87, Я в какой-то момент, при необходимости одновременной работы в 2 версиях, делал пустые модули с тем же именем, что и автоматически добавляемые файлы, и подключал их с дефайном более ранней версии в dpr. В моем случае это были 2 модуля. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 11:22 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
swame2, Наталья не любит простых решений. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 11:24 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Если прям вот строго определенный набор модулей в определенном порядке, то скрипт сойдет. Только если вдруг сработает автодобавление, оно вкарячится в конец списка. Но вообще это экономия на спичках. Если уж так не хочется видеть "мусор", оберни его в $REGION и успокойся ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 11:33 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Обходное решение в лоб: Код: pascal 1. 2. 3. 4. 5.
Тогда автоматически Delphi будет добавлять модули под NeverDefineThisSymbol, который никогда не определён, и, следовательно, эффекта иметь не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 11:50 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
GunSmoker Delphi будет добавлять модули под NeverDefineThisSymbol, ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 12:06 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
Наталья87 где такой набор модулей в таком порядке нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 12:07 |
|
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
|
|||
---|---|---|---|
#18+
_Vasilisk_ GunSmoker Delphi будет добавлять модули под NeverDefineThisSymbol, Думаю, зависит от того, как именно написан uses, и что из него сумела распарсить IDE; ну и может от версии IDE ещё. Если IDE добавляет в конец - поставить эту конструкцию в конец тогда. Но судя по сообщению ТС - среда добавляет в начало. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2021, 13:12 |
|
|
start [/forum/topic.php?fid=58&msg=40110210&tid=2036891]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
163ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 287ms |
0 / 0 |