Описание работы. В данной работе наше приложение должно быть красиво оформлено с помощью пиктограмм

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

В Delphi для хранения списка пиктограмм используется компонент типа TImageList (список картинок), позволяющий хранить внутри себя изображения одинакового размера. Стандартным размером является 16x16. После помещения его на форму необходимо дважды щелкнуть на компоненте, при этом откроется редактор списка картинок, с помощью которого можно добавить в список новые картинки или удалить существующие.

Замечание

Картинки можно быстро получить, если их вырезать с экрана других paботающих приложений. Нажмите клавиши PrintScrn или Alt+PrintScrn, и в буфере обмена окажется требуемое изображение, которое затем можно вставить в любой графический редактор, например в PaintBrush.

Для нашей программы необходимо создать в любом графическом редакторе 8 изображений формата BMP размером 16 X 16. Примерный внешний вид таких изображения приведен на рис. 21.

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

Использование списка картинок TImageList вместо отдельных изображений позволяет значительно экономить ресурсы Windows, т.к. для списка на самом деле хранится одна большая картинка, имеющая в качестве составных частей все необходимые картинки. Экономия особенно заметна при использовании больших наборов изображений.

Замечание

Не используйте компоненты TSpeedButton и TBitBtn. Они устарели и оставлены в Delphi только для совместимости со старыми программами. Вместо TBitBtn надо использовать TButton, а вместо TSpeedButton - панель инструментов TToolBar с кнопками TToolButton.

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

Для того чтобы можно было назначить картинку любому из этих элементов, необходимо вначале установить в свойстве ImageList содержащего его компонента используемый список картинок, а затем в свойстве Imagelndex каждого элемента указать номер картинки из списка. Однако если наша программа основана на концепции действий, рассматриваемой ниже, вместо прямого задания значения свойства Imagelndex пункта меню или кнопки панели инструментов следует указать значение свойства Imagelndex соответствующего компонента TAction.

Для визуального контроля назначаемых действий следует указать свойство ImageList списка действий TAction. Тогда в редакторе действий слева от названий действий будет появляться назначенная пиктограмма.

Теперь перейдем к вопросу о создании действий. Как было сказано ранее, действия (TAction) в Delphi предназначены для однократного централизованного определения разнообразных команд. Условно схема использования действий приведена на рис. 22.

Для определения действия необходимо на форму поместить компонент типа TActionList, который может содержать в себе множество действий. Затем нужно дважды щелкнуть на нём мышкой, при этом откроется редактор действий. Нажатием на клавишу Insert можно добавлять новые действия, а на клавишу Delete - удалять. При выборе мышкой действия в списке оно становится доступным в инспекторе объектов. Список основных свойств и событий действий приведен в табл. 16-17.

В табл. 18 приведен список действий, который необходимо создать в нашей программе.

После того как созданы все необходимые действия, их необходимо назначить соответствующим пунктам меню и кнопкам. У этих компонентов имеется свойство Action, значение которого можно установить в инспекторе объектов с помощью выпадающего списка всех доступных в форме действий.

Таблица 16. Основные свойства объектов типа taction
Свойство Тип Комментарий
Caption String Название действия в меню
Category String Категория - используется для внутреннего упорядочивания действий внутри TActionList
Checked Boolean Отмечены ли галочкой пункты меню и нажаты ли соответствующие кнопки
Enabled Boolean Разрешена ли команда
Hint String Всплывающая подсказка для кнопок
ImageIndex Integer Код картинки в связанном списке картинок
ShortCut TShortCut Код горячей клавиши для вызова действия
Visible Boolean Видимы ли пункты меню и кнопки
Таблица 17. Основные события объектов типа taction
Свойство Комментарий
OnExecute Выполнение действия
OnUpdate Обновление информации о действии. Здесь можно изменить любые свойства действия в зависимости от текущего состояния программы. Обычно с помощью этого события запрещают недоступные команды (а следовательно, связанные с действием пункты меню и кнопки)
Таблица 18. Список действий, создаваемых в нашем приложении
Действие Описание
ActionRefкesh «Обновить дерево». Приводит к повторному считыванию информации о каталогах
ActionExpandAll «Раскрыть все». Вызывает раскрытие всех нераскрытых вершин дерева, а следовательно построение полного дерева каталогов дисков
ActionExit «Выход». Выход из программы
ActionAbout «О программе...». Выдает краткую информацию о программе

Замечание

Не забудьте указать свойство ImageList компонентов меню и панелей инструментов из выпадающего списка в инспекторе объектов для отображения в них картинок.

В нашем приложении необходимо сделать назначение действий для главного меню TMainMenu, локального (выпадающего) меню TPopupMenu и кнопкам панелей инструментов, рассматриваемых ниже.

При создании элементов меню, соответствующих действиям, не нужно указывать заголовки. Нужно задать свойство Action элемента меню, при этом заголовок, код картинки, горячая клавиша и обработчик события будут автоматически взяты из компонента TAction.

Локальное меню обычно появляется на экране при нажатии правой кнопки мышки на визуальных компонентах. Для этого у этих компонентов должно быть установлено свойство PopupMenu в инспекторе объектов из выпадающего списка доступных локальных меню TPopupMenu. В нашем случае достаточно назначить свойство PopupMenu только для формы. Тогда нажатие правой кнопки мышки в любом месте формы будет вызывать локальное меню.

Для редактирования состава локального меню необходимо, как и для главного меню формы, дважды щелкнуть на компоненте TPopupMenu, при этом появится редактор меню, работа с которым описана в предыдущих лабораторных работах. В нашем приложении локальное меню должно состоять из 4 пунктов, которым должны быть назначены все 4 действия из списка действий TActionList.

Замечание

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

Для создания панели инструментов с кнопками в Delphi используется компонент типа TToolbar. Для добавления в него новых кнопок в дизайнере форм необходимо нажать правую кнопку мыши на панели инструментов для вызова локального меню и выбрать соответствующий пункт. Добавляемые кнопки при этом имеют тип TToolButton. Как и пункты меню, кнопки имеют аналогичное свойство Action, при установке значения которого из выпадающего списка кнопки автоматически получат все остальные необходимые свойства (текст надписи, всплывающую подсказку, код картинки, обработчик события нажатия). По умолчании кнопки на панели инструментов отображаются только с картинкой без сопроводительной надписи. Для отображения с надписью (как в пункте меню) необходимо указать свойство ShowCaptions равным True.

В большинстве современных приложений, например в Microsoft Office, панели инструментов можно свободно перетаскивать по экрану с помощью мышки.

Для того чтобы это можно было делать, в Delphi имеется компонент типа TControlBar, который дополняет все помещаемые на него другие компоненты рамочкой и двумя вертикальными полосками слева для перетаскивания. Обычно в TControlBar помещают панели инструментов TToolbar. Поэтому перед размещением панелей инструментов на форме сначала необходимо поместить компонент TControlBar, а в него затем - панели инструментов.

Для того чтобы можно было вытаскивать визуальные компоненты (обычно, это панели инструментов) за пределы TControlBar, у них имеется свойство DragKind, которое необходимо установить в значение dkDock. При вытаскивании (в т.н. «плавающем» положении) панели инструментов помещаются в небольшом окне с заголовком, задаваемым в свойстве Caption панели. Для того чтобы панели инструментов могли приклеиваться не только в верхней части приложения, но и снизу и по бокам, необходимо просто разместить дополнительные компоненты типа TControlBar во всех нужных местах.

Теперь перейдем к размещению на форме компонентов. Внешний вид разрабатываемого нами приложения изображен на рис. 23. Условно окно состоит из трех основных частей. Слева размещен компонент типа TTreeView, предназначенный для представления иерархических структур, справа - список TListView. позволяющий создавать списки элементов, оформленные пиктограммами. В нижней части необходимо разместить компонент ТМепо для просмотра содержимого выбранного файла. Кроме того, в верхней части формы мы должны поместить компонент TControlВаr с панелями инструментов, а в самой нижней части формы - строку статуса типа TStatusBar.

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

Теперь рассмотрим, как можно использовать компоненты TTreeView и TListView. При запуске наша программа должна будет получить список всех доступных на компьютере дисков и поместить их в дерево. Затем, когда пользователь будет раскрывать соответствующие вершины в дереве, программа должна будет считывать содержимое соответствующего каталога и добавлять все найденные каталоги в дерево.

Для того чтобы добавить в дерево новую вершину, необходимо воспользоваться методом Add или AddChild объекта типа TTreeNodes, который доступен через свойство Items дерева TTreeView. Эти методы имеют два аргумента, первый из них задает базовую вершину, за которой необходимо добавить новую, а второй указывает название вершины. Если базовая вершина не указана (указан nil), то будет создана вершина самого верхнего уровня. Таким образом, метод Add добавляет вершину такого же уровня, как и базовая, а метод AddChild создает дочернюю.

Оба из указанных методов возвращают экземпляр объекта типа TTreeNode. Список его основных свойств приведен в табл. 19.

Компонент дерева TTreeView может порождать много разных событий, однако в нашей программе нам понадобятся только два. Событие OnExpanding происходит при попытке пользователя раскрыть вершину дерева. Мы должны в обработчике этого события проверить, раскрывалась ли эта вершина ранее, и если нет, то необходимо прочитать список всех соответствующих подкаталогов и добавить новые вершины в дерево.

Событие OnChange дерева происходит после того, как пользователь выберет в дереве другую вершину. В этом обработчике мы должны прочитать список всех файлов в выбранном каталоге и сформировать из них список в компоненте типа TListView. Кроме того, здесь же необходимо вывести в строку статуса полный путь выбранного каталога.

Таблица 19. Основные свойства объектов типа TTreeNode
Свойство Тип Комментарий
Count Integer Количество дочерних вершин
Data Pointer Предназначено для свободного использования программистом
HasChildren Boolean Имеет ли вершина в дереве слева от себя квадратик с плюсом, показывающий, что вершину можно раскрыть
Level Integer Уровень дерева, на котором находится вершина
ImageIndex Integer Код пиктограммы, появляющейся слева от вершины. Перед использованием этого свойства не забудьте задать свойство ImageList компонента TTreeView
SelectedIndex Integer Код пиктограммы, используемой в случае, если вершина выбрана в дереве
Text String Текст надписи вершины

Список типа TListView хорошо знаком любому пользователю Windows. Он используется в Проводнике Windows для представления списков файлов. Этот элемент имеет 4 стандартных режима работы: в виде списка, маленьких пиктограмм, крупных пиктограмм и в виде многоколоночного отчета. Мы будем использовать последний режим. Для его задания нужно свойство ViewStyle установить равным vsReport и затем создать список необходимых колонок. Для этого следует выбрать в инспекторе объектов свойство Columns компонента TListView и нажать на кнопку с многоточием или дважды щелкнуть на нем. При этом появится окно редактора колонок со списком колонок. В нем можно добавлять новые колонки, нажимая клавишу Insert, и удалять их, нажимая Delete. Если выделить нужную колонку в списке, то она станет доступной для редактирования в инспекторе объектов, где необходимо указать такие свойства, как текст заголовка Caption и ширину Width. Список основных свойств компонентов колонки TListColumn приведен в табл. 20.

Для добавления в список новых элементов необходимо воспользоваться вызовом Listview.Items.Add. Он возвращает элемент списка типа TListltera. Список его основных свойств приведен в табл. 21.

Таблица 20.Основные свойства компонентов типа TListColumn
Свойство Тип Комментарий
Caption String Заголовок колонки
ImaageIndex Integer Код пиктограммы, появляющейся слева от вершины. Перед использованием этого свойства не забудьте задать свойство ImageList компонента TListView
Width Integer Ширина колонки
MinWidth Integer Минимальная допустимая ширина колонки
MaxWidth Integer Максимальная допустимая ширина колонки
AutoSize Boolean Автоматический подбор ширины колонки. При изменении размеров списка (например, если пользователь растянет форму, а следовательно, и список) все колонки со значением этого свойства, равным True, сами изменят свою ширину так, чтобы суммарная ширина всех колонок была точно равна ширине самого списка
Таблица 21. Основные свойства объектов типа TListItem
Свойство Тип Комментарий
Caption String Текст надписи элемента списка
Data Pointer Предназначено для свободного использования программистом
ImageIndex Integer Код пиктограммы, появляющейся слева от вершины. Перед использованием этого свойства не забудьте задать свойство ImageList компонента TListView
SubItems TStrings Текст надписей во 2-й, 3-й и т.д. колонке

В Windows для каждого файла на диске можно получить пиктограмму, представляющую его в Проводнике. Для этого необходимо воспользоваться функцией Windows ExtractAssociatedIcon. После получения пиктограммы её необходимо поместить в список картинок ListImageList для списка файлов ListView. Так как функция ExtractAssociatedIcon возвращает пиктограмму размером 32x32, то в компоненте ListImageList необходимо указать эти же размеры для составляющих картинок.

Замечание

Признаком хорошего пользовательского интерфейса является возможность легкой настройки размеров рабочих зон на форме. Для этого используйте компоненты типа TSplitter.

При выборе элемента в списке TListView возникает событие OnClick, в ответ на которое мы должны считать содержимое выбранного файла и отобразить его в компоненте TMemo. В заключение отметим, что в нашей форме размещено два компонента типа TSplitter: вертикально между деревом и списком и под ними горизонтально над текстом файла. Эти компоненты позволяют пользователю с помощью мышки изменять соотношение размеров разделяемых компонентов. Для этого необходимо, чтобы один из разделяемых компонентов имел свойство Align равным alLeft, alRight, alTop или alBottom, а второй - alClient. При этом разделитель TSplitter помещается между ними и его свойство Align устанавливается равным свойству Align первого компонента.

На рис. 23 приведен внешний вид запущенного приложения. В листинге 14 приведен текст файла модуля.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: