Термин SDI (Single Document
Interface) дословно означает одно-документный интерфейс и описывает приложения,
способные загрузить и использовать одновременно только один документ. Программа
Notepad, приведенная на рис. 1.12, является ярким представителем такого
класса программ.
Следует сказать несколько
слов о термине документ. Приложения становятся все более объекто-центричными,
т.е. они работают с неким центральным объектом, в который могут быть внедрены
внешние объекты. В общем случае эти внешние объекты обрабатываются другим
специализированным приложением. Примером может служить Wordpad (см. рис.
1.5), позволяющий внедрять любые OLE-объекты в свои файлы. Но он остается
при этом SDI-приложением, так как может работать только с одним объектом
(или документом в широком смысле этого слова) Wordpad.
Способность одновременно работать только с одним
объектом не мешает приложению использовать дополнительные формы, например
диалоговые окна, панели инструментов и прочее (на рис. 1.13 показаны панели
инструментов в окне Wordpad). Для реализации этих возможностей в Delphi
просто добавьте форму в ваше приложение и установите ее свойство FormStyle
равным fsSizeToolWin или fsToolWindow.
Еще одним примером может служить сама Delphi — огромное
количество панелей инструментов, меню, разнообразных библиотек компонентов,
взаимодействующих между собой форм... Но в целом она остается SDI-приложением,
так как может загрузить и использовать одновременно только один объект.
Пример
SDI-приложения
Для демонстрации SDI
создадим простую программу просмотра изображения.
.
Построение
интерфейса
Обычно первым шагом построения программы является
создание интерфейса. Не будем отступать от традиций,
и выполним следующие действия.
1. Выберите команду
File/New Application, и появится пустое приложение.
3. Поместите компонент
TPanel в форму. Установите следующие его свойства.
Свойство
Значение
Align
alTop
Caption
-
4. Поместите три компонента
TSpeedButton в TPanel и назовите их spbtnLoad, spbtnStretch и spbtnCenter.
Установите следующие их свойства.
Свойство
Значение
spbtnLoad.Hint
Load
spbtnLoad.Left
8
spbtnLoad.Top
8
spbtnStretch.AllowAlIUp
True
spbtnStretch.Grouplndex
1
spbtnStretch.Hint
Stretch
spbtnStretch.Left
48
spbtnStretch.Top
8
spbtnCenter.AllowAlIUp
True
spbtnCenter.Grouplndex
2
spbtnCenter.Hint
Center
spbtnCenter.Left
80
spbtnCenter.Top
8
5. Поместите еще одну
TPanel в форму и установите следующие
ее свойства.
Свойство
Значение
Align
alClient
Caption
-
6. Поместите компонент
ТImage во вновь созданную ТPanel и установите следующие его свойства.
Свойство
Значение
Align
alClient
Name
imgMain
7. Добавьте в форму
TOpenDialog со следующими свойствами.
Свойство
Значение
Filter
Bitmaps (*.bmp)|*.bmp
Name
opndlgLoad
Options
[ofPathMustExist,ofFileMustExist]
Delphi предоставляет вам множество значков для компонента TSpeedButton; они находятся в каталоге IMAGES\BUTTONS. Для нас вполне подойдут следующие установки свойств Glyph.
Свойство
Значение
spbtnLoad.Glyph
FLDROPEN.BMP
spbtnStretch.Glyph
FONTSIZE.BMP
spbtnCenter.Glyph
PICTURE.BMP
Теперь самое время сохранить проект, выбрав в меню команду File/Save Project As. Сохраните Unit1 как Main, а проект — как EgSDIApp.
Написание
кода
Теперь, после создания
интерфейса, перейдем к написанию исходного текста вашего приложения. Сначала
загрузите изображение следующим образом.
1. Дважды щелкните на компоненте spbtnLoad, и Delphi выведет окно редактора
и автоматически создаст обработчик события OnClick.
2. Введите
код.
if opndlgLoad.Execute then
imgMain.Picture.LoadFromFile(opndlgLoad.FileName);
Метод opndlgLoad.Execute
вызывает стандартное диалоговое окно открытия файла. Если вы выбрали файл
и щелкнули на ОК, метод возвращает True и загружает в свойство FileName
полный путь к имени файла. При щелчке на Cancel или нажатии клавиши <Esc>
метод вернет False.
Компонент TImage предоставляет
свойство Picture, которое является экземпляром класса TPicture. Этот класс
обеспечивает работу с растровыми изображениями, пиктограммами и метафайлами.
Один из его методов, LoadFromFile, служит для загрузки изображения по имени
файла.
Выберите команду Run/Run
для компиляции и запуска приложения и попытайтесь открыть картинку.
Теперь добавьте возможность
растягивания изображения.
1. Дважды щелкните на компоненте spbtnStretch, и Delphi выведет окно редактора
и автоматически создаст обработчик события OnClick.
2. Введите код.
imgMain.Stretch:= spbtnStretch.Down;
Компонент TSpeedButton
имеет свойство Down, которое равно True при нажатой кнопке. Свойство Stretch
класса TImage позволяет растянуть картинку.
Для выравнивания картинки
по центру воспользуйтесь приведенной выше инструкцией (только используйте
компонент spbtnCenter) и введите следующий код:
imgMain.Center:= spbtnCenter.Down;