1. Задачи проектирования программных систем. Программное обеспечение (ПО)
![]()
|
procedure Button1Click(Sender: TObject); Заголовок (объявление) процедуры обработки события OnClick - щелчка по кнопке Button1. Параметр с именем Sender принадлежит классу TObject. Параметр Sender вставляется Delphi автоматически, с его помощью подпрограмма Button1Click может определить, какой именно компонент создал событие OnClick private { Privatedeclarations } Закрытый раздел класса. Сюда могут помещаться объявления переменных, функций и процедур, включаемых в класс формы, но не доступных для других модулей. public { Public declarations } Открытый раздел класса. Сюда могут помещаться объявления переменных, функций и процедур, включаемых в класс формы, и доступных для других модулей. Все что мы рассмотрели выше помещалось в интерфейсную секцию. В секцию реализации помещается тело процедуры обработкищелчка по командной кнопке. procedure TForm1.Button1Click(Sender: TObject); begin … end; Примечание. Текст модуля доступен как Delphi ,так и программисту. Delphi автоматически вставляет в текст модуля описание любого добавленного к форме компонента, а также создает заготовки для обработчиков событии; программист может добавлять свои методы в ранее объявлённые классы и наполнять обработчики событий конкретным содержанием, вставлять собственные переменные, типы, константы и т. д. Совместное с Delphi владение текстом модуля будет вполне успешным, если программист будет соблюдать простое правило, он не должен удалять или изменять строки, которые вставлены не им, а Delphi. 14. Понятие класса и обьекта в Delphi В Delphi класс – это тип данных, а обьект – конкретный существующий в памяти экземпляр класса. Для описания класса используется ключевое слово class. Основные принципы ООП , используемые в Турбо Паскале, сохраняются . Пример обьявления класса : TYPE TMyClass = CLASS ПоляДанных; ЗаголовкиМетодов; END ; Теперь в программу можно ввести новую переменную, представляющую собой обьект – экземпляр класса TMyClass : VAR MyClass : TMyClass ; 15. Интегрированная среда разработки Delphi Интегрированная среда разработки Delphi состоит из ряда основных элементов, которые присутствуют на экране : главного окна (включающего меню, панель быстрого доступа и палитру компонентов), инспектора обьектов, формы – окна для визуального создания приложений и окна для написания кода (редактора). Палитра компонентов использует постраничную группировку обьектов. На ней находится набор вкладок – Standard, Addithional и т.д. Инспектор обьектов состоит из двух страниц, первая из которых содержит список свойств, а вторая список событий выбранного на форме компонента. Отметим, что в состав среды разработки входят некоторые инструментальные средства. Например, встроенный отладчик, внешний отладчик, компилятор командной строки и другие. 16. Основы визуального программирования Проект Delphi – приложения, который помещается в отдельную папку, состоит из трёх основных типов файлов : Файлы описания форм – двоичные файлы с расширением DFM, описывающие формы с компонентами. Файлы программных модулей – текстовые файлы с расширением PAS , содержащие коды на языке Object Pascal. Главный файл проекта – текстовый файл с расширением DPR . Этот файл среда Delphi создаёт и контролирует сама. Средствами визуального программирования создаётся интерфейсная часть приложения. Основной визуальный компонент форма (Form) выполняет роль контейнера, который содержит другие компоненты, определяющие функциональность приложения. Примеры стандартных визуальных компонент – MainMenu (главное меню), PopupMenu (контекстное меню), Edit (строка редактирования), Memo (редактор), Button (стандартная кнопка), ListBox (список) и другие. 17. Разработка приложений для Windows в Delphi Программа в среде Delphi состоит из описания класса, соответствующего главной форме приложения и всем используемым в нем формам, а также из кода, выполняющегося при обработке того или иного события, и дополнительного кода, определяющего функциональность конкретной программы . Обычно процедуры и функции, входящие в дополнительный код, вызываются из методов-обработчиков событий и если они не связаны напрямую с интерфейсными элементами, то могут быть вынесены в отдельный модуль. Подготовить обработчик требуемого события можно так : Выберите на форме нужный обьект, к которому будет относиться рассматриваемое событие . В инспекторе обьектов перейдите на вкладку Events (События). Найдите в списке событий строку с именем нужного события. Дважды щелкните на правой части соответствующей строки. Система сгенерирует нужный программный код и переключиться в редактор. 18. Многооконные MDI и SDI – приложения Любое сложное Windows-приложение предполагает использование большого количества окон. Их число может доходить до нескольких сотен. Интерфейс менее сложных программ, создаваемых для выполнения ограниченного набора функций, например, программ-утилит, может содержать одно окно с несколькими панелями (закладками). При создании многооконных приложений используются два основных стиля – MDI и SDI. MDI (MDI -Multi Document Interface) –предполагает создание главного окна MDI (его обычно называют рамочным), внутри которого по мере надобности появляются дочерние окна. Дочерние окна не могут выходить за пределы главного окна. В MDI-приложениях есть специальные средства управления взаимодействием рамочного окна с дочерними окнами. Например, каждое дочернее окно в момент активизации может нужным образом настроить главное меню рамочного окна (дочерние MDI-окна не имеют собственного главного меню). Пример: MS Office. Cтиль SDI (SDI - Single Document Interface) в противоположность MDI не накладывает ограничений на положение и размеры вспомогательных форм, каждая из которых при необходимости может иметь свое главное меню. В стиле SDI реализована, например, среда Delphi. В рамках SDI-приложений могут использоваться рамочные MDI-формы со своими дочерними окнами, так что термин SDI носит весьма условный характер и применяется в основном для противопоставления давно используемому термину MDI. Стиль формы задается одним из значений свойства FormStyle. TFormStyle = (fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop) ; property FormStyle: TFormStyle; Стиль fsNormal определяет обычную форму, использующуюся для решения самых различных задач, в том числе - для общего управления всей программой (главная форма). fsNormal определяет окно в стиле SDI. Стили fsMDIChild и fsMDIForm используются при создании многодокументных приложений в стиле MDI. Стиль fsStayOnTop предназначен для окон, которые всегда должны располагаться над всеми другими окнами программы (в терминологии Windows такие окна называются Popup Window, что буквально переводится как окно-поплавок). В момент активизации окна оно обычно становится видимым на экране, даже если перед этим его загораживали другие раскрытые окна. Стиль fsStayOnTop препятствует перекрытию окна другими окнами, даже если оно становится неактивным и теряет фокус ввода. Как показывает практика, объявление окна со стилевым признаком fsStayOnTop еще не решает проблему создания окна-поплавка. Чтобы создать окно-поплавок, нужно обратиться к API-функции SetWindowPos. 19. Управление формами Для подключения новой формы к проекту достаточно выполнить (File | New | Form). Можно выбрать форму из репозитория (File | New | Other) и выбрать нужную разновидность формы. Менеджер проекта автоматически подключает новую форму к списку используемых форм и обеспечивает все необходимые действия по ее инициации. Самая первая подключенная к проекту форма (стандартное имя формы - Form1) становится главным окном программы. Окно этой формы автоматически появляется на экране в момент старта программы. Программист может указать любую форму, окно которой станет главным. Для этого нужно обратиться к опции Project | Options и, раскрыв список Mainform, выбрать нужную форму. Чтобы главное окно Form1 знало о существовании другого окна Form2, его надо объявить в разделе Usesсекции Implementation главного модуля Unit1: implementation uses Unit2; Здесь Unit2 – модуль окна Form2. Объявление можно сделать автоматически. Для этого нужно активизировать главное окно Form1, щелкнув по нему мышью, после чего обратиться к опции File | uses unit. В появившемся диалоговом окне нужно выбрать модуль (Unit2) и нажать ок. Каждое следующее окно становится видно только после обращения к его методу show. Form2.Show; При вызове метода show второе окно появляется на экране и работает одновременно с первым, поэтому управление сразу передается оператору, стоящему за обращением к этому методу. Такие окна называются немодальными. Переход из окна в окно осуществляется щелчками мышки. Чтобы программно сделать второе окно активным, надо сделать окно видимым и применить метод SetFocus Form2.Show; Form2.SetFocus; Впрочем работает и если просто выполнить Form2.Show.
20. Главное меню формы. Слияние меню окон SDI-приложений Главное меню формы создается с помощью компоненты класса TMainMenu (панель Standard). На форму можно поместить сколько угодно объектов этого класса, но отображаться в полосе меню в верхней части формы будет только тот из них, который указан в свойстве Menu формы. После установки компонента на форму необходимо создать его опции. Для этого следует дважды щелкнуть по компоненту левой кнопкой мыши, либо нажать на нем правую кнопку и выбрать продолжение Menu Designer в появившемся вспомогательном меню. Для создания опций. Перейдите в окно Инспектора объектов и введите текст опции в свойстве caption, после чего нажмите Enter - опция готова, и можно переходить к следующей. Каждая опция главного меню может раскрываться в список подопций или содержать конечную команду. Для создания подопций щелкните мышью по строке ниже опции и введите первую подопцию. В названиях опций можно указать символ “&” перед тем символом, который определит клавишу быстрого выбора опции (в терминологии Windows такие клавиши называются акселераторами). Например, опцию Файл можно выбрать сочетанием клавиш Alt+Ф. При создании меню эта опция в строке caption Инспектора объектов содержит текст &Файл. Если вы захотите вставить разделительную черту, отделяющую группы подопций, задайте свойство Caption очередного элемента меню равным “-”. Для создания разветвленных меню, т. е. таких, у которых подопций вызывают новые списки подопций, щелкните правой кнопкой мыши на подопции и выберите Create Submenu. Чтобы не запутаться, можно в Menu Designer изменить свойство Name каждой опции меню, чтобы получилась иерархия. type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; N11: TMenuItem; N12: TMenuItem; N13: TMenuItem; N131: TMenuItem; N132: TMenuItem; N2: TMenuItem; N21: TMenuItem; N22: TMenuItem; N23: TMenuItem; Для элемента меню определено единственное событие Onclick, которое возникает при щелчке на опции или при нажатии Enter, если в этот момент данная опция была выбрана (подсвечена). Обработчик события становится доступен после двойного щелчка на опции в окне конструктора меню Слияние меню окон SDI-приложений Если одна форма вызывает другую (вторичную) форму в немодальном режиме, главное меню первой формы может сливаться с главным меню вторичной формы. Для этого свойство AutoMerge меню вторичной формы должно иметь значение True. Порядок слияния опций в этом случае устанавливается свойствами Groupindex опций второго меню. Чтобы продемонстрировать механизм слияния меню, проделайте следующее: Создайте форму Form1 с меню приведенной выше структуры. Создайте форму Form3 с заголовком "Окно № 3". Поместите на неё меню с одним пунктом "Закрыть окно № 3". Обработчик щелчка по опции будет иметь вид: procedure TForm3.N1Click(Sender: TObject); begin Form1.MainMenu1.Unmerge(MainMenu1); //восстановление к виду до слияния Form3.Close end; Объявите модули форм друг в друге в разделах Uses секции Implementation. В пункте 1-2 меню формы Form1 вставьте подменю, вызывающее окно вторичной формы Form3 в немодальном режиме. Обработчик щелчка по опции будет иметь вид: procedure TForm1.N12Click(Sender: TObject); begin Form3.show end; Чтобы поместить меню формы Form3 на форму Form1 установите свойство AutoMerge меню формы Form3 в True. Чтобы слить меню форм Form1 и Form3 установите свойство GroopIndexопции меню формы Form3 в 1. Свойство AutoMerge вторичного окна игнорируется, если оно вызывается в модальном режиме, а также если оно является дочерним окном MDI. 21.Приложения , управляемые событиями К событиям ,обрабатываемым формой (компонент типа TForm), являющейся базовым интерфейсным элементом любой программы, относятся, например, события OnActivate, OnCreate, OnClose. Событие OnActivate форма получает при её активизации, в частности, когда пользователь нажал кнопку мыши в её рабочей области . Событие OnCreate возникает при начальном создании формы . В его обработчике можно, например, задававать исходные значения свойствам формы, а также другие действия, происходящие в момент её создания. Событие OnClose наступает при закрытии формы. Отметим также некоторые события от клавиатуры и мыши : Событие OnKeyDown происходит при нажатии на клавиатуре. Событие OnKeyUp возникает, когда пользователь отпускает нажатую ранее клавишу. Событие OnClick возникает при нажатии кнопки мыши в области компонента. Событие OnMouseMove происходит при перемещении мыши. 22. Понятие события. Обработчики событий. Событийное программирование, следующий шаг от алгоритмического программирования. Событие – это свойство процедурного типа, т.е. свойство, которое содержит обработчик события. Обработчик события – процедура, которая выполняется, когда событие имеет место быть. Идентификатор процедуры – обработчика события формируется следующим образом: <Имя компонента ><производная от имени события>. TForm1.FormMouseUp 23. Обработка событий от мыши А.Я. Архангельский, стр. 328 Управление большинством программ в Windows осуществляется с помощью мышки. Нам уже известно одно событие, связанное с сигналом от мыши: OnClick. Для большинства видимых компонентов определен следующий набор событий, связанных с мышью: OnMouseDown и OnMouseUp определяют реакцию программы на соответственно нажатие и отпускание кнопки мыши, OnMouseMove - на перемещение указателя мыши над компонентом, OnClick и OnDblClick - соответственно на щелчок и двойной щелчок левой кнопки. Процедура-обработчик события вставляется в модуль после двойного щелчка по полю справа от имени события в закладке Events Инспектора Объектов. Идентификатор процедуры – обработчика события от мыши формируется следующим образом: <Имя компонента (свойство Name)><Имя события без On>. Например, Button1Click. TForm1.FormMouseDown В качестве параметров обработчиков событий используются переменные следующих типов: TMouseButton определяет одну из трех кнопок мыши: левую (mbLeft), правую (mbRigth) и среднюю (mbMiddle). TMouseButton= (mbLeft, mbRight, mbMiddle) ; TShiftState содержит признаки, уточняющие обстоятельства возникновения события: ssShift - нажата клавиша Shift; ssAlt -нажата клавиша Alt; ssctrl - нажата клавиша Ctrl; ssLeft - нажата левая кнопка мыши; ssRight - нажата правая кнопка; ssMiddle -нажата средняя кнопка; ssDouble - нажаты одновременно левая и правая кнопки. TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble); Параметры х и y типа Integer определяют координаты точки чувствительности указателя мыши в момент возникновения события в системе координат клиентской области родительского компонента. |