Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лекция 28 5.html

Работа добавлена на сайт samzan.net: 2016-01-17

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 21.5.2024

 . . . . . . . .              секция инициализации;

End.

    Правила записи разделов DLL- библиотеки такие же, как и в случае программы на ТР.

    После раздела модулей могут располагаться разделы описания типов, констант, переменных. Например, если в списке формальных параметров подпрограммы есть массив, то необходимо в библиотеке предусмотреть раздел Type и объявить в нем идентификатор типа массива.

    Раздел экспортирования предназначен для указания подпрограмм, которые можно передавать в другие программы. Из DLL- библиотеки можно экспортировать только подпрограммы, имена которых указаны в разделе Exports. Подпрограммы, имена которых не указаны в разделе Exports, можно использовать только внутри DLL-библиотеки.

   Секция инициализации аналогична такой же секции модуля и выполняется один раз при загрузке библиотеки. Эта секция начинается с зарезервированного слова Begin и заканчивается словом End., в ней можно записывать операторы, выполняющие инициализацию параметров, открытие файлов и т.п.

   Раздел Exports записывается в виде

        Exports  объявление 1, объявление 2, . . . . объявление n ;

где объявление Х - задает характеристики конкретной экспортируемой подпрограммы. Есть несколько способов задания объявления.

1 способ. Объявление задается именем подпрограммы, например,

                                             Exports   Sum;

2 способ. Объявление задается именем и номером (с помощью директивы Index).

Пример.        Exports   Sum Index 1,  Mult  Index 2;

Этот способ является самым быстрым по вызову.

                                    5.15.1.  Создание DLL- библиотеки.

В Delphy имеются специальные средства для создания DLL библиотек.

Пример. Создадим DLL библиотеку содержащую две процедуры:

MX - определение максимального числа из V1 иV2;

PFY2 - вычисление значения функции У=А*Х*Х.

1. Выполнить   команды File \ New -   появится окно NewItem.

Выделим пиктограмму DLL и щелкнем по кнопке ОК.

Откроется окно с заготовкой DLL.

library Project1;

                    {   Комментарии }

uses  SysUtils,  Classes;

{$R *.RES}

begin

end.

  1.  Удалим комментарии и добавим в заготовку после директивы компилятора {$R *.RES} процедуры max и Pfy, а также укажем в разделе экспортирования объявление подпрограмм спомощью имени и номера. В результате получится текст:

Library Project1;

               uses Sysutils,classes;

{$R *.RES}

               Procedure max(v1,v2:Extended;                                        

                               Var Z:Extended);

               begin

                     If v1 > v2 Then Z:=v1

                                 Else Z:=v2;

               end;

               Procedure Pfy(a,x:Extended;

                        Var Fy:Extended);

               begin

                      Fy:=a*Sqr(x);

               end;

                   Exports       Max  index  1,

                                        Pfy   index  2;

                 begin

                End.

  1.  Сохраним проект под именем MyDLL.dll в отдельной папке.

Выполнить пункт меню Project \ Build Project. Выполнить компиляцию, исправить ошибки. При успешной компиляции в нашей папке появится файл  MyDLL.dll.

                                          5.15.2. Вызов Dll.

    Под вызовом библиотеки понимается использование имеющихся в ней подрпограмм (процедур и функций) и ресурсов. При вызове библиотеки программист не имеет возможности указать ее размещение, поэтому библиотека должна быть расположена в папке, в которой Windows может обнаружить ее автоматически. Такими папками являются: корневая папка Windows, ее папки System и System, а также папка из которой запущено приложение.

   Различают два способа вызова подпрограмм из библиотеки: - статический и динамический. Заметим, что в данном случае эти термины используются в несколько ином смысле, чем ранее. В обоих способах вызова библиотека загружается в оперативную память во время выполнения приложения, то есть динамически.

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

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

   Рассмотрим статическое импортирование.

    При статическом импортировании в секции implementation модуля формы задается заголовок импортируемой подпрограммы с директивой External. При вызове подпрограммы DLL библиотеки возможны два варианта:

а) вызов подпрограммы из библиотеки по имени, в этом случае после слова  External  записывается только имя библиотеки, например

                Interface

 Procedure Pfy(a,x:Extended;  Var Fy:Extended);External  ‘MyDLL.dll’;

б) вызов подпрограммы по ее номеру. Все подпрограммы в библиотеке пронумерованы. И по номеру можно вызвать соответствующую подпрограмму. Для этого после директивы External и имени библиотеки записывается директива Index и номер подпрограммы, например, так

 Procedure Pfy(a,x:Extended; Var Fy:Extended);External ‘MyDLL.dll’Index 3;

