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



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

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

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

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


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


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

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

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

...
Рейтинг: 0 / 0
09.11.2021, 02:14
    #40110180
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
Слишком разный список модулей у меня (а также последовательностей их вызова) для D2007 и для XE8 поэтому сложно от этих IFDEF и {$I } в секции USES избавиться. Буду пробовать что то с alias-ами но тут тоже все не совсем очевидно. А пока пусть будет это решение с квадратными колесами и чтобы проект компилировался в обоих средах (причем в D2007 будет все как прежде, ничего не изменится, а в XE8 будут требоваться ухищрения). Если бы удалось запретить среде XE-8 разработки что-то добавлять в USES, понять как можно пакетно добавлять несколько модулей в USES - цены бы ей небыло можно было бы гораздо быстрее на нее перейти совсем ...
...
Рейтинг: 0 / 0
09.11.2021, 02:38
    #40110181
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
Странно слышать такое, когда у меня уже более четверти века нормально работает такая секция 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
09.11.2021, 07:57
    #40110194
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
Наталья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
09.11.2021, 10:09
    #40110210
Michael Longneck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
Нельзя толком в редактируемых формах что-то с uses сделать, всегда будет что-то да нарушаться. Если не редактировать - то можно дефайнами обойтись
...
Рейтинг: 0 / 0
09.11.2021, 10:31
    #40110217
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
RAD до сих пор не может нормально обрабатывать $IF конструкции в режиме кода. Чистые $IFDEF - нормально. Даже если сделать {$IF Foo} {$DEFINE Bar} и потом {$IFDEF Bar} - тоже не прожует.

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

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


Проблема в том, что {$I } тоже плохо обрабатывает в секции USES, а мне нужно в каждую форму подключить одинаковый набор модулей в строго определенном порядке.
...
Рейтинг: 0 / 0
09.11.2021, 10:48
    #40110222
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
Нет, мой велосипед с квадратными колё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
09.11.2021, 10:56
    #40110229
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
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
09.11.2021, 11:01
    #40110231
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
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
09.11.2021, 11:22
    #40110241
swame2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
Наталья87,
Я в какой-то момент, при необходимости одновременной работы в 2 версиях, делал пустые модули с тем же именем, что и автоматически добавляемые файлы, и подключал их с дефайном более ранней версии в dpr. В моем случае это были 2 модуля.
...
Рейтинг: 0 / 0
09.11.2021, 11:24
    #40110244
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
swame2,

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



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


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

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


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