...
...

От Delphi 4 к Delphi 5 часть 7

От Delphi 4 к Delphi 5
Палитра компонентов




На странице Additional размещаются компоненты, позволяющие создавать более красивый пользовательский интерфейс приложения (рисунок 1).

BitBtn представляет собой такую же кнопку, как и Button, однако, на ней можно поместить картинку. BitBtn имеет несколько предопределенных типов ( bkClose, bkOK и др.), выбирая которые, кнопка принимает вид с собственным графическим изображением на лицевой части.
SpeedButton
используется для создания панели кнопок быстрого доступа. Этот компонент дает возможность группировать несколько кнопок, которые во время выполнения имеют взаимосвязанные состояния.

MaskEdit имеет характерные черты компонента Edit, но с возможностью форматированного ввода. Формат текста определяется в свойстве EditMask . В редакторе свойств EditMask есть заготовки некоторых форматов: даты, финансов и т.п. Можно настроить компонент таким образом, чтобы пользователь мог вводить только необходимые символы.


StringGrid
представляет собой таблицу строк. Компонент предназначен для отображения текстовых данных в виде таблицы. Доступ к элементам таблицы возможен через свойство Cell.

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

Image
позволяет отображать графическое изображение на форме. Компонент воспринимает такие форматы, как растровый BMP, пиктограммы ICO, файловый WMF .


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


Bevel
элемент для рельефного оформления интерфейса. Компонент имеет следующие стили: вдавленный и выпуклый.

ScrollBox позволяет создавать на форме прокручиваемую область с размерами большими, чем экран. Объединяется эта область вертикальными и горизонтальными линейками прокрутки.


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


Splitter
определяет границу между двумя другими визуальными компонентами или контейнерами, такими как Panel, GroupBox или подобными им. Возможно перемещение границы, отделяющей их. Визуально компонент представляет собой небольшую вертикальную или горизонтальную полосу, располагающуюся между двумя соседними контейнерами.

StaticTex представляет собой компонент подобный Label, отличие от которого — это наличие собственного окна, позволяющего обводить текст рамкой или выделять его в виде "вдавленной" части формы.


ControlBar
позволяет формировать инструментальную линейку с возможностью размещения на ней нескольких инструментальных панелей. Компонент поддерживает технологию Drag & Dock для управления положением панелей.

Application Events
позволяет получать сообщения Windows, предназначенные для вашего приложения . Без этого компонента сообщения принимает глобальный объект Application .


Chart
позволяет строить различные графики в вашем приложении.


Инспектор объекта.

Страница свойств (Properties).


Рассмотрим некоторые свойства.


Constraints
представляет собой комплексное свойство, которое используется для ограничения размеров, например формы. Свойство Constraints является объектом типа TSizeConstraints. Он имеет четыре основных свойства: MaxHeight, MaxWidth, MinWidth, MinHeight, максимальная высота и ширина, минимальная высота и ширина соответственно. По умолчанию вышеперечисленные свойства имеют нулевое значение, т.е. ограничений нет. Задавая любые положительные значения, вы автоматически вводите ограничения на размер. Ограничение размера формы полезно иногда в случаях, когда необходимо, чтобы развернутое окно не заслоняло другие окна в приложении. Задавая значения размера формы, например MaxWidth = 250, MaxHeight = 250, вы их не сможете изменить, если даже нажмете системную кнопку разворачивающую форму на весь экран.


Ctl3D
определяет появление формы с трехмерными эффектами. Если Ctl3D установлено в True, компонент будет выглядеть объемным, или плоским — если свойство Ctl3D установлено в False.

Cursor
определяет форму значка указателя мыши, когда мышь проходит по области формы. Возможен выбор вида курсора из предложенного списка зарезервированных форм курсора. Изменение изображения курсора мыши при перемещении его в области формы указывает на действия, которые вы можете совершить. Имеется еще одно свойство, аналогичное Cursor — DragCursor. Оно отвечает за изображение курсора при перемещении его в области компонента в процессе перетаскивания. Значения свойств Cursor и DragCursor являются индексом списка возможных курсоров, управляемого глобальной переменной Screen (рисунок 2) .



DefaultMonitor
используется для того, чтобы соединить форму с конкретным типом монитора.


DockSite
используется для установления независимого управления.


DragKind
предназначается для определения перетаскивания компонента по технологии Drag & Dock или Drag & Drop . Свойство DragKind определяет, будет ли компонент перетаскиваться обычным образом (по технологии Drag & Drop ) — значение dkDrag, или он будет перетаскиваться для встраивания в окно (по технологии Drag & Dock ) — значение dkDock.

DragMode
предназначается для определения режима буксировки компонента. Если выбрано значение dmAutomatic, то пользователь просто после нажатия левой кнопки мыши производит перетаскивание. Если выбрано свойство dmManua l, управление на перетаскивание не может быть передано, пока приложение не вызовет метод BeginDrag.

Enabled
определяет доступность компонента для пользователя. Чтобы сделать его недоступным, необходимо установить свойство Enabled в False. Недоступный компонент отображается серым цветом. Он игнорирует события, связанные с мышью, клавиатурой, и событие таймера OnTimer.


Для восстановления доступности компонента необходимо установить свойство Enabled в True.

Font
представляет собой комплексное свойство, которое определяет для формы и ее компонентов характеристики шрифта. Двойной щелчок левой кнопкой мыши в инспекторе объекта разворачивает свойство Font (шрифт) и делает видимыми и доступными его атрибуты.


FormStyle
определяет четыре возможных вида поведения формы: fsNormal, fsMDICild, fsMDIForm, fsStayOnTop. Например, чтобы использовать форму как дочернее окно внутри MDI- приложения, вы должны выбрать fsMDICild.

Height
определяет высоту формы в пикселях, включая ее границы и заголовок.


HelpContext
содержит номер темы в файле справочника, которая контекстно связана с компонентом (управляющим элементом). Когда компонент обладает фокусом ввода, пользователь может нажать клавишу F1, чтобы получить по нему оперативную справку. Если свойство HelpContext имеет значение 0, то управляющий элемент наследует значение HelpContext своего родительского компонента (компонента-контейнера, в котором он расположен). Например, если задано значение HelpContext для формы, то для всех компонентов, у которых не задано отличного от нуля значения HelpContext, будет показана тема справки, указанная для формы.


HelpFile
определяет имя файла, если приложение использует файл для отображения подсказки.


Hint
определяет поясняющий текст, который показывается, когда курсор мыши находится над компонентом.

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

Вторая часть содержит более полный текст, отображаемый в какой-то выделенной для этого части окна, например, в строке состояния.


HorzScrollbar
представляет собой комплексное свойство, которое определяет характеристики горизонтальной линейки прокрутки формы.


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


KeyPreview
определяет возможность для формы "видеть" событие, исходящее от клавиатуры (нажатие клавиши). Если KeyPreview имеет значение True, то форма воспринимает события, происходящие от клавиатуры. Если KeyPreview имеет значение False, то события не воспринимаются.


Left
определяет Х -координату верхнего левого угла формы в пикселях. Значения начинаются с нуля в левом верхнем крае экрана и увеличиваются по мере перемещения вправо по экрану.


Menu
определяет главное меню формы. Если в форме имеется несколько таких компонентов, то можно задать одному из них роль главного меню.


Name
задает логическое имя форме, которое используется при обращении к ней внутри программного кода Object Pascal.


Свойство Name задается только в процессе проектирования и не должно изменяться во время выполнения.

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

ObjectMenuItem
позволяет поддерживать функционирование OLE объектов .


Parent
определяет родительский компонент-контейнер, в границах которого располагается другой компонент. Контейнерами могут быть оконные компоненты, такие, как формы, панели и некоторые другие. Расположенные на них компоненты, называемые дочерними, могут наследовать часть свойств контейнера, например, шрифт, цвет и т.д.


ParentBiDiMode
разрешает или запрещает использовать свойство BiDiMode, которое определяет порядок направления текста и выравнивания.


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


PixelsPerlnch
необходимо для определения возможности отображения формы на системах с различным разрешением экрана без ухудшения внешнего вида. Данное свойство связано со свойством Scaled (масштаб) .

PopupMenu
определяет для компонента всплывающее меню, которое будет связано с ним. Обычно во всплывающем меню задаются основные команды, относящиеся к данному компоненту.


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


PrintScale
свойство определяет изменение масштаба формы, когда производится процесс печати.


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


Showhint
разрешает или запрещает показ пояснений, записанных с использованием свойства Hint.

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


Top
определяет вертикальное положение Y-координаты верхнего левого угла формы относительно экрана, выраженное в пикселях, начиная от нуля и увеличивающееся при продвижении по экрану вниз.


