Delphi для начинающихИсточник: hardline Станислав Лаптенок
Сегодняшнюю статью я хочу, в первую очередь, посвятить интерфейсу среды разработки Delphi. Этот вопрос достаточно остро стоит и среди программистов, недавно начавших изучение Delphi, и среди матерых прогеров, которые сутками не спят, погрузившись в процесс создания очередной программы. Начнем по порядку. Создавая очередную программу, пользователь компонует интерфейс, исходя из имеющихся у него подручных объектов, при этом он неизбежно сталкивается с необходимостью изменить то или иное его свойство. Как помнит наш читатель, свойства объектов на этапе разработки программы изменяются с использованием инспектора объектов. Этих свойств существует достаточно много. На них-то мы сейчас и остановимся. Инспектор Объектов (рис. 1). В окне инспектора объектов имеются выпадающее меню и две вкладки. Выпадающее меню показывает нам, конфигурация какого объекта нам в настоящий момент представлена, а вкладки, собственно, эту конфигурацию помогают нам созерцать и изменять. Во вкладке Свойства (Properties) указано не что иное, как свойства формы проекта:). Рассмотрим некоторые основные свойства поподробнее: Action - назначает для объекта действие; ActiveControl - указывает на элемент формы, который имеет фокус; Align - устанавливает положение объекта: - AlNone - положение объекта определяется вручную пользователем; - AlBottom (AlTop) - объект расположен внизу формы (если речь идет о форме проекта, то - внизу экрана). При этом высота объекта остается неизменной, а его ширина увеличивается до ширины формы (экрана); - AlLeft (AlRight) - объект расположен в левой части формы (если речь идет о форме проекта, то - в левой части экрана). При этом ширина объекта остается неизменной, а его высота увеличивается до высоты формы (экрана); - AlClient - объект занимает всю предоставленную площадь. Например, при установке данного свойства форме проекта, при запуске программы, окно будет растянуто на весь экран; BiDiMode - это свойство используется для локализации приложения. Оно позволяет установить направление чтения текста в программе; BorderStyle - свойство, отвечающее за тип формы. Включает в себя: - bsNone - на форме полностью отсутствуют все системные элементы управления. Форма выглядит как прямоугольник без бортов и заголовка. При выполнении программы размер формы изменить нельзя; - bsSingle - стандартное окно, но при этом отсутствует возможность изменения размеров формы. Набор системных кнопок зависит от свойства BorderIcon; - bsDialog - стандартное диалоговое окно; - bsToolWindow - панель инструментов. Похожа на стиль bsSingle, но при этом все системные элементы уменьшены; - bsSizeToolWin - панель инструментов. Похожа на стиль bsSingle, но при этом все системные элементы уменьшены, возможно изменение размеров формы; BorderIcons - группа свойств, отвечающих за видимость системных элементов - кнопок: свернуть, закрыть, развернуть, помощь и системное меню; Caption - содержит текст названия формы проекта; CurrentHelpFile - содержит имя файла контекстной помощи, используемого приложением; HelpFile - задает имя файла помощи для приложения; ShowHint - включает либо отключает показ всплывающих ярлыков подсказок; Hint - содержит строку ярлыка подсказки; Icon - указывает на значок приложения; Cursor - устанавливает тип курсора, который будет установлен при наведении мыши на область объекта; Visible - устанавливает такое свойство объекта, как видимость; Enabled - указывает на состояние объекта. При значении False объект недоступен; Font - группа свойств, характеризующих отображение текста, используемого объектом. С помощью этих свойств можно изменять цвет, размер, стиль, кодировку и шрифт текста; Height - устанавливает высоту объекта в пикселях; Width - устанавливает ширину объекта в пикселях; Left - устанавливает отступ левого края объекта от левого края формы проекта в пикселях; Top - устанавливает отступ верхнего края объекта от верхнего края формы проекта в пикселях; Name - внутреннее имя объекта программы; TabOrder - указывает направление перемещения фокуса при нажатии клавиши Tab (от начала к концу или от конца к началу, но при этом хочу заметить, что порядок перемещения фокуса можно изменять с помощью диалога TabOrder (Edit/TabOrder...); TabStop - при установленном значении False фокус при нажатии клавиши Tab на данный объект не переводится (при этом фокус переходит к объекту, стоящему следующим в списке TabOrder). Выше описаны свойства, которые присущи многим компонентам. Однако стоит отметить, что, помимо вышеупомянутых параметров, компоненты имеют и специфические свойства. Их мы будем рассматривать по мере изучения материала. Во второй вкладке Действия (Events) указаны методы-обработчики событий. Познакомимся с ними поближе: OnActivate - вызывается при передаче фокуса форме проекта; OnDeactivate - вызывается при потере фокуса формой проекта; OnClose - вызывается при закрытии формы. Предназначен для выполнения операций, позволяющих пользователю принять решение о закрытии формы либо продолжении работы; OnCreate - вызывается при создании формы; OnDestroy - вызывается при уничтожении формы; OnHide - вызывается при исчезновении формы с экрана; OnPaint - вызывается при перерисовке формы; OnShow - вызывается при появлении формы на экране; OnClick - вызывается при нажатии на объект; OnMouseDown - вызывается при нажатии кнопки мыши. К сведению: для создания обработчика событий достаточно дважды нажать мышкой на пустое поле, соответствующее названию метода. Окно редактора кода. Как наш любознательный читатель мог уже заметить, окно редактора кода представлено тремя частями: - панель модулей описания переменных и используемых модулей; - панель кода программы; - панель найденных ошибок программы (на этапе создания программы данное окно является невидимым, активизируется, если это необходимо, при компиляции программы). Думаю, на этом с интерфейсом можно остановиться и перейти к конкретным проблемам программирования. Начать я бы хотел с раздела Delphi, который обратил на себя внимание через наших читателей. Итак, диалоги. Казалось бы, достаточно простой раздел. Однако меня с десяток человек спросили, каким образом можно произвести операции над файлом, который должен выбрать пользователь. Какие только варианты решения мне ни приходилось читать: и создавали дополнительную форму объекта, и пытались заставить пользователя от руки написать адрес файла, и предлагали воспользоваться компонентами Treeview, OutLine и им подобным. При этом читатели сами понимали, что они делают лишнюю работу и что существует более короткий и простой путь для решения проблемы. Как оказывается, внутреннее чувство наших читателей их не повело. Достаточно было воспользоваться компонентом OpenDialog (страница Dialogs). Данный компонент легко устанавливается на форму проекта в виде квадрата. При запуске программы он невидим. Квадрат лишь указывает нам на то, что компонент установлен и помогает нам обращаться к его свойствам при помощи инспектора объектов. Рассмотрим их поподробнее. Итак, после установки компонента на форму проекта диалоговое окно можно активизировать с помощью функции Execute:Boolean. При этом, если пользователь выбрал файл или несколько файлов и нажал кнопку ОК, то функция возвращает True. Свойство компонента FileName содержит имя последнего файла из списка выбранных в диалоге. Свойство Files - список всех файлов, выбранных в диалоге. Свойство InitialDir задает каталог, к которому диалог обращается при открытии. Свойство Title содержит заголовок диалогового окна. Следует также отметить свойство Filter. С его помощью при выборе и сохранении файлов удобно осуществлять отбор файлов только с заданными расширениями. Например, для создания фильтра для исполняемых файлов свойство должно содержать следующую строку: "Исполняемые файлы / *.EXE" В одном фильтре можно отбирать файлы и с различными расширениями: "Графические изображения / *.JPG; *.GIF; *.PNG" Фильтр также можно создать в простом редакторе, который связан со свойством Filter в инспекторе объектов. Очень интересные свойства и при этом одни из самых важных для диалоговых компонентов (OpenDialog, SaveDialog, OpenPictureDialog, SavePictureDialog) представлены в группе Options. Они рассмотрены в следующей таблице:
Как и у многих других компонентов, у диалогов тоже существуют и свои методы-обработчики событий. Среди них наиболее интересными являются OnClose, OnFolderChange, OnSelectionChange, OnTypeChange (думаю, в пояснениях эти методы не нуждаются). Исходя из всего вышесказанного, опишем процедуру (дабы увидеть все на конкретном примере), которая будет вызываться при нажатии на кнопку Button1, выполняющую запуск диалога OpenDialog1 и передающую путь к выбранному файлу в поле ввода Edit1: procedure TForm1.Button1Click(Sender: TObject); На этом раздел диалогов работы с файлами заканчивается. Всего вышеописанного вполне достаточно для создания полноценных приложений. Мной были специально опущены некоторые моменты, о которых я не счел нужным писать. Они редко используются в программировании, однако расширяют возможности работы с программой. При огромном вашем желании я могу написать о них персонально. Заявки - на e-mail:). Следующей остановкой я выбрал сообщения. Согласитесь, сообщения играют далеко не последнюю роль в работе программы. С помощью сообщений программист может извещать об ошибках пользователя при задании исходных данных для работы программы, система сообщает о некорректной работе приложений, благодаря сообщениям программные продукты доводят до нашего сведения информацию о своей версии, о разработчиках и фирме-производителе, наконец, планировщики сообщают пользователю о запланированных встречах, событиях. Реализовать сообщения можно несколькими способами: с помощью процедуры ShowMessage, функции MessageDlg, создания дополнительного окна. Процедура showmessage позволяет вывести пользователю простое сообщение. При этом появится дополнительное окно с названием проекта и кнопкой ОК. Выглядит все это следующим образом:
Синтаксис: Пример: Функция messageDlg позволяет создавать сложные диалоговые запросы с использованием обратной связи. Имеет вид дополнительного окна, дополненного изображением. При этом возможно использовать диалоговые запросы. Название окна зависит от типа запроса.
Синтаксис: MessageDlg(Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;
Msg - строковой параметр. Задает выводимое сообщение; Atype - внутренний параметр функции. Задает тип сообщения: - mtWarning - сообщение о предупреждении; - mtError - сообщение об ошибке; - mtInformation - информационное сообщение; - mtConfirmation - сообщение о подтверждении; - mtCustom - сообщение не содержит в углу изображения. Название окна соответствует названию исполняемого файла (аналогично showmessage). Abuttons - задает имена кнопок, которые будут отображаться на диалоговом запросе. Возможны значения: mbYes, mbNo, mbOK, mbCancel, mbHelp, mbAbort, mbRetry, mbIgnore, mbAll. HelpCtx - содержит номер раздела, который будет показан пользователю, если он вызовет справку, когда диалог активизирован. Пример: MessageDlg("Продолжить выполнение программы', mtConfirmation, [mbYes, mbNo], 0); Для того чтобы определить, какой вариант ответа выбрал пользователь, можно воспользоваться простой проверкой. Тогда исходный код будет иметь следующий вид: If MessageDlg('Закончить выполнение задачи?', mtConfirmation, [mbYes, mbNo], 0) = mrYes Создание сообщения с помощью дополнительного окна достаточно трудоемко. Этот способ используется для создания сложных запросов, когда одного только "Да" и "Нет" мало. Примером может служить ситуация, когда от пользователя необходимо получить код продолжения, в зависимости от которого приложение будет выполнять те или иные операции. Рассмотрением данного способа создания сообщений и использования дополнительных окон для вспомогательных задач мы займемся в следующей статье. |