Это самый быстрый вызов. При статическом импортировании сама библиотека вызывается операционной системой при первом к ней обращении и выгружается, когда потребность в ней отпадает (когда программа прекратит свою работу, если только библиотека не используется в это время другими программами). Таким образом, в данном случае заботиться о загрузке и выгрузке библиотеки не требуется.

                                  5.16. Диалоговые окна

     Все программные сообщения можно разделить на: информационные сообщения (например,"Загрузка данных с дискеты завершена") , предупреждающие сообщения (например,"Файл модифицирован. Сохранить?"), сообщения об ошибке ("Файл данных программы не найден. Требуется переустановка программы"). Эта разбивка на типы сообщений является, естественно, не полной. В Delphi имеются специальные средства для формирования и вывода на экран монитора различных сообщений.

Процедура ShowMessage.

  Форма записи:

                                  ShowMessage(Sk);

где Sk – константа или переменная строкового типа  (String). На этой команде работа программы приостанавливается и на экране появляется окно с текстом сообщения подобное окну, показанному на рис.5.28.1.

Рис.5.28.1.

    Пока пользователь не щелкнет на кнопке Ok, работа с приложением становится невозможной, т.е. это окно открывается модально. Как вы заметили, заголовок окна простой. Он содержит в себе текст, который отображен на панели задач. По умолчанию имеет название запускаемого EXE файла.

  Пример.

                               If X<0 Then Begin

                                             ShowMessage ('Аргумент < 0');

                                              Exit;

                                            End;

ФункцияMessageDlg.

      ФункцияMessageDlg обладает  более широкими возможностями. Кроме сообщения она позволяет указать тип сообщения и отобразить в окне сообщения несколько кнопок.

Форма записи: MessageDlg(<сообщение>, <тип>, <кнопки>, <справка>);

Здесь: <сообщение>- строковая константа, отображается в окне.

    <тип>- тип сообщения - может принимать несколько значений. От этих значений зависит содержимое заголовка и иконка в левом верхнем углу окна. Возможные значения типа сообщений приведены в таблице 5.28.1

   Таблица 5.28.1.

    Тип сообщения

                 Описание

Вид окна

mtWarning

Предупреждение.

Можно использовать в предупреждающих сообщениях. Например, "Вы действительно желаете удалить все данные с диска С:"

mtError

Ошибка.

Обычное окошко вывода сообщения об ошибки. Например, аргумент Ln меньше нуля.

mtInformation

Информация.

Какая-нибудь информация. Например, "Не найден файл настройки, создается заново"

mtConfirmation

Запрос\ подтверждение Запрос на сохранение перед выходом, спрашивает перед удалением параметра, и т.п.

mtCustom

Без значка.

Это сообщение полностью аналогично ShowMessage

Элемент <кнопки> - содержит в себе массив кнопок, которые можно показывать в сообщении.

кнопка

* mbYes

* mbNo

* mbOK

* mbCancel

* mbAbort

текст на кнопке

Yes

No

Ok

Cancel

Abort

Еще есть кнопки: * mbHelp, * mbRetry, * mbIgnore, * mbAll.

   Массив кнопок задается в квадратных скобках []. Например, нам надо задать три кнопки Yes, No, Cancel. Это делается так [mbYes, mbNo, mbCancel].

Элемент <справка> содержит номер страницы справочной системы. Если справка отсутствует, то указывается номер 0.

MessageDLG является функцией. Она возвращает результат нажатой кнопки.

Рассмотрим пример. Пусть нам надо спросить у пользователя о дальнейших действиях перед выходом из программы.

1. Сохранить файл.

2. Не сохранять файл.

3. Продолжить редактирование.

Var R:Word; // переменная, в которой хранится результат

...R:=MessageDLG ('Сохранить файл перед выходом?', mtConfirmation, [mbYes, mbNo, mbCancel], 0);

if R=mrYes then // если нажата кнопка Yes

begin

// сохраняем файл и завершаем программу

end;

if R=mrNo then // если нажата кнопка No

begin

// завершаем работу программы без сохранения

end;

if R=mrCancel then // если нажата кнопка Cancel

begin

// продолжаем работу без сохранения

end;

MessageDLG - это очень гибкая функция, у нее есть много достоинств, но есть и один существенный недостаток - англоязычный интерфейс.

Следующая процедура использует системные сообщения пользователю вашей операционной системы. Т.е., если у вас установлена, например немецкая версия windows, то кнопки будут иметь соответствующие названия на немецком языке.

