powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
60 сообщений из 60, показаны все 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
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110282
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GunSmoker
Обходное решение в лоб:
Код: pascal
1.
2.
3.
4.
5.
uses
  {$IFDEF NeverDefineThisSymbol}
  Windows,
  {$ENDIF}
  Windows, ... ваши реальные модули и условия.



Тогда автоматически Delphi будет добавлять модули под NeverDefineThisSymbol, который никогда не определён, и, следовательно, эффекта иметь не будет.


Огромное спасибо. Ваше решение с небольшими модификациями заработало (ниже указано - как оно у меня заработало). Удалось обмануть среду Delphi - чтобы она добавляла свой мусор в определенное место и чтобы он не влиял на компиляцию. Визуальный редактор форм при этом тоже работает и не ругается. Велосипед, конечно в какой-то мере - но колеса почти идеально круглые - по крайней мере не хуже, чем были в Delphi 2007.



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
UNIT Unit1;
INTERFACE


USES
{$IF not Defined(NeverDefineThisSymbol)}
Windows
{$ELSE}
//секция для автодобавляемого мусора
Windows, System.Classes, Vcl.Controls, Vcl.StdCtrls
{$IFEND}


//пример самописной сложной фигни - можно и более сложное что-нибудь нагородить
, Winapi.Messages, System.SysUtils, System.Variants
{$IF not Declared(System.Classes)},System.Classes{$IFEND}
, Vcl.Graphics
{$IF not Declared(Vcl.Controls)},Vcl.Controls{$IFEND}
, Vcl.Forms, Vcl.Dialogs
,Vcl.StdCtrls
{$IF Defined(tratata)}
{$I USES.inc}
{$IFEND};
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110286
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_А что вы такое написали, что для вас критичен *порядок* модулей?

Прочитай её предыдущие топики. Она половину VCL отхакала, поэтому если её
костыли не окажутся последними - работать не будут.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110287
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
GunSmoker
Но судя по сообщению ТС - среда добавляет в начало.
Судя по сообщению ТС среда вообще не видит секцию uses и добавляет свою


Да - так именно и было. А если USES подключать из внешнего файла - не работал редактор форм. GunSmoker подсказал - спасибо ему - дело видимо не только в слове USES - а еще в слове Windows - видимо среда разработки ищет это слово при вставке модулей - а теперь находит, куда надо вставлять.

Так как среда всё равно тупая и не понимает, куда надо модули вставлять - логичным оказывается решение воспользоваться её тупостью и сделать чтобы она вставляла модули в то место, где они не мешают компиляции.

От самой среды по сути нужен визуальный редактор форм, а от программного кода - чтобы он компилировался - теперь оба условия выполняются.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110288
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
GunSmoker
Delphi будет добавлять модули под NeverDefineThisSymbol,
Точно? Модули всегда добавлялись в конец секции uses


В том и дело, что раньше добавлялись ПЕРЕД моей секцией USES. А теперь добавляются нормально.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110293
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

_Vasilisk_А что вы такое написали, что для вас критичен *порядок* модулей?

Прочитай её предыдущие топики. Она половину VCL отхакала, поэтому если её
костыли не окажутся последними - работать не будут.


Похоже, костыли уже одни из последних. Приложение на 400 тысяч строк кода, уже год пытаюсь перенести с Delphi 2007 на XE-8. Уже за год на XE-8 всё нормально компилируется и отлажено, все баги устранены почти. Остается один шаг - вообще уйти с Delphi 2007 и полностью перейти на XE8. При этом, разумеется, кучи хлама в проекте на XE-8 совсем не хочется притом что в Delphi 2007 всё в порядке было.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110301
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Остается один шаг - вообще уйти с Delphi 2007 и полностью перейти на XE8.

Вы так и не познакомились с системами контроля версий и их ветками. Ну да, Вам
же некогда, кодировать надо...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110303
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Наталья87
где такой набор модулей в таком порядке нужен
Я стесняюсь спросить. А что вы такое написали, что для вас критичен порядок модулей? Тем более системных.


Например, поведение приложения при нажатии кнопки "Свернуть" (обсуждали уже здесь недавно). Притом, что все формы у меня модальные. Нужно чтобы при нажатии "Свернуть" в любом окне программы - сворачивалась программа целиком, а потом точно также аккуратно разворачивалась.

Из прочего - цветные кнопки (наследники TButton), цветные меню, свои модули - например, по работе с файлами, с MD5, работа с Excel и прочее.

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

USES {$I All.inc}, ...;

И так уже более 400 тысяч строк кода - еще более 200 копий одинаковых модулей там не хватало чтобы окончательно запутаться ...

То есть это не говнокод в его понимании - наоборот, стремление всё упорядочить чтобы небыло лишних копий кода, а возможно, какое-то нестандартное применение.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110308
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87Остается один шаг - вообще уйти с Delphi 2007 и полностью перейти на XE8.

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


Вести 2 версии параллельно на D2007 и на D XE8? Нет, спасибо. И без этого уже задолбаюсь. Как получится привести код в нормальное состояние на XE8 - просто уйду с 2007 окончательно и всё. Пока все еще веду на 2007 - но для пользователей код компилирую на XE8 (код, написанный для 2007 и преобразовываемый AutoIt-ом для XE-8 для компиляции).
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110311
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87То есть это не говнокод в его понимании

Не хочу Вас расстраивать, но это именно он. Причём в терминальной стадии.

А ведь всего-то было достаточно при кодировании "цветной кнопки" назвать её
чуть-чуть иначе, чем TButton и прописать нужные модули в секцию зависимостей её
пакета...

PS: О том чтобы не бороться с ветряными мельницами и не пытаться раскрашивать
системную кнопку, которая к этому не приспособлена я уже молчу.

Наталья87хочется написать что-то подобное

USES {$I All.inc}, ...;
А нормальные люди не борются со средой и позволяют ей автоматически "написать что-то подобное" при первом броске своей кнопки на форму.

Наталья87Вести 2 версии параллельно на D2007 и на D XE8? Нет, спасибо. И без этого уже задолбаюсь.
Вы таки не поверите, но задолбались Вы именно от желания НЕ вести две версии параллельно. Уже упомянутые СКВ облегчают именно этот процесс до тривиального.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110312
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87То есть это не говнокод в его понимании

А ведь всего-то было достаточно при кодировании "цветной кнопки" назвать её
чуть-чуть иначе, чем TButton и прописать нужные модули в секцию зависимостей её
пакета...


Ну допустим, назовём её ColorButton.

А как во все модули форм прописывать? Как дура и буду бегать по всем формам, дописывать везде в секцию USES
, ColorButton
?

А если ColorMenu добавится - что - снова бегать по модулям и добавлять? Если приложение было сделано с обычными кнопками, а потом заказчик захотел цветные? А потом захотел, например, цветные меню.

Какое тут еще может быть решение кроме модулей, подключаемых списком ко всем формам приложения?
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110313
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
А как во все модули форм прописывать? Как дура и буду бегать по всем формам, дописывать везде в секцию USES
, ColorButton
?

Внезапно: бросаете на форму свой ColorButton и среда САМА прописывает его в секцию USES. Причём только в те формы, где он реально нужен.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110314
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

PS: О том чтобы не бороться с ветряными мельницами и не пытаться раскрашивать
системную кнопку, которая к этому не приспособлена я уже молчу.


А что делать если весь проект написан с кучей TButton - например? Переделывать весь проект на основе другого компонента ради того, чтобы кнопки сделать цветными (а потом еще отлавливать баги)? И опять бегать по всем модулям?
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110315
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Наталья87
А как во все модули форм прописывать? Как дура и буду бегать по всем формам, дописывать везде в секцию USES
, ColorButton
?

Внезапно: бросаете на форму свой ColorButton и среда САМА прописывает его в секцию USES. Причём только в те формы, где он реально нужен.


А что делать со старыми формами? Где TButton, а не TColorButton? А этих форм сотни, т. к. в проекте более 400 тысяч строк кода?
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110316
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87А что делать со старыми формами? Где TButton, а не TColorButton? А этих форм
сотни, т. к. в проекте более 400 тысяч строк кода?

Поверьте, открыть их все и бросить TColorButton на каждую - заняло бы гораздо
меньше времени чем год хаков.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110319
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87А что делать со старыми формами? Где TButton, а не TColorButton? А этих форм
сотни, т. к. в проекте более 400 тысяч строк кода?

