Привет, Гость! Регистрация RSS
Среда, 15.05.2024
Главная » Статьи » Основные статьи сайта

Стандартные действия

Те, кто собирается пропустить этот раздел, считая, что в нем описаны очевидные вещи, сильно ошибаются. Как раз в применении стандартных действий разработчики Borland продвинулись очень сильно. Кто хочет в этом убедиться, может открыть пример WordPad, поставляемый с Delphi 7. Полнофункциональный текстовый редактор, построенный полностью на стандартных действиях, содержит всего две строчки кода.

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

Возьмем, например, действие TFiieOpen. Оно уже содержит внутри компонент типа TOpenDialog, показывающий список открываемых файлов. Вместо ручного программирования процедуры задания имени файла теперь нужно написать обработчик события TFiieOpen.OnAccept (если пользователь ввел в диалоге кнопку ОК) или Oncancei (если отказался от открытия файла). Вот так выглядит весь программный код приложения WordPad:

procedure TForml.FileOpenlAccept(Sender: TObject);

begin

   RichEditl.Lines.LoadFromFile(FileOpenl.Dialog.FileName);

end;

procedure TForml.FileSaveAslAccept(Sender: TObject);

begin

   RichEditl.Lines.SaveToFile(FileSaveAsl.Dialog.FileName);

end;

С точки зрения программирования стандартное действие — это класс-потомок TCustomAction. Классы действий описаны в трех модулях: более распространенные в stdActns, менее — в ExtActns, действия с наборами данных содержатся в DBActns. Наконец, два действия, работающие со списками, — TStaticListAction и TVirtualLitAction — описаны в отдельном модуле ListActns.

Для выполнения ряда стандартных действий нужно определить понятие "цели" действия (Action Target). Под целью понимается компонент, в отношении которого будет совершаться данное действие. Так, операции редактирования могут выполняться, когда на форме активен текстовый элемент управления (TEdit, TMemo И Т. П.). У любого действия (потомка TBasicAction) есть три метода:

function HandlesTarget(Target: TObject): Boolean; virtual;

procedure UpdateTarget(Target: TObject); virtual;

procedure ExecuteTarget(Target: TObject); virtual;

Метод HandiesTarget проверяет, применимо ли действие к цели Target. Если да, то действие производится вызовом метода ExecuteTarget. Если нет, поиск подходящей цели продолжается.

Цель в Delphi 7 определяется по следующему правилу:

• первым кандидатом является активный элемент управления на форме (СВОЙСТВО ActiveControl) ;

• если такового нет или он не является подходящим (метод HandiesTarget вернул значение False), целью становится текущая форма, получившая сигнал о действии;

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

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

Многие классы стандартных действий не требуют элемента управления — цели. Так устроены все действия, вызывающие стандартные диалоговые окна (выбор файла, цвета, шрифта, настройка принтера и т. п.). Чтобы отреагировать на такое действие, нужно написать обработчики следующих событий:

property BeforeExecute: TNotifyEvent;

property OnAccept: TNotifyEvent;

property OnCancel: TNotifyEvent;

Первое возникает до показа диалога, второе — после нажатия пользователем кнопки ОК, третье — после нажатия Cancel.

Поместив на форму стандартные действия, вы заметите, что все они имеютпредопределенное значение свойства imageindex. Если так, то где изображение, на которое эти индексы указывают? Вы можете раздобыть его, открыв демонстрационный проект WordPad (папка Demos\ActionBands в поставке Delphi 7). Откройте редактор компонента imageListl и экспортируйте весь список в виде одного большого файла формата BMP.

Категория Edit

В эту категорию входят компоненты, которые работают с редактируемыми элементами — потомками TCustomEdit. Это, к примеру, TEdit, TMemo, TMaskedEdit, TRichEdit, НОВЫЙ Компонент TLabeledEdit и др. Причем целью может являться не любой редактируемый элемент, а только тот, что имеет фокус ввода. К категории относятся: TEditCut, TEditCopy, TEditPaste, TEditSelectAll, TEditDelete, TEditUndo.

Категория Search

Действия поиска и замены тоже производятся только над потомками TCustomEdit. И это не прихоть разработчиков Borland: это сделано для вашего же удобства. Раньше для поиска приходилось самому программировать события onFind и onRepiace соответствующих диалогов, а сейчас требуемый код уже содержится внутри действий.

К компонентам ЭТОЙ категории ОТНОСЯТСЯ: TSearchFind, TSearchFindFirst, TSearchFindNext, TSearchReplace.

Категория Help

С помощью этих действий (табл. 8.2) вы можете вызвать справочную систему вашего приложения.

Таблица 8.2. Стандартные действия категории Help

Компонент

Назначение

THelpContents

Показывает оглавление системы справки

THelpOnHelp

Показывает подсказку по использованию системы справки

THelpContext

Показывает справку по контексту активного элемента управления (причем он должен быть ненулевым)

THelpTopicSearch

Показывает окно поиска системы справки

 Категория File

Эти действия скорее всего будут наиболее востребованы разработчиками. И они же являются довольно простыми в использовании TFileOpen, TFileSaveAs, TFilePrintSetup — это оболочки над соответствующими диалогами. О том, как работать с такими действиями, описано выше. Действие TFileExit вообще не требует комментариев — оно просто завершает приложение, закрывая его главную форму.

ОсобНЯКОМ СТОИТ ТОЛЬКО TFileRun!!!

Категория Dialog

Эта категория примыкает к предыдущей, в ней содержатся остальные пять типовых действий-диалогов: TPrintDlg, TColorSelect , TFontEdi t (из модуля StdActns), TOpenPicture, TSavePicture (модуль ExtActns).

