Ресурсы в DLL
Динамические библиотеки могут содержать не только исполняемый код, проводящий некоторые вычисления, но и ресурсы. Чаще всего бывает необходимо распространять вместе с DLL формы, обеспечивающие работу процедур и функций. Приемы работы с формами в проектах динамических библиотек ничем не отличаются от тех же приемов в проектах обычных приложений.
Единственная особенность заключается в том, что любая форма в DLL должна рассматриваться как создаваемая вручную, а не автоматически. При этом в процедуру, создающую форму, должен быть передан указатель на владельца будущей формы.
Например, процедура showDemoForm из рассматриваемой нами библиотеки DataCheck, выглядит так:
procedure ShowDemoForm(AOwner: TComponent);
begin
DemoForm := TDemoForm.Create(AOwner);
DemoForm.ShowModal;
DemoForm.Free;
end;
Уничтожение формы можно организовать не только в самой процедуре, но и (при неоднократном применении) в другой процедуре или при выгрузке динамической библиотеки.
При вызове этой процедуры из приложения в параметре необходимо указать экземпляр класса приложения:
procedure ShowDemoForm(AOwner: TComponent); external 'DataCtrl.dll';
procedure TMainForm.BitBtnlClick(Sender: TObject);
begin
ShowDemoForm(Application);
end;
Обратите внимание, что в данном случае форма из динамической библиотеки рассматривается операционной системой как отдельная задача, о чем свидетельствует системная панель задач.
Для распространения с приложением можно создавать специальные динамические библиотеки ресурсов, которые используются для локализации приложений. Например, в библиотеку ресурсов можно вынести все строковые константы (сообщения, тексты и т. д.), а с приложением распространять динамическую библиотеку ресурсов, строки в которой соответствуют языковым запросам заказчика.
Создать такую библиотеку можно, использовав Репозиторий Delphi (страница New) для проекта приложения или динамической библиотеки. Мастер создания библиотеки ресурсов проводит разработчика через все этапы создания проекта библиотеки.
Примечание
Для каждого языка необходимо создавать свои варианты форм и новый проект библиотеки ресурсов.
Перед началом создания проекта библиотеки ресурсов необходимо сохранить и откомпилировать базовый проект (для него создается проект локализации), а затем начать новый проект библиотеки ресурсов.
Первый диалог мастера библиотеки ресурсов предоставляет справочную информацию.
Второй — позволяет создать список форм базового проекта, которые войдут в библиотеку (рис. 28.2). При этом можно удалить из списка ненужные формы и добавить необходимые из других проектов.
Рис. 28.2. Диалог мастера библиотеки ресурсов со списком форм, включаемых в проект
После этого в третьем диалоге мастера необходимо выбрать один или несколько языков локализации ресурсов (рис. 28.3). От этого выбора языка зависит расширение откомпилированного файла библиотеки и алгоритм поведения базового проекта при загрузке.
Рис. 28.3. Диалог мастера библиотеки ресурсов со списком доступных языков локализации проекта
Если запускаемое приложение или DLL находит в своей папке одноименный файл с расширением, которое соответствует одной из возможных локализаций и эта локализация применяется в системе, то приложение использует ресурсы из этой библиотеки вместо собственных. Поэтому при определении имени файла библиотеки ресурсов категорически не рекомендуется изменять предложенное мастером имя.
Кроме того, папку с файлом ресурсов можно задать дополнительно. Для этого на следующей странице мастера необходимо указать нужную папку для каждого языкового ресурса или принять предложенную по умолчанию (рис. 28.4).
Затем вы можете добавить к библиотеке ресурсов собственные файлы. Это могут быть ресурсы любого рода, используемые приложением. В окне мастера (рис. 28.5) необходимо выбрать эти файлы.
В последующих диалогах мастера задается способ создания или обновления для каждого языкового ресурса и запускается процесс создания ресурса. При первоначальном создании DLL ресурсы можно только создавать, впоследствии их можно полностью перезаписывать или изменять.
По завершении работы мастера для каждого выбранного языка создается новый проект библиотеки ресурсов. Результат работы мастера выводится в информационном окне (рис. 28.6).
Рис. 28.4. Диалог мастера библиотеки ресурсов со списком папок для ресурсов локализации проекта
Рис. 28.5. Диалог мастера библиотеки ресурсов для включения в проект дополнительных файлов
Рис. 28.6. Окно с информацией о результате создания ресурса
Каждый созданный проект необходимо откомпилировать и включить в состав дистрибутива базового приложения.
1. Электромагнитная волна (в религиозной терминологии релятивизма - "свет") имеет строго постоянную скорость 300 тыс.км/с, абсурдно не отсчитываемую ни от чего. Реально ЭМ-волны имеют разную скорость в веществе (например, ~200 тыс км/с в стекле и ~3 млн. км/с в поверхностных слоях металлов, разную скорость в эфире (см. статью "Температура эфира и красные смещения"), разную скорость для разных частот (см. статью "О скорости ЭМ-волн")
2. В релятивизме "свет" есть мифическое явление само по себе, а не физическая волна, являющаяся волнением определенной физической среды. Релятивистский "свет" - это волнение ничего в ничем. У него нет среды-носителя колебаний.
3. В релятивизме возможны манипуляции со временем (замедление), поэтому там нарушаются основополагающие для любой науки принцип причинности и принцип строгой логичности. В релятивизме при скорости света время останавливается (поэтому в нем абсурдно говорить о частоте фотона). В релятивизме возможны такие насилия над разумом, как утверждение о взаимном превышении возраста близнецов, движущихся с субсветовой скоростью, и прочие издевательства над логикой, присущие любой религии.
4. В гравитационном релятивизме (ОТО) вопреки наблюдаемым фактам утверждается об угловом отклонении ЭМ-волн в пустом пространстве под действием гравитации. Однако астрономам известно, что свет от затменных двойных звезд не подвержен такому отклонению, а те "подтверждающие теорию Эйнштейна факты", которые якобы наблюдались А. Эддингтоном в 1919 году в отношении Солнца, являются фальсификацией. Подробнее читайте в FAQ по эфирной физике.