Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DDD.doc
Скачиваний:
2
Добавлен:
14.11.2019
Размер:
25.86 Mб
Скачать

6. Разработка приложений

6.1. Работа со свойствами форм

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

Delphi сильно упрощает процесс установки и настройки свойств форм. Хотя поэкспериментировать с ними — заманчивая идея, но при создании серьезных приложений нужен определенный консерватизм. Одно из преимуществ Windows состоит в том, что большинство программ в этой системе выглядят и ведут себя сходно. Набив себе руку на одном приложении для Windows, пользователь должен легко переучиваться на другое. Имейте это в виду при создании своих приложений.

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

В этой главе будут использованы следующие термины:

  • Компонентом называется любой объект, имеющийся в Палитре компонентов и помещенный на форму.

  • Элемент управления — это визуальный компонент, "Визуальный" в данном случае означает то, что он виден во время выполнения приложения. Примерами визуальных компонентов являются кнопки, строки редактирования и списки.

Последующие разделы относятся к наиболее важным свойствам форм Delphi.

Замечание

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

Active

Свойство Active доступно только для чтения и только во время выполнения приложения. Это логическая переменная, устанавливаемая в True тогда, когда форма активна и имеет фокус ввода. В противном случае она устанавливается в False.

ActiveControl

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

AutoScroll

Как и некоторые другие свойства, AutoScroll на самом деле не является необходимым свойством — прокрутку можно запрограммировать и самостоятельно. Но, как и многое в Delphi, это свойство может значительно облегчить работу. Чаше всего свойство Autoscroll используется в окнах, чей размер может быть изменен. Если свойство установлено в True и при изменении размеров формы какой-либо элемент управления перестал быть виден полностью, на форме автоматически появляются полосы прокрутки Также они появляются в том случае, если пользователь вывел дочернее окно за пределы главного в приложении MDI.

Borderlcons

Большинство приложений для Windows имеют три характерных значка в верхней части окна: значок системного меню слева и значки свертывания и развертывания справа. В дополнение к ним, приложения для Windows 95 могут также содержать значки закрытия и подсказки в верхнем правом углу. В зависимости от значения свойства BorderStyle, некоторые из них могут быть недоступны. Свойство Borderlcons позволяет решить, какие из возможных значков отобразятся в заголовке при выполнении приложения. Для обычных форм вы можете сохранить все значки. Только в особых случаях можно убрать значок системного меню — пользователь ожидает увидеть его там и может быть разочарован. Примером формы только с одним значком закрытия является окно Object Inspector. Поскольку диалоговые окна обычно не имеют значков свертывания и развертывания, значения biMaximize и biMinimize не оказывают на них никакого влияния. Формы, не имеющие обрамления вообще, не имеют места и для значков; свойство Borderlcons в этом случае игнорируется.

Замечание. Borderlcons — это вложенное свойство. Для настройки отдельных значков нажмите кнопку с символом «+», в появляющейся строке Borderlcons в окне Object Inspector, или щелкните правой кнопкой мыши на свойстве и выберите во всплывающем меню пункт Expand. Символ "+" изменится на "-", и каждый значок появится в виде отдельного свойства. Вы можете добавить или убрать любой из значков во время выполнения приложения; например, следующий код убирает значок системного меню:

Forml.Borderlcons := Forml.Borderlcons— [biSystemMenu];

BorderStyles

Каждая разрабатываемая вами форма может иметь один из шести предопределенных стилей обрамления. Обычно он определятся при разработке, Для этого выберите форму в раскрывающемся списке окна Object Inspector и далее свойство BorderStyle. Его раскрывающийся список содержит возможные стили.

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

procedure Forml.ButtonlClick(Sender; TObject);

begin Forml.BorderStyle := bsMone;

end;

Для большинства форм следует использовать стиль bsSizeable. Он окружает форму обрамлением в виде сдвоенной линии и позволяет пользователю изменять размеры формы во время выполнения приложения. При этом форма ведет себя так, как и большинство стандартных приложений для Windows. По умолчанию форма со стилем bsSizeable имеет значок системного меню, заголовок и значки свертывания и развертывания. Стиль bsSingle определяет формы, выглядящие как обычные окна, но без возможности изменения их размеров во время выполнения приложения. Это нужно для форм, изменение размеров которых может сделать их бесполезными. К примеру, программа-калькулятор. Если бы пользователи могли изменять размеры окна, то исчезновение некоторых кнопок калькулятора вызвало бы затруднения.