Поверьте, открыть их все и бросить TColorButton на каждую - заняло бы гораздо
меньше времени чем год хаков.


Никакого года на хаки не потрачено. Проект продолжает вестись и развиваться на базе 2007. Просто время от времени компилируется на XE8, сборка на XE8 уже почти не имеет глюков и
практически не хуже, чем на 2007. Надеюсь, перейду полностью на XE8 в скором времени, 2007 роднее конечно, но к XE8 тоже уже почти привыкла. Торопиться не стоит - надо сначала убедиться, что действительно багов серьезных нет - может, еще полгода подождать что скажут пользователи. А потом в очередной раз AutoIt-ом преобразую проект из D2007 на XE-8 и от 2007 уйду насовсем без всяких систем контроля версий. А то продолжать вести проект на 2007 и компилировать на XE8 это означает не использовать новые возможности, что появились в XE-8.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110321
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну-ну. До встречи ещё через год.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110330
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оооо, я не зря читал этот тред!
автор
Код: pascal
1.
{$IF not Declared(System.Classes)},System.Classes{$IFEND}


Не знал, что IF Declared работает с юнитами. Не знаю, правда, как это применять, но забавно.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110342
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Например, поведение приложения при нажатии кнопки "Свернуть" (обсуждали уже здесь недавно). Притом, что все формы у меня модальные. Нужно чтобы при нажатии "Свернуть" в любом окне программы - сворачивалась программа целиком, а потом точно также аккуратно разворачивалась.

Из прочего - цветные кнопки (наследники TButton), цветные меню,
Для этого всего придумали наследование
Наталья87
А что делать со старыми формами? Где TButton, а не TColorButton? А этих форм сотни, т. к. в проекте более 400 тысяч строк кода?
Запоминайте
1. Создаете новый пакет.
2. В этом пакете создаете новый компонент
Код: pascal
1.
TColorButton = class(TButton)


3. Инсталлируете этот пакет
4. По всем pas и dfm файлов выполняете замену TButton -> TColorButton
5. Все.

Работы часа на два, если с перерывом на кофе
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110346
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_

Работы часа на два, если с перерывом на кофе


Для Программиста - пожалуй, да.

