Использование в Delphi подсказок

В операционной системе Windows при наведении указателя мыши на каком-либо значке всплывает подсказка. Наличие подсказки помогает конечному пользователю разобраться с функционалом приложения.

Разместим на форме компонент Edit и в свойстве Hint напишем "Это наш компонент, мы сюда можем все написать". Свойство ShowHint устанавливаем в TRUE. Запустим проект клавишей F9. Задержим на мгновение мышь над компонентом Edit и увидим нашу подсказку на фоне желтого цвета, как на рисунке.

Использование в Delphi подсказок - student2.ru А как сделать фон подсказок другой,
спросите Вы, все очень просто. Для этого разберем следующий пример.

Расположим Компоненты следующим образом, как на рисунке. Свойству формы ShowHint присвоим TRUE. Проследим, чтобы у всех компонентов свойство ParentShowHint было бы TRUE.

Теперь для каждого компонента напишем подсказку типа "Это компонент Edit" (для каждого компонента подсказка должна быть своей). Двойным щелчком на форме зайдем в обработчик формы Create и внесем туда следующие строки :

procedure TForm1.FormCreate (Sender: TObject);

Использование в Delphi подсказок - student2.ru begin

Button1.Hint := 'Первая строка' + #13 + 'Вторая строка' + #13 + 'Третья строка';

Application.HintColor := clGrayText;

Application.HintPause := 250;

Application.HintHidePause := 5000;

end;

Первая строка задает кнопке Button1 новую подсказку, если до этого была задана подсказка в Инспекторе Объектов, то она игнорируется. Символ #13 разбивает строку подсказки на несколько "этажей". Свойство HintColor задает фон подсказок. Свойство HintPause - время до показа подсказки в миллисекундах (где 1000 - одна секунда), а свойство HintHidePause время показа подсказки.

Лекция № 20. Создание заставки, информационных окон.

Создание заставки.

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

Рассмотрим простой способ создания окна-заставки.

Для начала необходимо подготовить само изображение, которое Вы хотите видеть в качестве заставки. В качестве примера возьмем изображение из Borland Delphi 5.

Итак, порядок действий следующий:

1. Создаем новую форму File > New > Form – Delphi for Win322.

2. Для удобства назовем ее IntroForm и зададим свойству BorderStyle значение bsNone (Исчезнут заголовок и рамка формы), свойству Position значение poDesktopCenter (окно будет появляться по центру рабочего стола).

3. Поместим на форму компонент TImage (вкладка Additional) и загрузим наше изображение с помощью свойства Picture.

4. Поместим на форму компонент TTimer (вкладка System), установим его свойству Interval значение равное 3000 (3 секунды), а в обработчике событий OnTimer запишем:

Timer1.Enabled := false;

5. Далее открываем файл проекта: Project > View Source и вносим изменения согласно примера ниже:

program Project1;

uses

Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {IntroForm};

{$R *.res}

begin
Application.Initialize;
IntroForm := TIntroForm.Create(Application);
IntroForm.Show;
IntroForm.Update;

while IntroForm.Timer1.Enabled do
Application.ProcessMessages;

Application.CreateForm(TForm1, Form1);
IntroForm.Hide;
IntroForm.Free;
Application.Run;
end.

2. Информационное окно в Delphi приложении

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

В помощь программисту имеется шаблон в Delphi или же такое окно можно создать самостоятельно. Для того чтобы воспользоваться шаблоном, нужно выбрать в Хранилище объектов (File -> New -> Other) на странице Forms шаблон формы About box.

Использование в Delphi подсказок - student2.ru В итоге к приложению будет добавлена форма с заголовком About и с именем AboutBox .

Использование в Delphi подсказок - student2.ru На форме будут расположены панель (компонент Panel) и кнопка с заголовком OK для закрытия окна. Для кнопки обработчик события не требуется, так как свойство ModalResult кнопки установлено равным mrOK и поэтому при ее нажатии информационное окно будет закрыто.

Панель (компонент Panel) содержит в себе четыре компонента Label для показа сведений о программном продукте и его разработчиках. Компонент Image предназначен для отображения какого-либо рисунка, например логотип производителя программы.

Заголовок самой формы About при необходимости также можно изменить. Если на форме необходимы будут еще какие-нибудь элементы, то их всегда можно добавить или, при необходимости, ненужные удалить.

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

Пример вызова информационного окна из меню будет таким:

procedure TForm1.N1Click(Sender: TObject);

begin

AboutBox.ShowModal;

end;

Лекция № 21. Понятие и назначение DLL-библиотек. Создание DLL-библиотек. Использование DLL-библиотек.