По умолчанию форма со стилем bsSingle имеет заголовок и значки системного меню, свертывания и развертывания. В большинстве случаев нужно убрать значок развертывания, но сохранить значки свертывания и системного меню. Delphi автоматически настраивает пункты системного меню в соответствии с состоянием значков. Например, если BorderStyle установлено в bsSingle и значок развертывания недоступен, то и пункты системного меню Restore, Size и Maximize недоступны, а Minimize — доступен.

Следующий популярный стиль обрамления — bsDialog. Этот стиль применим для форм, которые будут использоваться как диалоговые окна. Они имеют значок системного меню и заголовок, но не имеют значков свертывания и развертывания. Обычно нет необходимости в стиле bsNone. Он отображает форму без всех значков и заголовка. Его можно применить для программы сохранения экрана, отображения предупреждающих сообщений или показа полноэкранных картинок.

Стиль bsToolWindow повторяет bsDialog, отличаясь от него только размером заголовка. Стиль bsSizeToolWin — то же, что и bsToolWindow, плюс возможность изменения размеров формы.

ClientHeight, ClientWidth, Height и Width

Свойства формы Height и Width определяют, соответственно, текущую высоту и ширину формы в пикселях. Свойства ClientHeight и ClientWidth определяют размеры рабочей области формы. Они равны Height и width минус размеры обрамления и заголовка. Изменение значений Height и Width автоматически изменит значения ClientHeight и ClientWidth и наоборот.

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

С другой стороны, свойства ClientHeight и ClientWidth полезны тогда, когда точно известны желаемые размеры рабочей области.

Color

Свойство color задает цвет фона у формы. В окне Object Inspector для этого предлагается раскрывающийся список с множеством предопределенных цветов. Можно задать и собственные цвета, дважды щелкнув и свойстве Color.

Желательно использовать в качестве цвета большинства форм цвет clWindow. Этот цвет задается в панели управления (Control Panel) Windows в качестве цвета окон по умолчанию.

Ctl3D

Свойство Ctl3D не придает объема самой форме — объемными кажутся элементы управления на ней. Многие компоненты из библиотеки визуальных компонентов (VCL -Visual Component Library) имеют свойства Ctl3D и ParentCtl3D. Если свойства ParentCtl3D установлено в True, то компонент использует значение Ctl3D своего родительского компонента. В бопьшинстве случаев лучше, чтобы ParentCtl3D имело значение True, тогда можно управлять внешним видом всех компонентов на форме изменением ее свойства CII3D.

Когда у компонента свойство Ctl3D установлено в True, он отображается серым, белым и черным обрамлением. Это создаст эффект выпуклости или вдавленности компонента. Если это свойство установлено в False, он отображается с обычной черной рамкой.

Cursor

Свойство Cursor задает курсор, который будет появляться над любой точкой формы. Обычно оно имеет значение crDefault и изменяется только во время выполнения приложения. Чаще всего форму курсора нужно изменить, когда начинается процесс, требующий ожидания со стороны пользователя — курсор тогда похож на песочные часы. Для этого подойдет, например, такой код:

Forml.Cursor := crlloinGlass;

Чтобы увидеть "все курсоры, поддерживаемые Delphi, обратитесь к описанию этого свойства через контекстную подсказку.

Enabled

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

Font

Как правило, свойство Font формы не отражается на ней самой, так как формы очень редко содержат текст (заголовок не в счет — свойство Font никак на него не влияет). Оно важно потому, что большинство компонентов имеют свойство ParentFont. Если оно установлено в True, шрифт компонента имеет те же свойства, что и шрифт его родителя. Установив ParentFont в True для всех компонентов на форме, можно менять их шрифт централизованно.

Для совместимости с другими приложениями для Windows, нужно присвоить свойству Font формы значение System (Системный). Системным шрифтом обычно является MS Sans Serif, но на компьютерах, где пользователь назначил системным другой шрифт, значение System позволяет выбрать именно его. Свойство Font является вложенным: щелчок на знаке "+" в окне Object Inspector дает доступ к свойствам шрифта Color, Height, Name, Pitch, Size и Style.

Icon

Свойство Icon определяет значок, который отображается при свертывании формы.

KeyPreview

