Процедуры обработки событий
Для каждого объекта существует набор событий, на которые может реагировать объект. Алгоритм этой реакции задается процедурой пользователя обработки этого события либо стандартной процедурой (командой), которая называется методом. Текст процедуры набирается в программном окне, которое вызывается двойным щелчком по полю значения нужного события на странице Events Инспектора объектов. Имя процедуры состоит из имени формы, точки, имени объекта и имени события без первых двух букв «On». Мышь OnMouseDown/ OnMouseUp ‑ нажатие/отпускание любой кнопки мыши. OnClick ‑ щелчок левой кнопкой мыши по объекту.При нажатии кнопки мыши генерируются события в порядке: OnMouseDown, OnClick (для левой кнопки), OnMouseUp. OnDblClick ‑ двойной щелчок левой кнопкой мыши по объекту. События генерируются в порядке: OnMouseDown, OnClick, OnMouseUp, OnDblClick, OnMouseDown, OnMouseUp. OnMouseMove ‑ перемещение указателя мышки над объектом. Процедуры обработки этих событий могут иметь следующие параметры: Sender ‑ указывает имя объекта над которым находится маркер мыши. Для получения значения имени объекта можно использовать выражение вида: (Sender As TControl).Namе. Пример: Label1.Caption:= ‘Объект ‘+(Sender As TControl).Namе; Shift ‑ указывает на состояние (нажатие) клавиш Alt, Ctrl, Shift и кнопок мыши в виде комбинации констант (в квадратных скобках через запятые): ssShift (нажата клавиша Shift), ssAtt (Alt), ssCtrl (Ctrl), ssLeft (левая кнопка мыши), ssMiddle (средняя кнопка мыши), ssRight (правая кнопка мыши), ssDouble (выполнен двойной щелчок). X,Y ‑ координаты указателя мышки в пикселях относительно левого верхнего угла формы, начиная с нуля.
Пример: Procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin If (Sender=button1) And (ssCtrl in Shift) Then {можно Shift=ssCtrl}
Label1.Caption:='Нажаты кнопка мыши и Ctrl над кнопкой Button1'; end; Клавиатура OnKeyDown ‑ непрерывно генерируется событие при удерживании любой клавиши в нажатом состоянии. OnKeyPress ‑ при каждом нажатии любой клавиши, кроме Tab. OnKeyUp ‑ при отпускании любой клавиши, кроме Tab. События наступают в последовательности их описания. Процедуры обработки этих событий могут иметь следующие параметры: Sender ( имя объекта), Shift (описан выше) и Key. Параметр ‑ переменная Key задает символ, в KeyPress, или его код (именованная константа (п. 1.1.1)), который соответствует нажатой клавише. Если в процедуре обработки события параметру Key задать символ с нулевым кодом (#0), то это вызовет отмену нажатия клавиши. Пример ввода только цифровых символов, другие игнорируются: Procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); Begin If (key <'0') Or (key >'9') Then Key:=#0; End; Перемещение объектов OnStartDrag ‑ генерируется источником в начале перемещения. Обработчику передаются параметры: Source (объект ‑ источник), DragObject (адресат перемещения). OnDragOver ‑ вызывается приемником, когда перемещаемый объект находится над приемником. Обработчику передаются параметры: Source (объект ‑ источник), Sender (объект ‑ приемник), X, Y (координаты указателя мышки), State (состояние перемещения), Accept (подтверждение перемещения ‑ True). OnDragDrop ‑ вызывается приемником при размещении на нем объекта. Обработчику передаются параметры: Source (объект ‑ источник), Sender (объект ‑ приемник), X,Y (координаты указателя мышки). OnEndDrag ‑ вызывается источником при завершении перемещения. Обработчику передаются параметры: Target (объект ‑ приемник), X,Y (координаты точки, в которой был отпущен объект ‑ источник Sender). Для перемещаемого объекта следует указать свойство DragMode=dmAutomatic. Обычно для перемещения достаточно обработать события OnDragOver, OnDragDrop. Пример перемещения поля Edit1 (DragMode=dmAutomatic):
Procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); Begin Accept:=(Source=Edit1); End; Procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer); Begin Edit1.Left:=X;Edit1.Top:=Y;End;//координаты нового положения Пример перемещения элемента списка ‑ источника ListBox1 со свойством DragMode=dmAutomatic в список ‑ приемник ListBox2: Procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); Begin Accept:=Source=ListBox1; End; //подтверждение переноса Procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer); Begin With Source As TListBox Do Begin //присоединение объекта ListBox1 ListBox2.Items.Add(Items[ItemIndex]);//добавление элемента из ListBox1 в 2 Items.Delete(ItemIndex);{удаление скопирован. элемента из ListBox1}End; Другие события OnEnter/OnExit ‑ получение/потеря фокуса элементом управления. OnHint ‑ указатель мыши неподвижен некоторое время на объектe. OnResize ‑ событие происходит при изменении размеров объекта. В процедуре обработки этого события для формы можно изменить размеры объектов, расположенных на форме, или восстановить размеры формы. OnChange ‑ событие происходит при изменении состояния объекта. В процедуре обработки этого события (например, при вводе данных), можно проверить правильность вводимой информации или блокировать (разблокировать) отдельные объекты в зависимости от введенного значения. Методы Методом можно назвать команду, которая отдается объекту. При ссылке на метод следует указать имя объекта (значение свойства Name), точку и имя метода и далее параметры метода в круглых скобках. Assign(Source:TPersistent) ‑ присвоение содержимого одно объекта другому совместимому объекту (копирование содержимого объекта (п.2.3.3.2)). < тип создаваемого объекта >.Create(Self) ‑ создание объекта. Пример создания формы Form3: If Not Assigned (Form3) Then Form3:=TForm3.Create(Self);//создание Clear ‑ очистка содержимого объекта с текстовой информацией. Пример: ListBox2.Clear; RichEdit1.Clear; Edit1.Clear; Memo2.Clear; Create и Free ‑ создание и удаление объекта. LoadFromFile(S) ‑ загрузка файла под именем S (п.2.3.2.3). Perform (Msg: Cardinal, WParam; LParam: LongInt): LongInt ‑ посылает сообщение (команду) с кодом Msg оконным объектам. Пример посылки команды lb_GetCount подсчета числа элементом в списке ListBox1 и вывод полученного числа в надписи Label1: Label1.Caption:=IntToStr(ListBox1.Perform(lb_GetCount,0,0)); Refresh ‑ повторное формирование и визуализация формы или объекта. Обычно используется после изменения свойств объекта для вывода его с новыми свойствами.
Пример: Button2.Caption:='Выход'; Button2.Refresh; SaveToFile(S) ‑ вывод содержимого компонента в файл S (п.2.3.2.3). ScrollInView(AControl:TControl) ‑ изменяет позиции полос прокрутки так, чтобы объект, указанный параметром AControl, стал виден (п.2.3.5.5). SetFocus ‑ устанавливает фокус на определенном объекте. Установить фокус на объекте означает сделать объект текущим. Например, для текущего текстового поля курсор находится в данном поле, предлагая вводить данные в это поле. Естественно, не могут одновременно быть несколько объектов, на которые установлен фокус. При попытке установить фокус на объект, который не может его получать (его свойство Enabled=False), возникает ошибка. Для проверки его доступности можно использовать функцию (метод) CanFocus, которая возвращает True, если объект может получать фокус или проверять значение свойства Enabled. Пример: If Edit2.CanFocus Then Edit2.SetFocus //первый вариант If Edit2.Enabled Then Edit2.SetFocus //второй вариант Show/Hide ‑ показать/скрыть объект. Глобальные объекты Формы (Form) Форма является основой разработки приложения и на ней размещаются все необходимые компоненты. Форма служит окном Windows. Для создания новой формы нужно обратиться к репозиторию командой File/New и выбрать нужный тип формы. В приложении может быть несколько форм (окон), но одна из них называется главной, и она первой появляется после запуска приложения и ее закрытие прекращает работу приложения. Можно сменить главную форму командой Project/Options/Form/Main Form. Формы бывают двух типов: модальные (требуют обязательного закрытия перед обращением к другой форме) и немодальные (допускают переключение на другие формы без ее закрытия). Приложения бывают однодокументальные (SDI ‑ Single Document Interface), в которых ни одно окно не содержит в себе другие окна, и многодокументальные (MDI ‑ Multiple Document Interface) ‑ главное окно содержит дочерние окна. Форма включает клиентскую и не клиентскую части. Не клиентская часть занята рамкой, заголовком, системными кнопками окна и строкой главного меню формы, если она есть. Клиентская часть доступна для размещения объектов.
Свойства Active/ChildActiveForm ‑ обычное/дочернее окно активно, т.е. имеет фокус ввода (True). Родительское окно не может быть активным. ActiveControl ‑ определяет дочерний элемент, содержащий фокус. ActiveMDIChild ‑ определяет дочернее MDI ‑ окно с фокусом. AutoScroll‑ автоматическое появление полос прокрутки (True). BorderIcon ‑ определяет наличие в окне кнопок: biSystemMenu (меню), biMinimize (минимизации), biMaximize (максимизации), biHelp (помощи). BorderStyle ‑ стиль рамки окна: bsNone (заставка, нет рамки и заголовка, не может перемещаться и изменяться мышкой), bsSigle (размеры рамки не изменяются), bsSizeable (размеры рамки изменяются), bsDialog (диалоговое окно не означает, что окно модальное), bsToolWindow (панель инструментов), bsSizeToolWind (панель инструментов с изменяемыми размерами). Возможность изменения или неизменения размеров окон относится к мышке, а программно всегда можно изменить размеры окон. ClientHeight, ClientWidth ‑ высота и ширина клиентской части формы. FormStyle ‑ стиль формы: fsNormal (стандартный), fsMDIChild (дочерняя форма), fsMDIForm (родительская форма), fsStayOnTop (всегда вверху, для вывода заставки или системной информации). Icon ‑ имя файла с пиктограммой окна. Можно программно задать пиктограмму (Form3.Icon.LoadFromFile(‘Book.ico’). KeyPreview ‑ форма обрабатывает событие от клавиатуры перед обработкой активным объектом (True). MDIChildCount ‑ число дочерних окон в MDI ‑ окне. MDIChildren[I] ‑ открывается доступ к I‑му дочернему окну в MDI‑окне. Menu ‑ имя главного меню формы (п.2.3.8.1). ModalResult ‑ целочисленный результат диалога для модального окна. Position ‑ положение и размеры окна при появлении окна: poDesigned (запроектированное), poDefault (Windows), poDefaultPosOnly (положение при проектировании, размеры ‑ Windows), poDefaultSizeOnly (размеры при проектировании, положение ‑ Windows), poScreenCenter (в центре экрана). PrintScale ‑ определяет масштабирование формы при печати на принтере: poNone (нет, каждый пиксель выводится одной точкой), poProportional (пропорционально), poPrintToFit (пропорционально с заполнением листа). Scale ‑ разрешается масштабирование формы при различии значений свойств разрешающей способности PixelPerInch для формы и экрана. TitleMode ‑ стиль расположения дочерних окон при упорядочении мозаикой. VertScrollBar, HorzScrollBar ‑ управление вертикальной и горизонтальной полосами прокрутки при AutoScroll=False. WindowMenu ‑ определяет пункт главного меню MDI‑окна, к которому добавляются опции дочернего окна. WindowState ‑ состояние окна при его появлении: wsNormal (проектное), wsMinimized (свернутое), wsMaximized (на весь экран).
Методы ArrangeIcons ‑ упорядочение пиктограмм закрытых дочерних окон.
Cascade/Tile ‑ каскадное/мозаичное расположение дочерних окон. Close ‑ окно закрывается без его уничтожения и, по возможности, удаляется с экрана. Можно его снова показать методом Show. Метод помещает константу 2 (mrCancel) в свойство формы ModalResult. Закрытие главной формы завершает выполнение приложения. CloseQuery ‑ возвращает True, если можно закрыть окно. Application.CreateForm( <тип формы>,<имя формы> ) ‑ создание формы. Пример: Application.CreateForm(TForm2,Form2) DefocusControl( Control:TwinControl,R ) ‑ отбирает фокус у дочернего элемента Control и, если R=True, то фокус получает форма. FocusControl( Control:TwinControl ) ‑ передает фокус дочернему элементу Control. Free, Release, Destroy ‑ уничтожает окно и ее дочерние окна и освобождает память. Обращение к уничтоженным окнам вызовет ошибку. Рекомендуется использовать метод Free, который проверяет возможность удаления. GetFormImage ‑ содержит текущее изображение формы. Hide ‑ скрыть форму. Метод не изменяет значение свойства ModalResult. После скрытия свойство Visible:=False. Next/Previous ‑ переход к следующему/предыдущему MDI‑окну. Print ‑ распечатка окна на принтере. SendCancelMode(Sender:Tcontrol) ‑ восстанавливает начальное состояние окна. SelectNext(CurControl as TWinControl;GoForward,CheckTabStop:Boolean) ‑ передает фокус следующем/предыдущему (GoForward:=True/False) объекту, относительно объекта CurControl с учетом свойства TabStop (CheckTabStop:=True) объекта ‑ адресата (п.2.3.2.1). SetFocus ‑ передает фокус активной и видимой форме. Show ‑ показ формы в немодальном режиме. После свойство Visible:=True. ShowModal:Integer ‑ показ формы в модальном режиме и возвращение результата диалога. После возвращения свойство Visible:=True. События OnActive ‑ активизация окна Sender при получении фокуса. OnClose ‑ непосредственно перед закрытием окна Sender. Параметр‑переменная Action задает режим: caNone (не закрывать окно), caHide (скрыть окно,), caFree (уничтожить окно), caMinimize (свернуть окно). При закрытии (Close)/уничтожении окна Action= caHide / caFree. Событие возникает при закрытии окна щелчком по системной кнопке закрытия окна или при вызове метода Close. При закрытии главного окна все остальные окна закрываются без генерации этого события. OnCloseQuery ‑ перед закрытием окна Sender. Обработчик задает параметру‑переменной CanClose значение True при закрытии окна. Пример подтверждения закрытия окна: CanClose:=MessageDlg(‘Закрыть?’,mtConfirmation,[mbYes,mbNo],0)=MrYes OnCreate ‑ при создании окна перед его появлением на экране. Можно, например, установить начальные свойства формы и ее объектов, открыть файлы, сформировать значения полей, списков, установить фокус, заблокировать или разблокировать объекты. OnDeactivate ‑ при потере фокуса. OnDestroy ‑ перед разрушением окна для освобождения ресурсов. OnHelp ‑ при обращении к справочной системе. Если обработчик укажет параметру‑переменной CallHelp=True, то получение помощи разрешается OnHide,OnShow ‑ момент исчезновения/появления окна. OnPaint ‑ при перерисовке окна, например, при активизации формы, если ее часть была закрыта другими формами. OnResize ‑ при изменении размеров окна. В обработчике можно изменить размеры объектов в окне пропорционально изменениям окна. При закрытии и уничтожении формы генерируются события в последовательности: OnCloseQuery, OnClose, OnDeactivate, OnHide, OnDestroy.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|