1. Понятие и назначение DLL-библиотек.

Динамически загружаемая библиотека (от англ. dynamically loadable library) — это библиотека подпрограмм, которая загружается в оперативную память и подключается к использующей программе во время ее работы (а не во время компиляции и сборки). Файлы динамически загружаемых библиотек в среде Windows обычно имеют расширение .dll (от англ. Dynamic-Link Library).

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

Одно из важнейших назначений динамически загружаемых библиотек — это взаимодействие подпрограмм, написанных на разных языках программирования. Например, вы можете свободно использовать в среде Delphi динамически загружаемые библиотеки, разработанные в других системах программирования с помощью языков C и C++. Справедливо и обратное утверждение — динамически загружаемые библиотеки, созданные в среде Delphi, можно подключать к программам на других языках программирования.

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

По структуре исходный текст библиотеки похож на исходный текст программы, за исключением того, что текст библиотеки начинается с ключевого слова library, а не слова program. Например:

library SortLib;

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

Если в теле библиотеки объявлены некоторые процедуры,

procedure BubleSort(var Arr: array of Integer); procedure QuickSort(var Arr: array of Integer);
то это еще не значит, что они автоматически станут доступны для вызова извне. Для того чтобы это разрешить, нужно поместить имена процедур в специальную секцию exports, например: exports BubleSort, QuickSort;

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

Ниже приведен пример исходного текста простейшей динамически загружаемой библиотеки SortLib. Она содержит единственную процедуру BubleSort, сортирующую массив целых чисел методом «пузырька»:

library SortLib; procedure BubleSort(var Arr: array of Integer); var I, J, T: Integer; begin for I := Low(Arr) to High(Arr) - 1 do for J := I + 1 to High(Arr) do if Arr[I] > Arr[J] then begin T := Arr[I]; Arr[I] := Arr[J]; Arr[J] := T; end; end;   exports BubleSort; begin end.

Исходный текст динамически загружаемой библиотеки заканчивается операторным блоком begin...end, в который можно вставить любые операторы для подготовки библиотеки к работе. Эти операторы выполняются во время загрузки библиотеки основной программой. Наша простейшая библиотека SortLib не требует никакой подготовки к работе, поэтому ее операторный блок пустой.

3. Использование DLL-библиотек.

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

Существуют два способа импорта, отличающихся по удобству и гибкости программирования:

§ статический импорт (обеспечивается директивой компилятора external);

§ динамический импорт (обеспечивается функциями LoadLibrary и GetProcAddress).

Статический импорт является более удобным, а динамический — более гибким.

При статическом импорте все действия по загрузке и подключению библиотеки выполняются автоматически операционной системой во время запуска главной программы. Чтобы задействовать статический импорт, достаточно просто объявить в программе процедуры и функции библиотеки как внешние. Это делается с помощью директивы external, например:

procedure BubleSortIntegers(var Arr: array of Integer); stdcall; external 'SortLib.dll';procedure QuickSortIntegers(var Arr: array of Integer); stdcall; external 'SortLib.dll';

После ключевого слова external записывается имя двоичного файла библиотеки в виде константной строки или константного строкового выражения. Вместе с директивой external может использоваться уже известная вам директива name, которая служит для явного указания экспортного имени процедуры в библиотеке. С ее помощью объявления процедур можно переписать по-другому:

procedure BubleSort(var Arr: array of Integer); stdcall; external 'SortLib.dll' name 'BubleSortIntegers'; procedure QuickSort(var Arr: array of Integer); stdcall; external 'SortLib.dll' name 'QuickSortIntegers';

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

Этот способ называется статическим импортом.

Расширение файла, содержащего DLL, может не указываться - по умолчанию подразумеваются файлы *.DLL и *.EXE. Если файл имеет другое расширение (например, как COMPLIB.DCL в Delphi), или если требуется динамическое определение DLL и импортируемых функций (например, Ваша программа работает с различными графическими форматами, и для каждого из них существует отдельная DLL.), то для решения такого рода проблем можно обратиться напрямую к API Windows, используя, так называемый, динамический импорт:

uses

WinTypes, WinProcs, ... ;

type

TMyProc = procedure ;

var

Handle : THandle;

MyImportProc : TMyProc;

begin

Handle:=LoadLibrary('MYDLL');

if Handle>=32 then { if <=32 - error ! }

begin

@MyImportProc:=GetProcAddress(Handle,'MYEXPORTPROC');

if MyImportProc<>nil then

...... {using imported procedure}

end;

FreeLibrary(Handle);

end;

Лекция № 22. Понятие исключительной ситуации. Обработка исключений.

Наши рекомендации