Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Многомодульные программы в Delphi

Ответить
Настройки темы
Delphi - Многомодульные программы в Delphi

Старожил


Сообщения: 473
Благодарности: 8

Профиль | Отправить PM | Цитировать


Я только начинаю изучать Delphi. Сначала попробовал создать консольную программу. Тут всё просто, в точности как в знакомом мне Паскале. Сейчас разбираюсь как GUI-программы пишутся. Изучаю по книге В. В. Фаронова "Delphi. Программирование на языке высокого уровня". Насколько я понял, когда я создаю графическую форму, вместе с ней создаётся модуль, без модуля форма работать не может. То есть, GUI-программа по-любому будет многомодульной, минимум два модуля в ней будут: Unit1.pas и основная программа Project1.dpr (чтобы не путаться оставляю имена умолчальными). Что произойдёт после компиляции? Оба модуля, скомпилированных в бинарный код, будут по раздельности упакованы в Project1.exe и при запуске его в памяти будут сразу два процесса или всё же код будет один?

А как передавать значения переменных между модулями? Допустим у меня в основной программе вычисляется 36 в степени 3:
Код: Выделить весь код
 	result:=Exp(3*Ln(36));
А в модуле результат выводится путём присваения Caption метки Label1:
Код: Выделить весь код
	procedure TForm1.FormCreate(Sender: TObject);
	begin
		Label1.Caption:=FloatToStr(result);
	end;
Как сделать, чтобы значение переменной result передавалось из основной программы в модуль?

Извините, если глупость спрашиваю, я всего лишь новичок. Дайте правильное направление мысли.

Отправлено: 23:30, 09-03-2011

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата RasKolbas:
Оба модуля, скомпилированных в бинарный код, будут по раздельности упакованы в Project1.exe и при запуске его в памяти будут сразу два процесса или всё же код будет один? »
Будет один код. dpr нужен для начальной инициализации и связывания модулей воедино. В нем так же может исполняться код. Для примера посмотри пример spashscreen в exmples где-нибудь. (Если устанавливал) Объяснение дал поверхностное, на всякий случай спроси у гугла.
Для меж.модульного взаимодействия, пропиши название модуля в uses. Вызов, как при работе с объектом
Unit1.Form1.Label1.Caption := "test"; к примеру.
В основном многомодульные программы появляются в случае многооконных приложений.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 23:51, 09-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 198
Благодарности: 51

Профиль | Отправить PM | Цитировать


Касательно передаваемых данных между модулями.
То что объявлено в интерфейсной части модуля (переменные, функции, константы), будет доступно для всех модулей, которые его импортируют.
Варианты существуют разные, вот один из способов.
Пример.
Unit1
Код: Выделить весь код
...
interface 
function a():double;  // делаем функцию доступной извне
...
implementation
function a():double;  // собственно реализация функции
begin
result:=Exp(3*Ln(36));
end;
...
Unit2
Код: Выделить весь код
...
implementation
procedure TForm1.FormCreate(Sender: TObject); // этот код выполняется во время создания окна
begin
	Label1.Caption:=FloatToStr(Unit1.a());  // вызов функции
end;
...

Отправлено: 19:15, 10-03-2011 | #3


Старожил


Сообщения: 295
Благодарности: 30

Профиль | Отправить PM | Цитировать


Цитата:
А как передавать значения переменных между модулями?
Ничего сложного. Для этого можно объявить глобальные переменные внутри какого-либо модуля, а в других модулях, которые будут обращаться к этим переменным, прописать название этого модуля в секции Uses. В проектах посложнее я специально создаю отдельный модуль только для общих переменных и методов. Но при этом следует следить, чтобы имена этих глобальных переменных не совпадали с именами переменных и методов в других модулях. В этом случае обращаться к такой переменной из другого модуля можно просто по имени, без указания модуля-родителя.

Кстати, ни в коем случае не используйте имя result в качестве имени переменной, ибо это слово зарезервировано и в функциях присваивает значение переменной, которая будет возвращаться в качестве результата работы функции.

Отправлено: 20:03, 10-03-2011 | #4


Старожил


Сообщения: 473
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата lxa85:
Для примера посмотри пример spashscreen в exmples »
Нету

Отправлено: 20:28, 10-03-2011 | #5


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


RasKolbas, ЕМНИП было в Delphi 6. Сейчас развернуть среду программирования пока некуда, как появится возможность, скину пример.

Отправлено: 20:47, 10-03-2011 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Многомодульные программы в Delphi

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Программы Adobe в 2010 будут более уязвимы, чем программы Microsoft OSZone News Новости информационных технологий 0 30-12-2009 20:30
Delphi - Delphi | UpperCase на Delphi 7 Cognolio Программирование и базы данных 3 26-01-2006 15:42
Delphi - Программы на Delphi 5 и ресурсы User в Win-98 ShaRP Программирование и базы данных 1 17-10-2005 10:01
Delphi - Delphi, WinAPI | Корректное завершение программы fossil Программирование и базы данных 6 10-08-2005 14:52
Delphi - Delphi. Как кликнуть из программы по ссылке в открытом IE? IkaMazini Программирование и базы данных 2 07-10-2004 12:53




 
Переход