powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
25 сообщений из 60, страница 1 из 3
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110169
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!



Мучаюсь с переводом большого проекта с Delphi 2007 на Delphi XE8.

Проект сейчас уже нормально компилируется на XE8 - но только в том случае если не открывать его модули в редакторе Delphi.

Если же открыть какой-либо модуль в Delphi - он тут же в секцию USES добавляет свои модули - которых по его мнению для данной формы не хватает. Почему добавляет - я так понимаю, потому что у меня в секции USES перебор с разными IFDEF, IFNDEF и т. д. и Delphi путается, добавляет модули, которые не нужны, а потом проект не компилируется - ругается, что повторное использование модуля в секции USES.

Возникает вопрос - как запретить Delphi что-то автоматически вставлять в секцию USES и вообще автоматически редактировать текст в PAS-файлах - тем более при обычном Save? Пусть даже при этом не будет работать редактор форм.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110171
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак. Если нужно компилировать и там и там, то используйте Unit aliasing. Подбирал экспериментально. Так же создавал папку с "пустыми" юнитами (типа System.ImageList) от новой Delphi в старом проекте и включал её в пути.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110172
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Среда добавляет модули тех компонентов, которые находятся на форме.
Создавайте компоненты ДИНАМИЧЕСКИ, тогда среда ничего добавлять не будет.
Странно считать, что компонент на форме ЕСТЬ, а модуля в USES не должно быть
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110173
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110175
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наталья87
Код: pascal
1.
{$IF Defined(cond)}


Попробуй
Код: pascal
1.
{$IFDEF cond}


Мало ли, вдруг поможет.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110176
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Пример (у меня сложнее - но я для краткости минимизировала данный глюк Delphi
XE8, в D2007 такого небыло):

Уберите второй "USES". Он как горец - может быть только один.

Я бы на вашем месте избавился от условной компиляции совсем, но об этом мы уже
говорили в прошлом году, не так ли?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110178
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется, удалось победить среду после почти года мучений.
Среда добавляет мучор в секцию 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 ...
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110179
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110180
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слишком разный список модулей у меня (а также последовательностей их вызова) для D2007 и для XE8 поэтому сложно от этих IFDEF и {$I } в секции USES избавиться. Буду пробовать что то с alias-ами но тут тоже все не совсем очевидно. А пока пусть будет это решение с квадратными колесами и чтобы проект компилировался в обоих средах (причем в D2007 будет все как прежде, ничего не изменится, а в XE8 будут требоваться ухищрения). Если бы удалось запретить среде XE-8 разработки что-то добавлять в USES, понять как можно пакетно добавлять несколько модулей в USES - цены бы ей небыло можно было бы гораздо быстрее на нее перейти совсем ...
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110181
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно слышать такое, когда у меня уже более четверти века нормально работает такая секция uses
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
uses
  BDE, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
  Buttons, ExtCtrls, Grids, TabNotBk, DBTables, DB, DBGrids, Password, Users,
  DBCtrls, Mask, SysUtils,
  {$IFNDEF Net}
  Ohrana, Attentn, Request, WMake,
  {$ELSE}
   DBDir,
  {$ENDIF}
  Dbmodule, VConst, JFiltr, MMSystem, IniFiles, Spin, Misc
  {$IFNDEF Demo, Net} , Tables {$ENDIF}, Main2,
  Menus, FileCtrl, Progr, ComCtrls, RxDualList, Indicator, Tabs, ImgList,
  ToolWin, RXSplit, RXCtrls, RxDBLists, RxAppEvent, RXShell,
  RXDBCtrl, rxPlacemnt, XPMan;
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110194
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87,

Код: pascal
1.
2.
3.
4.
5.
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};


А теперь подумайте, какая строка с uses будет, если не будет объявлен дефайн? Конечно, вы понимаете, что дефайн объявлен всегда. Но среда-то об этом не знает и допускает, что дефайн можетт быть не объявленным. И в этом случае будет uses; А такого не должно быть.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110210
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя толком в редактируемых формах что-то с uses сделать, всегда будет что-то да нарушаться. Если не редактировать - то можно дефайнами обойтись
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110217
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RAD до сих пор не может нормально обрабатывать $IF конструкции в режиме кода. Чистые $IFDEF - нормально. Даже если сделать {$IF Foo} {$DEFINE Bar} и потом {$IFDEF Bar} - тоже не прожует.

Нормальное решение: либо чистый IFDEF, либо алиасы и пустые юниты-заглушки.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110221
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-Brutal
RAD до сих пор не может нормально обрабатывать $IF конструкции в режиме кода. Чистые $IFDEF - нормально. Даже если сделать {$IF Foo} {$DEFINE Bar} и потом {$IFDEF Bar} - тоже не прожует.

Нормальное решение: либо чистый IFDEF, либо алиасы и пустые юниты-заглушки.


Проблема в том, что {$I } тоже плохо обрабатывает в секции USES, а мне нужно в каждую форму подключить одинаковый набор модулей в строго определенном порядке.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110222
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, мой велосипед с квадратными колё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 раз
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110229
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
northener
Странно слышать такое, когда у меня уже более четверти века нормально работает такая секция uses
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
uses
  BDE, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
  Buttons, ExtCtrls, Grids, TabNotBk, DBTables, DB, DBGrids, Password, Users,
  DBCtrls, Mask, SysUtils,
  {$IFNDEF Net}
  Ohrana, Attentn, Request, WMake,
  {$ELSE}
   DBDir,
  {$ENDIF}
  Dbmodule, VConst, JFiltr, MMSystem, IniFiles, Spin, Misc
  {$IFNDEF Demo, Net} , Tables {$ENDIF}, Main2,
  Menus, FileCtrl, Progr, ComCtrls, RxDualList, Indicator, Tabs, ImgList,
  ToolWin, RXSplit, RXCtrls, RxDBLists, RxAppEvent, RXShell,
  RXDBCtrl, rxPlacemnt, XPMan;



У Вас тут нет ни одного инклуда. А неплохо бы вынести всё что у вас в отдельный файл

VCL.pas



И писать в каждом модуле проекта, где такой набор модулей в таком порядке нужен

USES {$I VCL.pas}, ...;

Вот только XE-8 это не прожуёт. А в Delphi 2007 нормально будет работать в том числе в Form Designer.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110231
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45
Наталья87,

Код: pascal
1.
2.
3.
4.
5.
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};


А теперь подумайте, какая строка с uses будет, если не будет объявлен дефайн? Конечно, вы понимаете, что дефайн объявлен всегда. Но среда-то об этом не знает и допускает, что дефайн можетт быть не объявленным. И в этом случае будет uses; А такого не должно быть.


Среда Delphi 2007 может быть тоже не понимала - но хотя бы не мусорила в этом случае. А среда Delphi XE-8 не понимает - но при этом с радостью вставляет свою шушару и делает проект некомпилируемым.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110241
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наталья87,
Я в какой-то момент, при необходимости одновременной работы в 2 версиях, делал пустые модули с тем же именем, что и автоматически добавляемые файлы, и подключал их с дефайном более ранней версии в dpr. В моем случае это были 2 модуля.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110244
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2,

Наталья не любит простых решений.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110250
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если прям вот строго определенный набор модулей в определенном порядке, то скрипт сойдет. Только если вдруг сработает автодобавление, оно вкарячится в конец списка. Но вообще это экономия на спичках. Если уж так не хочется видеть "мусор", оберни его в $REGION и успокойся
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110255
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обходное решение в лоб:
Код: pascal
1.
2.
3.
4.
5.
uses
  {$IFDEF NeverDefineThisSymbol}
  Windows,
  {$ENDIF}
  Windows, ... ваши реальные модули и условия.



Тогда автоматически Delphi будет добавлять модули под NeverDefineThisSymbol, который никогда не определён, и, следовательно, эффекта иметь не будет.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110262
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
Delphi будет добавлять модули под NeverDefineThisSymbol,
Точно? Модули всегда добавлялись в конец секции uses
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110263
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
где такой набор модулей в таком порядке нужен
Я стесняюсь спросить. А что вы такое написали, что для вас критичен порядок модулей? Тем более системных.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110277
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
GunSmoker
Delphi будет добавлять модули под NeverDefineThisSymbol,
Точно? Модули всегда добавлялись в конец секции uses


Думаю, зависит от того, как именно написан uses, и что из него сумела распарсить IDE; ну и может от версии IDE ещё.

Если IDE добавляет в конец - поставить эту конструкцию в конец тогда. Но судя по сообщению ТС - среда добавляет в начало.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110279
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
Но судя по сообщению ТС - среда добавляет в начало.
Судя по сообщению ТС среда вообще не видит секцию uses и добавляет свою
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]