Категория Window

Эти действия стоит включать в интерфейс, только если вы используете многодокументный интерфейс (MDI). Названия компонентов говорят сами за себя: TWindowClose, TWindowCascade, TWindowTileHorizontal, TWindowTileVertical, TWindowMinimizeAll, TWindowArrange.

Категория Tab

Здесь всего два компонента — TNextTab и TPreviousTab. Если цель действия — набор страниц (TPageControi), они переключат его на следующую и предыдущую страницу соответственно.

Категория List

В этой категории выделяются две группы действий. Первые пять из них (табл. 8.3 ) автоматизируют работу с выделенными элементами списков. Оставшиеся два — TStaticListAction И TVirtualListAction — Требуют ОТДеЛЬного рассмотрения.

Таблица 8.3. Действия по работе с выделенными элементами списка

Действие

Назначение

TListControlSelectAll

Выделяет все элементы списка. Активно, только если у списка свойство MultiSelect установлено в значение True.

TListControlClearSelection

Отменяет выделение элементов в списке

TListControlDeleteSelection

Удаляет выделенные элементы

TListControlCopySelection

Копирует выделенные элементы списка в список Destination

TListControlMoveSelection

Переносит выделенные элементы списка в спи сок Destination

Категория Internet

Здесь всего три — типовых для пользователя Сети — действия. Действие TBrowseURL открывает URL, заданный в одноименном свойстве. Поскольку это происходит при помощи функции ShellExecute , для просмотра открывается браузер, зарегистрированный в системе по умолчанию.

Действие TSendMaii запускает программу — почтового клиента для отправки письма (с помощью интерфейса MAPI). Текст письма вы можете задать в свойстве Text. Но! Ни получателя, ни тему, ни вложений задать нельзя — это придется делать вручную в почтовой программе. При желании полностью автоматизировать процесс отправки вам придется породить дочерний Компонент ОТ деЙСТВИЯ TSendMaii, Где И Перекрыть метод ExecuteTarget. Исходные тексты — в модуле ExtActns.

Наконец, самый сложный компонент TDownioadURL. Он позволяет загрузить содержимое с адреса URL и сохранить его на локальной машине под именем FileName.

Поскольку загрузка — процесс долгий, в то время, пока она происходит, периодически возникает событие

property OnDownloadProgress: TDownloadProgressEvent;

TDownloadProgressEvent = procedure(Sender: TDownLoadURL; Progress,

ProgressMax: Cardinal ; StatusCode: TURLDownloadStatus; StatusText : String;

var Cancel: Boolean) of object ;

Параметры обработчика этого события следующие.

• Progress и ProgressMax — текущее и максимальное значение показателя хода скачивания. Во-первых, не все HTTP-серверы правильно сообщают о размере ответа; во-вторых, для некоторых типов файлов (например, HTML) эти параметры вычисляются не всегда верно (вы можете это видеть в Internet Explorer); в-третьих, из-за маршрутизации пакетов ожидать ритмичного изменения параметра Progress не следует. Поэтому пользователю надо показывать соотношение Progress/ProgressMax.

• StatusCode и StatusText — код, описывающий текущее состояние операции и соответствующий ему текст. Список возможных кодов содержит около 30 значений. Для тех, кто знает протокол HTTP и хочет разобраться в этом глубже, следует обратиться к описанию интерфейса IBindstatusCallback в MSDN. Если же вам достаточно показать пользователю текст, то он содержится во втором параметре. По содержанию он представляет примерно то же, что вы видите при загрузке файлов с помощью Internet Explorer.

• cancel — этот параметр одинаков для всех долго продолжающихся операций. Установив его в значение True, вы можете прервать выполнение загрузки.

Категория Format

Действия этой категории представляют собой расширенные операции редактирования для "продвинутого" редактора TRichEdit. Эти операции должны быть знакомы вам по программе WordPad из состава Windows. В крайнем случае откройте демонстрационный пример Delphi с тем же названием — там присутствуют действия настоящей категории и подавляющее большинство остальных. В списке присутствуют TRichEditBold, TRichEditltalic, TRichEditUnderline, TRichEditStrikeout (установка СТИЛЯ шрифта), TRichEditBullets (значки абзацев), TRichEditAlignLeft, TRichEditAlignRight, TRichEditAiignCenter (выравнивание текста).

Категория Dataset

Эти действия можно увидеть, например, в качестве кнопок на любом компоненте TDBNavigator: TDataSetFirst, TDataSetPrior, TDataSetNext, TDataSetLast, TDataSetDelete, TDataSetlnsert, TDataSetEdit, TDataSetPost, TDataSetcancel, TDataSetRefresh. Читатель задаст вопрос: а как действие связывается с набором данных? Очень просто: через дополнительное (для данной категории) свойство DataSource. Если источник данных существует и связан с имеющимся набором данных (свойство DataSource.DataSet), то действие выполняется над ним.

Категория Tools

Здесь содержится один-единственный член: TCustomizeActionBars. Будучи вызванным, это действие вызывает диалог настройки панелей действий, относящихся к компоненту TActionManager.

Нравится
Категория: Основные статьи сайта | Добавил: Dark_Green (20.10.2012)
Просмотров: 2824 | Теги: Search, Window, Dataset, file, Edit, Dialog, format, Tab, help, list | Рейтинг: 0.0/0

Другие статьи
»
Мультимедиа в Delphi (0)
»
Загрузка изображения из графического файла с использованием стандартного диалога открытия графически... (0)
»
Применение ini-файлов в Delphi (1)
»
Процедуры и функции в Delphi (0)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]