Когда свойство KeyPreview установлено в True, события от клавиатуры (такие, как OnKeyDown, OnKeyUp и OnKeyPress) посылаются сначала форме, а затем — активному элементу управления. Если оно установлено в False, эти события посылаются напрямую элементу управления, имеющему фокус ввода. Использование этого свойства позволяет избежать написания длинного и ненужного кода для обработки различных нажатий. Например, чтобы подсчитать общее число нажатий во время ввода данных, обработчик события OnKeyDown формы просто может использовать счетчик.

Другим примером может послужить форма-калькулятор, имеющая кнопки с цифрами от 0 до 9. Помимо нажатий на эти кнопки, пользователь должен иметь возможность непосредственно вводить цифры. Когда цифра введена, с помощью одной строки кода можно инициировать событие OnClick для соответствующей кнопки. Проблема в том, какая из кнопок должна вызывать это событие. Если свойство KeyPreview установлено в False, такую строку кода нужно поместить в обработчик событий от клавиатуры всех компонентов на форме, могущих иметь фокус ввода. Если же это свойство установлено в True, эта строка может содержаться в обработчике события OnKeyPress формы.

Left и Тор

Свойства Left и Тор определяют положение открытой формы и измеряются в пикселях. Во время разработки приложения можно изменить их, непосредственно вводя числа в поля свойств в окне Object Inspector или передвигая форму по экрану. В этом случае Delphi автоматически обновляет соответствующие значения. В разделе Position рассказывается о том, как сделать форму, автоматически помещающую себя в центр экрана при выполнении приложения.

Menu

В простых приложениях форма, как правило, содержит только один компонент TMainMenu. В более сложных приложениях форма может иметь более одного меню. Для того чтобы задать, какой именно компонент TMainMenu отображается в данный момент, можно использовать свойство Menu формы. Когда вы помещаете первый компонент TMainMenu на форму, Delphi автоматически настраивает свойство Menu на него. Если же в наличии есть более одного меню, можно выбирать их из раскрывающегося списка.

Name

Форма, как и другие компоненты Delphi, имеет имя — свойство Name. Это имя дает возможность обращаться к форме из программного кода. В начале создания приложения имя главной формы устанавливается Form! Обращение к этому имени может потребоваться весьма часто, и есть смысл с самого начала поменять его на что-нибудь более осмысленное, Delphi автоматически изменит ссылки на свойство Name формы в генерируемом ею коде, например:

Application.CreateForm(TfrmPurchaseOrder, frmPurchaseOrder);

Однако Delphi не в состоянии изменить имена в написанном вами коде. Следующая строка выдаст при компиляции ошибку в том случае, если вы во время разработки приложения изменили имя Form1:

Form1. Color := clWindow;

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

PixelsPerlnch и Scaled

Установив свойство Scaled формы в True и присвоив свойству PixelsPerlnch любое значение, отличающееся от заданного по умолчанию, вы получаете эффективный инструмент масштабирования форм. Это полезно тогда, когда разработка приложения проходит при одном разрешении экрана, а запуск — при другом. При возрастании значения PixelsPerlnch форма уменьшается и наоборот. Нужно иметь в виду, что если на форме есть компоненты Tlmage их свойство Stretch должно быть равно True. В этом случае изображение будет масштабироваться вместе с формой. Чтобы изменить масштаб формы во время выполнения приложения, используйте метод ScaleBy.

Совет. Если вы увеличили значение PixelsPerlnch, старайтесь использовать шрифты TrueType. Они лучше масштабируются, чем растровые шрифты (вроде MS Sans Serif).

PopUpMenu

Среди возможностей приложений для Windows, поддерживаемых средствами разработки фирмы Borland есть всплывающие меню, появляющиеся при щелчке правой кнопкой мыши.

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

Чтобы создать всплывающее меню, поместите на форму компонент TPopupMenu Присвойте свойству формы РорирМеnu имя этого компонента. Теперь оно будет отображаться при щелчке правой кнопкой мыши на форме.

Position

Хотя вы можете точно задать положение и размеры формы при разработке приложения, Delphi может автоматически разместить форму и при его выполнении, используя свойство Position. Таблица показывает возможные значения этого свойства.

Таблица. Значения свойства Position

Значение

Описание

poDesigned