А для быдлокодера - пожалуй, пару недель займёт :( зато мой проект из 400 000 строк на чистой D2007 компилируется. Думаю, в итоге приду к Вашему решению но уже после перехода на XE-8, в D2007 незачем уже огороды городить, надо с нее скорее уходить, 2021 год на дворе.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110352
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть и другой способ, без всяких инсталяций.
Код: pascal
1.
2.
3.
unit MyButton;
type
TButton = class(TColorButton)



И во всех модулях где нужно заменить TButton на TColorButton дописываем ВНАЧАЛО uses MyButton
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110358
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrИ во всех модулях где нужно заменить TButton на TColorButton дописываем ВНАЧАЛО
uses MyButton

....а потом начинаем топик "как запретить Delphi вставлять модули в секцию USES",
всё логично, да...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110363
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наталья87
...но уже после перехода на XE-8, в D2007 незачем уже огороды городить, надо с нее скорее уходить, 2021 год на дворе.

А на Delphi 11 - в 2031 году переходить, ага.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110366
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Для Программиста - пожалуй, да.
А для быдлокодера - пожалуй, пару недель займёт
Какой пункт у вас вызывает затруднения?
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110369
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
дописываем ВНАЧАЛО uses MyButton
Все таки в КОНЕЦ. Но тут весь топик о том, как уйти от строгого порядка модулей в uses
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110371
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие-то бессмысленные метания. Если цель уйти на XE8 и там уже всё собирается, то докинуть пустых юнитов в старый проект, чтобы и он собирался и на этом всё. Другое дело что ни это, ни любые define не помогут если в dfm новые свойства пропишутся или ещё что такое. Поэтому надо уже перейти, а старый забыть.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110374
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael Longneck
Какие-то бессмысленные метания. Если цель уйти на XE8 и там уже всё собирается, то докинуть пустых юнитов в старый проект, чтобы и он собирался и на этом всё. Другое дело что ни это, ни любые define не помогут если в dfm новые свойства пропишутся или ещё что такое. Поэтому надо уже перейти, а старый забыть.

У этого самурая нет цели... только желание избавиться от дублирования "мусора" в секции uses
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110378
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael LongneckПоэтому надо уже перейти, а старый забыть.

Повторяю за аффтаршей медленно: старый проект постоянно допиливается, а СКВ,
которая могла бы облегчить слияние изменений, она ниасилила.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110395
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и допиливать в его в XE8, или он допиливается ещё 5 человеками на 2007, а на XE8 переходит только автор топика?
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110468
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael Longneck
Какие-то бессмысленные метания. Если цель уйти на XE8 и там уже всё собирается, то докинуть пустых юнитов в старый проект, чтобы и он собирался и на этом всё. Другое дело что ни это, ни любые define не помогут если в dfm новые свойства пропишутся или ещё что такое. Поэтому надо уже перейти, а старый забыть.


Перейти на XE-8 полностью теперь не проблема благодаря совету GunSmoker-а (можно переходить хоть прямо сейчас) - для этого не придется копировать одинаковые списки в каждый unit, а всё будет почти также красиво, как на D2007. Но думаю, еще полгодика лучше все же подожду - посмотрим, что юзеры скажут, баги поисправлять надо. А может полгода нет смысла тянуть и три месяца хватит ...
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110470
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
Наталья87
...но уже после перехода на XE-8, в D2007 незачем уже огороды городить, надо с нее скорее уходить, 2021 год на дворе.

А на Delphi 11 - в 2031 году переходить, ага.


Для этого D11 неплохо бы сначала купить. А цены у них ну вы сами понимаете. Перейти с XE8 на XE10 вообще не проблема, времени займет пять минут в отличие от перехода с D2007 на XE8. Да и XE8 в принципе то неплохая среда, довольно современная.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110472
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Michael LongneckПоэтому надо уже перейти, а старый забыть.

Повторяю за аффтаршей медленно: старый проект постоянно допиливается, а СКВ,
которая могла бы облегчить слияние изменений, она ниасилила.


Да представляю примерно, что такое СКВ. Но не хочется с ними огород городить тем более переход уже на 99% сделан. Вносить доработки параллельно в 2 проекта на D2007 и на XE8 это ад и СКВ разве что облегчит этот процесс но лучше просто не вести 2 проекта параллельно тогда и с СКВ заморачиваться не нужно.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110499
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Наталья87#22393500]
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;



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

А. Вы так вот про что...
Да у меня тут нет никакого такого бреда.
Типа писать в каждом модуле проекта, где такой набор модулей в таком порядке нужен
USES {$I VCL.pas}, ...;

Я пока не понимаю зачем такой инклуд нужен.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110566
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot northener#22393938]
Наталья87
пропущено...


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

А. Вы так вот про что...
Да у меня тут нет никакого такого бреда.
Типа писать в каждом модуле проекта, где такой набор модулей в таком порядке нужен
USES {$I VCL.pas}, ...;

Я пока не понимаю зачем такой инклуд нужен.


Ну захотелось заказчику, чтобы все кнопочки в программе стали зелёными - пожалуйста. Через два дня захотелось чтобы стали красными - правок на 2 минуты. Можно вообще опцию сделать, изменяющую например цвет кнопок во всей программе.

Просто в базовом классе ColorForm (который подключим ко всем формам) прописываем нужные цвета (либо читаем из ini) и они автоматом обновятся во всех формах.
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110661
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
(который подключим ко всем формам)
От которого наследуются все формы
...
Рейтинг: 0 / 0
Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
    #40110706
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Ну захотелось заказчику, чтобы все кнопочки в программе стали зелёными -
пожалуйста. Через два дня захотелось чтобы стали красными - правок на 2 минуты.
Можно вообще опцию сделать, изменяющую например цвет кнопок во всей программе.

Не самые глупые люди в своё время озаботились этим на уровне системы. Потом
пришли молодые энтузизасты и перепилили хорошую идею в "темы".

А заставлять пользователя настраивать желаемую палитру и прочий UX в каждом
приложении отдельно - это линуховый садизм.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запретить Delphi вставлять модули в секцию USES при компиляции и сохранении проекта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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