Модальные и немодальные формы.


Приложения могут иметь в своем составе не одну, а несколько форм. Существуют такие понятия, как модальная и немодальная форма.

Допустим, в приложении имеется две формы: основная и не основная.


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


Немодальная
— это форма, которая получает фокус, но возможна работа и с основным окном.

Для пояснения поведения модальных и немодальных форм рассмотрим пример.

    1. Запустите Delphi.
    2. Сохраните файл модуля под именем Ball_pas, а файл проекта — под именем Ball dpr. Для этого выберите из меню File команду Save Project As ...
    3. Поместите на форму Form1 компоненты, позволяющие произвести расчет поверхности шара. Вначале поместите компонент GroupBox1. Используя свойство Caption инспектора объекта, введите заголовок " Расчет поверхности шара ". Поместите два компонента Edit1, Edit2 для ввода значений радиуса шара и вывода результатов. Поместите два компонента Label1, Label2 и введите надписи " Радиус шара", "Поверхность шара ".
    4. Поместите две кнопки Button1, Button2 со страницы Standard палитры компонентов. Используя свойство Caption, введите заголовок для первой кнопки " Расчет", для второй кнопки — " Объем ". Щелчок левой кнопкой мыши по компоненту Button1 обеспечит появление результатов расчета в окне редактора Edit2 . Щелчок левой кнопкой мыши по компоненту Button2 произведет переход к немодальной форме Form2. На второй форме будет производиться расчет объема шара. Таким образом, можно расположить перед собой две формы, позволяющие переходить от одной формы к другой. Правильное размещение компонентов на форме производите при помощи палитры выравнивания, которую можно вызвать из меню Delphi командой View/Alignment Palette. Действия, которые производят кнопки по выравниванию компонентов, описаны в следующем порядке, слева — направо, сверху — вниз (рисунок 3):



    5. выровнять левые границы;
      выровнять центры по горизонтали;
      центрировать в окне по горизонтали;
      пропорционально разрядить по горизонтали;
      выровнять правые границы;
      выровнять верхние границы;
      выровнять центры по вертикали;
      центрировать в окне по вертикали;
      пропорционально разрядить по вертикали;
      выровнять нижние границы.

    6. Напишите программный код для отклика на события щелчок по кнопкам. Для перехода к Редактору кода необходимо произвести двойной щелчок по соответствующим кнопкам Button1, Button2 .
    7. {описание переменных SPOV — площадь поверхности шара, R — радиус шара}
      var
      SPOV,R:Real;
      procedure TForm1.Button1Click(Sender: TObject);
      begin
      R:=StrToFloat(Edit1.Text);
      SPOV:=4*pi*R*R;
      Edit2.Text:=FloatToStr(SPOV);
      end;
      procedure TForm1.Button2Click(Sender: TObject);
      begin
      Form2.Show;
      Form2.Edit1.Text:=FloatToStr(2);
      end;

    8. Теперь добавьте вторую форму в приложение. Для этого необходимо щелкнуть по команде New Form из меню File. Как только добавили новую форму, необходимо написать программный код для управления ею. В первой форме кнопка с заголовком " Объем" используется для вызова второй формы.
    9. В программном коде используем процедуру Show, в нашем случае вторая форма будет выведена на экран как немодальная. Если сейчас провести компиляцию приложения, система Delphi выдаст сообщение об ошибке, но и попросит решить проблему, т.е. добавить оператор uses в код основной формы. Необходимо включить модуль, содержащий вторую форму Unit2, с помощью оператора uses в список модулей в начале кода первой формы. Или можно выбрать первую форму и выполнить команду File/Use Unit . По этой команде откроется диалоговое окно Use Unit со списком, для нашего случая будет только одно имя Unit2 . Необходимо будет выбрать его и щелкнуть кнопку Ok (рисунок 4). В программном коде модуля Ball появится оператор uses, имеющий в своем составе имя Unit2 .
    10. Поместите необходимые компоненты на вторую форму для вычисления объема шара. Проводя расчет объема шара на второй форме, будем использовать значение радиуса, введенного в окно текстового редактора первой формы Edit1. Поместим на Form2 два компонента Edit1 Edit2 для отображения значений радиуса шара и объема шара, компонент Button1 для получения расчета объема шара. Для компонентов Label1, Label2 введите заголовки "Радиус шара", Объем шара" соответственно и поместите их над Edit1 и Edit2 .
    11. Добавьте в приложение третью форму, определите ее как модальную. Для этого выберите из меню File команду New Form . Для ее вызова в приложении поместите на первую форму кнопку с заголовком "Формула Гюйгенса ". Введите соответствующий код для организации вывода на экран третьей формы, для этого используйте функцию ShowModal.
    12. Программный код приведен ниже по тексту. Расчет длины дуги проведем в следующей последовательности. Коротко опишу прием для решения задачи. На рисунке 5 показаны элементы окружности, которые необходимо измерить, чтобы провести расчеты для решения этой задачи. Необходимо отметить на дуге АВ ее середину — точка М, провести перпендикуляр СМ к хорде АВ. Затем необходимо измерить хорду АВ и хорду АМ, стягивающую половинную дугу. Длину дуги Р найдем приближенно из формулы Гюйгенса:

    13. Р = 2
      L + (2L1 — L),


      где L=AM, L1=AB.

      Относительная погрешность этой формулы составляет около 0,5%, когда дуга АВ содержит 60 0, с уменьшением угловой меры дуги процент погрешности уменьшается. Для дуги c угловым значением 45 0 погрешность составляет 0,02%.

      Компоненты, размещаемые на форме, вы можете видеть на рисунке 6. Проектируя приложение, переход от формы к модулю и обратно осуществляйте с использованием команды Project Manager или клавишей F12 .



      На Form3 помещен компонент CheckBox1, который позволяет изменять значение результата в зависимости от значения угловой меры дуги.

    14. Form3 модальная форма. Она остается активной, пока ее не закроете, т.е. не будет возможности перехода для работы с основной формой.
    15. Чтобы закончить приложение, необходимо подключить модуль, содержащий третью форму Unit3, с помощью оператора uses в список модулей в начале кода для первой формы. Или можно выбрать первую форму и выполнить команду File/Use Unit . По этой команде откроется диалоговое окно Use Unit со списком, для нашего случая имя Unit3 . Необходимо будет выбрать его и щелкнуть кнопку Ok . В программном коде модуля Ball появится оператор uses, имеющий в своем составе имя Unit3.

{Программный код для модуля 1.} implementation uses Unit2, Unit3; {$R *.DFM} var SPOV,R:Real; 
procedure TForm1.Button1Click(Sender: TObject); begin R:=StrToFloat(Edit1.Text); SPOV:=4*pi*R*R; Edi
t2.Text:=FloatToStr(SPOV); end; procedure TForm1.Button2Click(Sender: TObject); begin Form2.Show; Fo
rm2.Edit1.Text:=FloatToStr(2); end; procedure TForm1.Button3Click(Sender: TObject); begin Form3.Show
Modal; end; end. {Программный код для модуля 2.} 

implementation {$R *.DFM} var V,
R1:Real; procedure TForm2.Button1Click(Sender: TObject); begin R1:=StrToFloat(Edit1.Text); V:=4/3*pi
*R1*R1*R1; Edit2.Text:=FloatToStr(V); end; end. {

Программный код для модуля 3.} i
mplementation {$R *.DFM} var L,L1,P:Real; procedure TForm3.Button1Click(Sender: TObject); begin L:=S
trToFloat(Edit1.Text); L1:=StrToFloat(Edit2.Text); P:=2*L+1/3*(2*L-L1); if CheckBox1.Checked then be
gin P:=P*0.5+P; end {точка с запятой после end в данном случае не ставится} else P:=P*0.02+P; Edit3.
Text:=FloatToStr(P); end; end.
Литература:

  1. Марко Канту. Delphi 2 для Windows 95/NT. Москва. ООО "Малип". 1997г.
  2. Джон Матчо. Дэвид Р. Фолкнер. Delphi. Москва. БИНОМ. 1995г.
  3. Эндрю Возневич. Delphi. Освой самостоятельно. Москва. Восточная книжная компания. 1996г.
  4. В.В.Фаронов. Delphi 5. Учебный курс. Москва. Издательство Нолидж. 2000 г.
  5. А. Я. Архангельский. Программирование в Delphi 5. Москва. ЗАО "Издательство Бином". 2000 г.

Владимир Скуратов

(c) компьютерная газета




© Компьютерная газета

полезные ссылки
IP камеры видеонаблюдения