Форма отображается во время выполнения приложения с теми же положением и размером, что и при его разработке. Размер формы задается свойствами Height и width, а положение — свойствами Left и Тор. Свойство Position имеет это значение по умолчанию

poDefault

Размер и положение формы автоматически выбираются во время выполнения приложения. Она обычно выравнивается с учетом правой и нижней границ экрана

poDefaultPosOnly

Положение формы автоматически выбирается во время выполнения приложения. Размер формы задается свойствами Height и Width

poDefaultSizeOnly

Размер формы автоматически выбирается во время выполнения приложения. Положение формы задается свойствами Left и Тор.

poScreenCenter

Размер формы задается свойствами Height и Width, но форма располагается в центре экрана. Это очень полезная возможность; с ней стоит поэкспериментировать.

6.2. Создание формы

Почти каждое приложение содержит более одной формы. Чтобы работать с несколькими формами, необходимо ряд условий.

Создание новой формы с помощью Object Repository

Один из способов создания новой формы - использовать шаблоны форм. Они расположены в диалоге New Items на странице Forms. Для вызова диалога выберите пункт меню New.

Пример. Добавим к приложению «Редактор» окно «О программе ...».

  1. Откройте проект «Редактор» (C:\Delphi3\kurs\editor\editor.dpr);

  2. В меню Delphi выберите пункт меню New;

  3. В появившемся диалоге New Items выберите закладку Forms;

  4. Выберите форму About Box;

  5. Появится форма с именем (Name) AboutBox;

  6. Измените свойства Caption:

  • AboutBox - О Программе;

  • ProductName - Текстовый редактор;

  • Version - Версия 1.0;

  • Copyright - разработана фирмой «Домашняя лавочка Inc.»;

  • Comment - Разработан с использованием инструментария Delphi 3.0;

  1. Установите свойство Picture элемента Programlcon изображение C:\Delphi3\lmages\Splash\256Color\factory.bmp

  2. В обработчик события OnClick элемента OKButton введите код;

Close;

  1. Для перехода на основную форму щелкните на кнопке «Выбор формы из списка» в Палитре инструментов »

  2. В появившемся списке выберите Form1;

  3. В пункт меню mnuAbout введите код вызова второй формы:

AboutBox.ShowModal;

Метод ShowModal выводит форму на передний план в модальном режиме.

  1. Откомпилируйте программу. Появится предупреждения о ссылки на необъявленный модуль Unit! И возможность добавления ссылки на данный модуль в блоке uses. Нажмите Yes;

  2. Запустите программу и сохраните проект (Unit1 в uAbout).

Создать пустую форму можно с помощью панели инструментов

Вызов формы

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

Для активизации формы применяются два метода: Show и ShowModal.

Метод Show активизирует форму в обычном режиме. Если щелкнуть за пределами формы, то она потеряет фокус и перейдет на задний план.

Метод ShowModal активизирует форму в модальном режиме. Она потеряет фокус когда вы явно закроете форму методом Close.

Порядок создания форм

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

Там размещено несколько закладок. Закладка Forms отображает имя главной формы (Main Form). В списке Auto-create forms расположены формы, которые создаются автоматически. Они создаются в том порядке, в котором перечислены.

Другой список Available forms содержит список форм, которые не создаются автоматически.

Для «неавтоматических» форм необходимо создать их программно по мере необходимости. Для создания формы применяется метод Create. Например, для формы AboutBox, которая принадлежит к классу TAboutBox:

AboutBox := TAboutBox.Create(Self);

Для уничтожения формы используется метод Free.

6.3. Удаление формы

Project Manager

Управлением составляющих проекта занимается Менеджер Проекта (Project Manager). Доступ к нему осуществляется через команду Project Manager меню View. Он представляет список компонентов проекта. Он состоит из трех частей:

  • Unit - имена модулей проекта;

  • Form - имена форм;

  • Path - путь доступа к модулю. Если пусто, то текущий каталог (каталог проекта).

Вы можете добавлять и удалять модули.

Удаление форм из проекта

Для удаления формы из проекта, сначала, необходимо удалить имя модуля из всех команд uses. Далее, открыть диалог Project Manager и удалить форму.

Доступ к элементам другой формы

Чтобы получить доступ к элементам другой формы, необходимо включать имя формы в имя объекта. Например, изменим надпись на кнопке в форме AboutBox на «Закрыть»: AboutBox.OKButton.Caption:='Закрыть'.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]