FlashWindow(Screen.Active Form.Handle,False);
Cursor
Это свойство определяет форму указателя мыши для всего приложения. Обычно оно используется для отображения песочных часов, чтобы в то время, пока пользователь думает о сложной работе, выполняемой приложением, немного передохнуть.
{Придать курсору форму песочных часов.}
Screen.Cursor:= crHourglass;
try
{Попытаемся ничего не делать какое-то время.}
for iCount:=1 to 1000000000 do;
finally
{Восстановим форму указателя.}
Screen.Cursor:= crDefault;
end;
Форму указателя можно изменить для каждого потомка TControl (включая ТForm) отдельно.
Forms и FormCount
Эти свойства возвращают список форм и их количество. Работа с ними ничем не отличается от работы со списком дочерних окон, описанных в разделе „MDIChildren и MDIChildCount“.
Height и Width
Это наиболее полезные свойства, возвращающие высоту и ширину экрана в пикселях. Они могут применяться во многих ситуациях, например при определении местоположения формы. Вот как поместить форму в центре экрана.
Left:= (Screen.Width — Width) div 2;
Top:= (Screen.Height — Height) div 2;
События TScreen
tscreen предоставляет два основных события, извещающие программу об изменении фокуса ввода. Подобно возможностям класса TApplication, возможности класса TScreen доступны лишь при выполнении.
OnActiveControlChange
Это событие возникает при передаче фокуса ввода от одного управляющего элемента к другому. Свойство
ActiveControl обновляется непосредственно перед вызовом события. Вы можете использовать событие, например, для вывода текста подсказки в строке состояния.
procedure TFormI.ActiveControlChangeHandler(Sender: TObject);
begin
if (not Application.Terminated) then
pnlStatus.Caption:= ActiveControl.Hint;
end;
Проверка связана с тем, что событие генерируется и при закрытии приложения, а при этом обращение к уже уничтоженному объекту вызовет исключительную ситуацию.
OnActiveFormChange
Событие генерируется при создании новой формы или передаче фокуса ввода от одной формы к другой. Обычно это событие используется в MDI-приложениях для обновления доступных функций меню и кнопок-ускорителей. Ниже приведен пример из шаблона MDI-приложения.
procedure TMainForm.UpdateMenuItems(Sender: TObject);
begin
FileCloseItem.Enabled:= MDIChildCount 0;
FileSaveItem.Enabled:= MDIChildCount 0;
FileSaveAsItem.Enabled:= MDIChildCount 0;
end;
Процедура UpdateMenuItems назначена в качестве обработчика событию OnActiveFormChange в обработчике
OnCreate.
procedure TMainForm.FormCreate(Sender: TObject);
begin
Application.OnHint:= ShowHint;
Screen.OnActiveFormChange:= UpdateMenuItems;
end;
Разделяемые обработчики событий
Как вы уже знаете, каждый класс способен генерировать свои собственные события. Каждое из них имеет определенный тип, как, например, TNotifyEvent у OnClick и TCloseEvent у OnClose. Delphi позволяет написать один обработчик события и назначить его нескольким событиям одновременно.
Представьте себе объект TEdit, генерирующий события OnKeyDown и OnKeyUp. Поскольку оба события — одного типа, можете написать одну процедуру и назначить ее обоим событиям. Процедура будет вызываться дважды при каждом нажатии клавиши (при нажатии и отпускании). Или, например, вы можете создать один обработчик для событий OnCreate и OnClick.
Еще одно общее назначение разделяемых обработчиков — обработка событий от двух различных управляющих элементов, которые могут и не быть экземплярами одного класса.
Вот как создать разделяемый между классами TButton и TEdit обработчик OnClick.
Выберите из меню File/New Application для создания приложения.
Поместите TButton в форму и введите в обработчик OnClick следующий код. procedure TFormI.ButtonlClick (Sender: TObject);
begin
Editl.SetFocus;
Editl.SelectAll;
end;
Поместите TEdit в форму. В Object Inspector выберите в списке для события OnClick обработчик ButtonClick. Теперь после щелчка на кнопке и на объекте TEdit будут выполняться одни и те же действия, фокус ввода будет передаваться управляющему элементу TEdit, и весь текст в нем будет выделяться.
Параметр Sender
Поскольку множество объектов может разделять один обработчик событий, необходимо уметь выяснять, какой именно обработчик его сгенерировал. Для этого предназначен параметр Sender, передаваемый в каждый обработчик, который указывает на объект, сгенерировавший событие. Часто этот параметр используется для различных действий обработчика в зависимости от того, кто именно породил событие.
Создание одноэкземплярного приложения
Если в Windows несколько раз щелкнуть на пиктограмме приложения, по умолчанию запустится сразу несколько его копий. Чтобы избежать этого, т. е. не дать запуститься второй копии приложения, необходимо выполнить поиск по заголовкам окон.