MessageBox(Handle,ТЕКСТ_СООБЩЕНИЯ,ЗАГОЛОВОК_ОКНА,ТИП_СООБЩЕНИЯ);

Первый параметр - указатель на владельца окна сообщения. Этот параметр вам пока ничего не говорит, устанавливайте его в Handle (это ссылка на окно, откуда это сообщение вызывается).

ТЕКСТ_СООБЩЕНИЯ и ЗАГОЛОВОК_ОКНА - имеют тип PChar, поэтому, во избежание недоразумений и появления неизвестного рода ошибок, выдаваемых компилятором, меняйте тип String в PChar "на ходу". Например:

MessageBox(Handle,PChar('ТЕКСТ_СООБЩЕНИЯ'),PChar('ЗАГОЛОВОК_ОКНА'),...

Это был перевод из одного типа строковой величины в другой тип.

Теперь поговорим о немного сложном параметре ТИП_СООБЩЕНИЯ. Он включает в себя иконку и кнопки.

Кнопки:

* MB_ABORTRETRYIGNORE - кнопки "Прервать", "Повторить", "Пропустить".

* MB_OK - кнопка "Ok".

* MB_OKCANCEL - кнопки "Ok", "Отмена".

* MB_RETRYCANCEL - кнопки "Повторить" и "Отмена".

* MB_YESNO - две кнопки "Да" и "Нет".

* MB_YESNOCANCEL - кнопки "Да", "Нет", "Отмена".

Для того, чтобы отобразить иконку, нужно указать:

* MB_ICONEXCLAMATION

* MB_ICONWARNING

* MB_ICONINFORMATION

* MB_ICONASTERISK

* MB_ICONQUESTION

* MB_ICONSTOP

* MB_ICONERROR

* MB_ICONHAND

Если у вас в сообщении несколько кнопок, а по умолчанию нужно выбрать определенную, то такая кнопка задается:

MB_DEFBUTTON1 - где последняя цифра указывает номер кнопки, выбранной по умолчанию. Это свойство может быть полезным, например, чтобы обезопасить данные от случайного уничтожения. "Удалить файл?". Две кнопки - "Да", "Нет". По умолчанию мы программно выбираем вторую кнопку. Если пользователь сразу нажал на Enter, не осознавая своего поступка, можно сказать по привычке, то ничего страшного не произойдет.

Как же указать параметры иконки, кнопок, кнопки по умолчанию в одном параметре ТИП_СООБЩЕНИЯ. Очень просто. Простым знаком +

Например:

MessageBox(Handle,PChar('Выйти из программы?'),PChar('Мое сообщение'),MB_ICONINFORMATION+MB_OKCANCEL+MB_DEFBUTTON2);

Выглядит это в программе так, как показано на рисунке:

Итак, MessageBox можно считать идеальной командой вывода сообщения пользователю, которая будет совместима со всеми языковыми версиями windows.

Контроль нажатия на кнопку в MessageBox мы осуществляем аналогично MessageDLG, только возвращаемая величина может принимать следующие значение (соответственно нажатой кнопке):

* IDABORT

* IDCANCEL

* IDIGNORE

* IDNO

* IDOK

* IDRETRY

* IDYES




1. 191 1 гг ПА Столыпин
2. Размышления о гуманной педагогике
3. Практикум 21 Интегрирование Цель работы ~ научиться использовать средства пакета MtLb для символьного выч
4. pl
5. Некоторые металлы способны образовывать сварные соединения при пластическом деформировании с нагревом до
6. темах Минимум потенциальной энергии при равновесии Работа силы тяжести как было пояснено в 22 не зависит
7. Оценка фондовой составляющей кризиса новой экономики в начале XXI в
8. КОНТРОЛЬНАЯ РАБОТА ПО ТРУДОВОМУ ПРАВУ
9. гендер которое означает психологический пол
10. Водные ресурсы Кагульского района
11. в зависимости от места обнаружения брака внутренний ~ обнаруженный до отправки; внешний
12. Специфика функционирования повтора в диалогическом дискурсе
13. Початкова освіта Бериславського педагогічного коледжу Повара Олександра Сергійовича За переддиплом
14. Поощрения за труд и дисциплинарные взыскания
15. А. Погорельский «Чёрная курица или Подземные жители».html
16. на тему среди детей Сагаалган ~ светлый праздник 1
17.  ccepts you s you re- good friend is someone who does not try to be somebody tht he is not nd ccepts you s you re
18. pB Несовместные события ~ такие события появление одного из которых исключает возможность появления дру
19. Вища школа економіки і менеджменту
20. Косово 1999