Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603

Delphi каскадное подключение модулей

15.10.2013, 23:15. Показов 5024. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Раньше не обращал внимания на одну деталь подключения модулей.

Например имеем 2 модуля

Delphi
1
2
3
4
5
6
7
8
9
10
11
unit Unit2;
 
interface
 
uses Unit3;
 
const helloWorld2 = helloWorld;
 
implementation
 
end.
Delphi
1
2
3
4
5
6
7
8
9
10
unit Unit3;
 
interface
 
const
  helloWorld = 'hello world';
 
implementation
 
end.
и код формы

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,  Vcl.StdCtrls ,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Unit2;
 
  {...}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(helloWolrd2); // это нормально
  ShowMessage(helloWolrd); // а вот это уже private :( не компилируется
end;
 
end.
то есть не видно типов/констант модуля unit3

хотя он подключен к модулю unit2

Получается что необходимо непосредственно подключить модуль unit3 чтобы стало видно его типы

Может кто нибудь знает как решить проблему такого каскадного подключения модулей, если она вообще имеет решение?

######################################## ######################################## ################

Добавлено через 27 минут
нашел решение.

Каскадного подключения нет, зато есть "разбинение файла исходника на несколько файлов"

например
Unit2.pas
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
unit Unit2;
 
 
interface
 
{$I Unit3.inc}
 
const helloWorld2 = helloWorld;
 
implementation
 
end.
Unit3.inc
Delphi
1
2
3
4
5
6
7
8
const
  helloWorld = 'hello world';
 
type
  mytype = record
    value1 : Integer;
    value2 : Integer;
  end;
то есть вместо того чтобы писать большую простыню кода, берем и весь interface выносим в другой файл
Таким образом: существенно разгружаем код

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,  Vcl.StdCtrls ,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Unit2;
 
{...}
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var z: mytype;
begin
  ShowMessage(helloWorld); // ok
  ShowMessage(helloWorld2);  // ok
end;
 
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2013, 23:15
Ответы с готовыми решениями:

Подключение модулей
Я хотел реализовать words wrapping на StringGrid, и,конечно, нашел через Гугл кучу вариантов. Однако, те из них что используют событие...

Подключение дополнительных модулей и работа с функциями из этих модулей
Опять с вопросами после частично прочитанной книги "C++ Для Чайников". ) Сейчас пытаюсь понять как работает подключение дополнительных...

Каскадное обновление access - Ado - Delphi
Кто подскажет в чем проблема ? Исправьте заодно ! Как сделать что бы при выборе пользователя из первой таблицы отображались только...

9
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
15.10.2013, 23:23
Очень часто вообще все типы и константы востребованные более чем в одном модуле выносятся в отдельный модуль. И подключают его в uses других модулей. А в инклуды часто выносятся опции компилятора.
0
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
15.10.2013, 23:32  [ТС]
Очень часто вообще все типы и константы востребованные более чем в одном модуле выносятся в отдельный модуль
то есть, как бы создается один модуль в котором идет ретрансляция типов из других модулей?

например

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
unit GlobalUnit;
 
interface
 
uses unit1,unit2,unit3 ... unitN;
 
type
  type1 = unit1.type1;
  type2 = unit2.type2;
  type3 = unit3.type3;
 
// и тд
с типами и классами вроде понятно, а что делать ретрансляцией функций и процедур, при таком подходе?

или подход в корне не верный!

Нужно просто создать один *.inc файл

со структурой

Delphi
1
uses  unit1,unit2,unit3 ... unitN;
в котором будут перечислены все требуемые зависимости.

и подключать его как

Delphi
1
{$I GlobalUnit.inc}
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
15.10.2013, 23:35
Цитата Сообщение от noname_club Посмотреть сообщение
то есть, как бы создается один модуль в котором идет ретрансляция типов из других модулей?
Нет. Просто в одном модуле многие объявлены типы и/или константы. Это избавляет от необходимости включать в uses слишком много модулей.
0
angstrom
15.10.2013, 23:36
Цитата Сообщение от noname_club Посмотреть сообщение
идет ретрансляция типов
Конечно нет, в таком модуле и содержится описание констант и нужных типов. А уже любой юнит программы может подключая этот дополнительный модуль получить доступ к ним.
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
15.10.2013, 23:36
Цитата Сообщение от noname_club Посмотреть сообщение
а что делать ретрансляцией функций и процедур
Ретрансляцию оставь работникам радио и телевидения, пока она не стала редекларацией.
0
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
15.10.2013, 23:44  [ТС]
А уже любой юнит программы может подключая этот дополнительный модуль получить доступ к ним
представим что есть скажем некая "библиотека модулей", и хотелось бы, чтобы все что в них описано, было видно

Почему не объединить их 1 *.inc файлом? для подключения в другие внешние модули, не относящиеся к этой библиотеке?

Чтобы не писать каждый раз uses unit1,unit2,unit3 ... unitN;

Добавлено через 31 секунду
Цитата Сообщение от northener Посмотреть сообщение
Ретрансляцию оставь работникам радио и телевидения, пока она не стала редекларацией.
переопределение?

Добавлено через 4 минуты
Это избавляет от необходимости включать в uses слишком много модулей.
нужно чтобы при подключении 1 файла, сразу вся библиотека подключалась автоматически.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
15.10.2013, 23:45
Цитата Сообщение от noname_club Посмотреть сообщение
представим что есть скажем некая "библиотека модулей", и хотелось бы, чтобы все что в них описано, было видно
Почему не объединить их 1 *.inc файлом? для подключения в другие внешние модули, не относящиеся к этой библиотеке?
Чтобы не писать каждый раз uses unit1,unit2,unit3 ... unitN;
Может всё-таки не лениться и составлять список каждый раз из тех модулей, которые действительно нужны?
0
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
15.10.2013, 23:47  [ТС]
Может всё-таки не лениться и составлять список каждый раз из тех модулей, которые действительно нужны?
преимущества, быстрота, компактность программы?

что это даст, это кропотливое подключение только необходимых модулей, при условии что сама библиотека все равно все их использует?
0
angstrom
15.10.2013, 23:50
Цитата Сообщение от noname_club Посмотреть сообщение
...компактность программы?
Сие может обеспечить API, но никак не VCL.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2013, 23:50
Помогаю со студенческими работами здесь

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

Подключение модулей
В общем, с питоном знаком слабо, ровно, как и с джанго, но начальство требует влиться в проект… Стянул с гита проект, установил модули из...

Подключение модулей в Си
Тема старая, каждый раз как то обходил ее, но так до конца и не разобрался, как правильно оформлять библиотеку, точнее вроде бы понял, но...

подключение модулей
Подскажите пожалуйста, можно ли в программу на Си подключить модуль на Python?

подключение модулей
Подскажите пожалуйста, можно в программу на Python подключить модуль на Си


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru