Термин 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 &nb
-
4. Поместите три компонента
TSpeedButton в TPanel и назовите их spbtnLoad, spbtnStretch и spbtnCenter.
Установите следующие их свойства.
5. Поместите еще одну
TPanel в форму и установите следующие
ее свойства.
6. Поместите компонент
ТImage во вновь созданную ТPanel и установите следующие его свойства.
7. Добавьте в форму
TOpenDialog со следующими свойствами.
Delphi предоставляет
вам множество значков для компонента TSpeedButton; они находятся в каталоге
IMAGES\BUTTONS. Для нас вполне подойдут следующие установки свойств Glyph.
Свойство &
Значение
Теперь самое время сохранить
проект, выбрав в меню команду File/Save Project As. Сохраните Unit1
как Main, а проект — как EgSDIApp.
Написание
кода
imgMain.Stretch:= spbtnStretch.Down;
Компонент TSpeedButton
имеет свойство Down, которое равно True при нажатой кнопке. Свойство Stretch
класса TImage позволяет растянуть картинку.
imgMain.Center:= spbtnCenter.Down;
Свойство З
spbtnLoad.Hint &n
Load
spbtnLoad.Left &n
8
spbtnLoad.Top &nb
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
Свойство
Значение
Align  
alClient
Caption &nb
-
Свойство
Значение
Align  
alClient
Name
imgMain
Свойство &nbs
Значение
Filter &nbs
Bitmaps (*.bmp)|*.bmp
Name
opndlgLoad
Options &nb
[ofPathMustExist,ofFileMustExist]
spbtnLoad.Glyph &
FLDROPEN.BMP
spbtnStretch.Glyph &nbs
FONTSIZE.BMP
spbtnCenter.Glyph  
PICTURE.BMP
Теперь, после создания
интерфейса, перейдем к написанию исходного текста вашего приложения. Сначала
загрузите изображение следующим образом.
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. Введите код.
Для выравнивания картинки
по центру воспользуйтесь приведенной выше инструкцией (только используйте
компонент spbtnCenter) и введите следующий код: