Компоненты C++Builder

В данной главе содержатся справочные сведения по компонентам C++Builder. В двух первых разделах рассматриваются вопросы взаимодействия некоторых ви­дов компонентов. А последующие разделы, размещенные в алфавитном порядке, посвящены некоторым наиболее часто используемым компонентам C++Builder. В описании их свойств, методов и событий вы часто можете встретить идентифика­торы, выделенные подчеркиванием. Например, Caption. Это означает, что в дан­ной, предыдущей или последующих главах имеется подробное описание этого тер­мина. Определения свойств и методов даются, как и в предыдущей главе, в сокра­щенной нотации.

В отношении идентификаторов, используемых для обозначения компонентов, данная книга следует правилу, принятому в C++Builder. Имена компонентов в данной и последующих главах даются без префикса "Т", хотя все идентификато­ры классов, соответствующих компонентам, начинаются с "Т". Так что читатель должен учитывать, что, например, компонент Label И TLabel — это фактически одно и то же. И если надо найти описание класса TLabel, То следует смотреть раз­дел, посвященный компоненту Label.

В рамках данной книги, конечно, невозможно привести все справочные дан­ные по всем компонентам C++Builder. Отобраны только основные, часто исполь­зуемые компоненты. Значительно большее число компонентов вы найдете в [3], А подробная методика работы с компонентами рассмотрена в [1].

Организация— взаимодействия компонентов в приложении

Хорошо структурированное приложение, обеспечивающее простоту его модер­низации и сопровождения, должно строиться на основе диспетчеризации дейст­вий — основных операций, предусмотренных в нем. Одним из компонентов, осу­ществляющих диспетчеризацию действий, является компонент ActionList. Все действия, которые должны осуществляться в ответ на те или иные действия поль­зователя (выбор разделов меню, щелчки на кнопках и т. п.), могут быть занесены в список ActionList Под некоторыми именами. Этим действиям могут быть припи­саны различные характеристики: надписи, пиктограммы, тексты подсказок, быст­рые клавиши, пиктограммы. Каждому действию соответствует некоторый обра­ботчик события OnExecute. В C++Builder предусмотрено также множество стан­дартных действий, для которых даже не надо писать обработчики событий, по­скольку соответствующие обработчики заложены в объектах этих действий.

В C++Builder 6 появилась группа гораздо более мощных компонентов, предна­значенных для управления действиями: ActionManager, ActionMainMenuBar, ActionToolBar, CustomizeDlg. Они Не только обеспечивают новые возможности визуального проектирования, но и решают, например, такую задачу, как настрой­ка меню и инструментальных панелей пользователем. Правда, при этом возника­ют проблемы с русификацией диалогов.

Все управляющие элементы — кнопки, разделы меню ссылаются на соответст­вующее действие своим свойством Action. При этом характеристики действия ав­томатически переносятся в эти компоненты.

Пиктограммы, используемые в ActionList, В кнопках, меню, списках собира­ются в списке изображений — компоненте ImageList. На этот компонент ссылают­ся все другие компоненты, для которых требуются пиктограммы, своим свойством Images.

Еще одним полезным компонентом, который осуществляет перехват событий приложения (переменной Application) И тем самым упрощает многие операции, является ApplicationEvents.

Использование всех этих компонентов позволяет разрабатывать хорошо струк­турированные приложения, которые в дальнейшем легко сопровождать и модерни­зировать.

Каждое серьезное приложение должно иметь:

• главное меню MainMenu

• инструментальную панель быстрых кнопок (например, ToolBar), дублирую­щих основные разделы меню

• контекстные меню PopupMeiiu, всплывающие при щелчке пользователя пра­вой кнопкой мыши на том или ином компоненте

• ярлычки подсказок (реализуются свойством Hint), Всплывающие при переме­щении курсора мыши над быстрыми кнопками и иными компонентами

• полосу состояния StatusBar, Используемую часто для развернутых подсказок

• файл справки, темы которого отображаются при нажатии клавиши F! и при выборе пользователем соответствующего раздела меню.

Методика разработки такого приложения в общих чертах сводится к следую­щему:

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

2. На форму переносится список изображений ImageList И заполняется пиктог­раммами, которые будут использоваться для тех нестандартных действий, ко­торые должны быть доступны из быстрых кнопок инструментальной панели.

3. На главную форму приложения переносится компонент диспетчеризации дейст­вий: ActionList или ActionManager. Компонент связывается с ImageList. Двой­ным щелчком на диспетчере действий вызывается редактор действий, с помо­щью которого формируется список стандартных и нестандартных действий.

4. Каждому действию задается набор характеристик: Name (имя) Caption (над­пись, в которой выделяется символ быстрого доступа), Shortcut (горячие кла­виши), ImageIndex (номер изображения в ImageList), Hint (тексты подска­зок), HelpContext Или HelpKeyword (ссылка на тему справки) и др. Для не­стандартных действий все эти характеристики вы записываете сами. Для стандартных действий они заносятся автоматически. Вам надо только перевес­ти надписи и подсказки на русский язык и, может быть, исправить ссылки на не устраивающие вас стандартные изображения и комбинации горячих кла­виш. А если у вас предусмотрена в приложении контекстная справка, то надо задать ссылки на соответствующие темы. Впрочем, в начале проектирования справки, конечно, еще нет. Так что свойства HelpContext и HelpKeyword Вы можете задать позднее.

5. Записываются обработчики событий выполнения для всех нестандартных дей­ствий. Стандартные действия обрабатываются автоматически и для многих из них достаточно задать некоторые свойства обработки. Впрочем, как будет вид­но позднее, иногда надо писать обработчики и для стандартных действий. Дальнейшие шаги зависят от того, используете ли вы компонент ActionList,

Или ActionManager. Для ActionList Далее надо сделать следующее:

6. На форму переносится компонент MainMenu — главное меню, связывается с ImageList, В компоненте формируется меню, и в его разделах даются ссылки на действия, описанные в ActionList.

7. На форме создается инструментальная панель (обычно, компонент ToolBar). Панель связывается с ImageList, а в ее кнопках даются ссылки на действия, описанные в ActionList.

Если вы используете компонент ActionManager, То эти шаги выглядят иначе:

6. На форму переносится компонент ActionMainMenuBar — — полоса главного меню. Она связывается с диспетчером ActionManager. Затем из редактора ActiOnManager Перетаскиваются мышью на полосу меню категории разделов, кото­рые должны входить в меню как головные разделы, или отдельные действия.

7. В редакторе ActionManager Создается новая инструментальная панель, или несколько панелей. На них перетаскиваются мышью необходимые действия. Дальнейшие операции во всех случаях сводятся к следующему:

8. Если необходимо обеспечить в приложении контекстные всплывающие меню, то на форму переносится один или несколько (по числу различных контекст­ных меню) компонентов PopupMenu. Они связываются с компонентом ImageList Своим свойством Images. Далее контекстные меню заполняются анало­гично главному меню, причем обычно большинство разделов просто копиру­ются из главного меню.

9. При переносе на форму компонентов, с которыми должны быть связаны кон­текстные меню, в их свойствах PopupMenu Даются ссылки на соответствую­щие компоненты PopupMenu.

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

11. Создается файл справок Jilp и связывается с приложением.

Конечно, это очень схематичное описание методики проектирования. Деталь­Ное рассмотрение этой методики проведено в [1].

Взаимодействие компонентов, работающих с базами данных_________

Каждое приложение, использующее базы данных, обычно имеет по крайней мере по одному компоненту следующих трех типов:

• Компонент — набор данных (data set), непосредственно связывающийся с базой данных. Это такие компоненты, как Table, Query, StoredProc И ряд других.

• Компонент — источник данных (data source), осуществляющий обмен инфор­мацией между компонентами первого типа и компонентами визуализации и управления данными. Таким компонентом является DataSource.

• Компоненты отображения и ввода данных.

В качестве наборов данных могут использоваться компоненты со страницы BDE (Data Access в версиях, младше C++Builder 6), Table, Query, StoredProc. Наи­более просто связать с базой данных компонент Table. Для этого прежде всего надо задать свойство DatabaseName, Выбрав базу данных из выпадающего списка, на­ходящегося рядом с этим свойством в окне Инспектора Объектов. Затем надо за­дать свойство TableName, Выбрав требуемую таблицу базы данных из соответст­вующего выпадающего списка. После этого можно установить в True Свойство Active. Это свойство обеспечивает соединение с базой данных.

Перечисленные наборы данных связываются с базами данных посредством BDE. В C++Builder 6 имеется несколько страницы библиотеки, содержащих аль­тернативные наборы данных, для которых не требуется BDE. Это страница ADO (наборы данных ADOTable, ADODataSet, Страница

InterBase (наборы данных IBTable, IBQuery, IBStoredProc, IBDataSet), страница dbExpress (SQLTable, SQLQuery, SQLStoredProc).

В качестве источника данных всегда используется размещенный на странице Data Access компонент DataSource. Он связывается с набором данных своим свой­ством DataSet.

Подавляющее большинство компонентов, используемых для связи с конкрет­ным полем таблицы данных, для отображения и редактирования данных, имеют два свойства DataSource и DataField. Первое из них указывает на компонент — источник данных, а второе — на поле таблицы. Впрочем, имеется компонент DBGrid, Который представляет собой таблицу, в которой могут отображаться поля строк, числовые и булевы поля. Для связи этого компонента с набором данных ис­пользуется только одно свойство — DataSource.

Помимо указанных компонентов в приложении может размещаться компо­нент Database. Этот компонент в основном используется в приложениях, работаю­щих на платформе клиент/сервер. Его задачи связаны с общением с удаленным сервером, реализацией транзакций, работой с паролями. Компонент Database Це­лесообразно вводить в приложение только в сравнительно редких случаях. Если он не введен явно, C++Builder автоматически создает его для каждой используемой в приложении базы данных.

Еще один компонент, который тоже автоматически создается C++Builder — компонент Session. Это главный компонент любого приложения, работающего с базами данных. Но в явном виде эти компоненты имеет смысл вводить только в многозадачные приложения, в которых параллельно обрабатывается несколько

Потоков информации.

ActionList — диспетчер действий___________________________________

Невизуальный компонент, обеспечивает диспетчеризацию действий разработ­чика и, соответственно, событий компонентов.

Страница библиотеки Standard

Класс TActionList

Иерархия TObieCtTPersistent TComponentTcustomActionList

Модуль ActnList

Описание

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

В начале проектирования приложения разработчик должен представить себе список тех действий, которые может осуществлять пользователь. Практическая реализация составленного списка действий начинается с переноса на проектируе­мую форму компонента ActionList. Сделав на этом компоненте двойной щелчок, вы попадаете в редактор действий (см. рис. 2.1), позволяющий вводить и упорядо­чивать действия.

Щелчок правой кнопкой мыши или щелчок на маленькой кнопочке со стрел­кой вниз правее первой быстрой кнопки окна редактирования позволит вам вы­брать одну из команд: New Action (новое действие) или New Standard Action… (новое стандартное действие). Первая из них относится к вводу нового действия любого типа. По умолчанию эти действия будут получать имена Actionl, Action2 И т. д. Вторая команда открывает окно, в котором вы можете выбрать необходимое вам стандартное действие (или сразу несколько действий). После этого в правом окне (Actions) редактора появятся имена выбранных действий, а в левом (Categories) — категории действий.

⅛ι та и? 2⅛
l3 ’ о * * 
categories: fictions' 
(no category)1
edit
window
∣52e3s3bβ
(all actions) в richeditbotdi ʃ richedititaiid
ц richedrtunderiinei
ab€ r iche dits trikeθ ut1 !Ξ richeditbulletsl ≡ richeditaiignlefti
я richeditaiignrighfi * richeditaiigncenteri
рис. 2.1
окно редактора действий

Каждое действие, которое вы внесли в список — это объект типа TAction Для нестандартных действий или других производных типов для стандартных. Выбрав в окнах редактора ту или иную категорию или [AIIActions] (все категории), а в пра­вом — конкретное действие, вы можете увидеть в Инспекторе Объектов его свойст­ва и события. В Инспекторе Объектов для каждого действия вы можете установить свойство Name — имя, а также ряд свойств, которые автоматически перенесутся затем во все компоненты, ссылающиеся на данное действие. Это Caption — над­пись, Shortcut — «горячие» клавиши, Hint — подсказки в ярлычках и панели со­стояния, HelpContext. HelpReywcRd. HelpType — связь с контекстной справкой, Enabled. Visible. Checked.

Можно для каждого или некоторых действий указать свойство ImageIndex, Которое является индексом (начиная с 0) изображения, соответствующего данному действию в отдельном компоненте списка изображений ImageList. Этот индекс пе­редастся в дальнейшем компонентам, связанным с данным событием — разделам меню, кнопкам. Если в свойстве Images Компонента ActionList Указать имя спи­ска, размещенного на форме и заполненного изображениями, то эти изображения появятся также в окне редактора действий.

Свойство Category (категория) не имеет отношения к выполнению приложе­ния. Задание категории просто позволяет в процессе проектирования сгруппиро­вать действия по их назначению. Можно назвать их русскими именами (категории Файлы и Формат на рис. 2.1).

На странице событий Инспектора Объектов для каждого действия определено

Три события:

OnExecute — возникает в момент, когда пользователь инициализировал дей­ствие, например, щелкнув на компоненте (разделе меню, кнопке), связанном с данным действием.

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

OnHint — возникает в момент, когда на экране отображается ярлычок под­сказки в результате того, что пользователь задержал курсор мыши над компо­нентом, инициализирующим событие.

Связь объектов действий с конкретными инициализаторами действий — управляющими элементами типа кнопок, разделов меню и т. д., осуществляется через свойство Action, Имеющееся у всех управляющих элементов. Достаточно в объекте раздела меню или в копке SpeedButton Установить соответствующее зна­чение Action, И все заданные атрибуты этого действия, включая обработчик собы­тия, перенесутся в раздел меню и кнопку.

Основные свойства

Свойство

Объявление / Описание

ActionCount

Int ActionCount

Количество действий в списке. Только для чтения

Actions

TContainedAction* Actions[int Index]

Индексированный список действий

Images

Controls::TImageList* Images

Ссылка на список изображений — обычно на компонент ImageList

Остальные свойства наследуются от TComponent. Основные методы

Метод

Объявление / Описание

ExecuteAction

Bool ExecuteAction(Classes."TBasicAction* Action)

Вызывается из метода Execute указанного действия Action. Ге­нерирует событие OnExecute компонента ActionList

IsShortCut

Bool IsShortCut(Messages: =TWMKey &Message)

Распознает «горячие» клавиши, связанные с действием. Яв­ным образом из приложения не вызывается

UpdateAction

Bool UpdateAction(Classes::TBasicAction* Action)

Вызывается при обновлении списка действий I!

События

Событие

Описание

OnChange

Наступает’ когда изменяется список действий

OnExecute

Наступает, когда действие генерирует событие OnExecute

OnUpdate

Наступает, когда изменяется действие

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

Событие

—- — . — ■ ■— — —

Описание

OnExecute

Реализация действия

OnHint

Возникает в момент, когда на экране должен отобразиться яр­лычок подсказки

OnUpdate

LIj

События происходят между выполнениями действий. Обработ­чики событий могут использоваться для каких-то настроек, для подготовки ожидаемых дальнейших действий или выпол­нения каких-то фоновых операций

ActionManager диспетчер действий

Невизуальный компонент, обеспечивает диспетчеризацию действий разработ­чика и, соответственно, событий компонентов, с возможностью настройки пользо­вателем инструментальных панелей и меню.

Страница библиотеки Additional

Класс TActionManager

Иерархия TOb iectTPersistentTComponent TCustomActionListTCustomActionManager

Модуль Actn M А п

Описание

Компонент ActionManager Введен в C++Builder 6 для создания дополнитель­ных возможностей диспетчеризации действий. Методика работы с этим компонен­том коротко изложена в данной главе, в разд. «Организация взаимодействия ком­понентов в приложени», а подробно рассмотрена в книге [1].

Диспетчер действий ActionManager Создает список стандартных и нестан­дартных действий и в этом отношении подобен AetionList. Но возможности ActionManager Несравненно шире. Он не только хранит набор действий. Он управ­ляет также полосами действий — визуальными компонентами, на которых распо­лагаются элементы пользовательского интерфейса. К таким компонентам относят­ся ActionMainMenuBar — полоса главного меню, и ActionTooIBar — инструмен­тальная панель. Эти компоненты могут вводиться в приложение непосредственно из палитры компонентов, а могут создаваться Редактором Действий Action — Manager. Из окна Редактора Действий можно формировать полосы действий про­стым перетаскиванием на них необходимых действий.

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

Настройка во время выполнения может осуществляться или вызовом соответ­ствующего стандартного действия, или обращением к специальному компоненту CustomizeDlg, Перенесенному на форму. В обоих случаях во время выполнения от­крывается то же диалоговое окно Редактора Действий, которое используется во время проектирования, но в несколько упрощенном варианте. Это окно позволяет пользователю в процессе выполнения приложения настраивать меню и инструмен­тальные панели, перенося на них новые действия, убирая прежние, делая те или иные инструментальные панели видимыми или невидимыми. Компонент Action — Manager Обеспечивает сохранение в файле на диске этих пользовательских настро­ек и загрузку их в следующем сеансе работы с приложением. К сожалению, диалог Редактора Действий, позволяющий пользователю проводить настройки, реализо­ван, естественно, на английском языке.

Свойство State Компонента ActionManager Определяет реакцию на действия пользователя. Значение as Normal соответствует нормальной рабочей реакции: при щелчке пользователя на доступных интерфейсных компонентах действий выпол­няются соответствующие действия. Два других возможных значения — AsSuspen- ded и AsSuspendedEnabled Отключают возможность выполнения действий. Щел­чок пользователя не приводит ни к каким результатам. Эти значения State ис­пользуются при настройке пользователем меню и инструментальных панелей. Раз­личие этих двух значений в том, что первое не изменяет свойства Enabled Дейст­вий, а второе переводит во всех действиях Enabled в True.

Таким образом, если вы в некоторый момент хотите, чтобы полосы действий, управляемые компонентом ActioiiManager 1, перешли в состояние настройки, надо выполнить оператор

ActionManagerl->State = asSuspended;

Тогда нажатие пользователем кнопки инструментальной панели или раздела меню не будет вызывать выполнение соответствующего действия и может интерпретиро­ваться программой как-то иначе.

Свойство FileName Задает имя файла, в котором ActionManager Хранит ин­формацию о составе связанных с ним полос действий. В начале выполнения прило­жения ActionManager Читает информацию из этого файла и в соответствии с ней формирует полосы действий. А при любых изменениях настройки в процессе вы­полнения компонент записывает в этот файл проведенные изменения. Так что при следующем сеансе работы состав полос действий будет таким, каким сделал его пользователь в предыдущем сеансе.

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

Свойство Images компонента ActionManager указывает на компонент Image — List. Содержащий пиктограммы, используемые для обозначения действий.

Основной инструмент проектирования — — Редактор Действий компонента ActionManager. Он вызывается двойным щелчком на ActionManager. Вы попаде­те в окно Редактора Действий на страницу Actions. Щелкнув в ней правой кнопкой мыши, вы можете ввести новое нестандартное или стандартное действий, выбрав из контекстного меню соответственно команду New Action или New Standard Action.

После того как вы выбрали некоторые действия, в панели Actions появятся имена объектов этих действий, а в панели Category — их категории. Если вы выде­лите какое-то действие, в Инспекторе Объектов вы можете увидеть и изменить его свойства: Caption, Hint, Shortcut И другие. В частности, вы можете изменить его категорию (свойство Category). В отличие от компонента ActionList. в Action — Manager Понятие категории имеет вполне определенный смысл. При создании меню названия категорий станут надписями головных разделов меню. Так что имеет смысл оформить их сразу так, как положено в меню, переведя на русский язык и введя символ амперсанда.

Страница Toolbars (инструментальные панели) окна Редактора Действий ком­понента ActionManager Содержит список управляемых диспетчером ActionMana — ger инструментальных панелей (компонентов ActionToolBar) И меню (компонен­тов ActionMainMenuBar). Компонент ActionMainMenuBar (полосу главного меню) надо добавлять в приложение обычным способом, перенося его из палитры компонентов. А добавить на форму компонент ActionToolBar Можно, просто на­жав в окне Редактора Действий на странице Toolbars кнопку New.

После того как вы добавили кнопкой New новую инструментальную панель или перенесли на форму меню ActionMainMenuBar, Можно вернуться на страницу Actions и перетащить с нее мышью на панель или в полосу меню требуемые дейст­вия или целиком категории. Если в меню перетаскивается категория, ее надпись становится головным разделом меню.

Индикаторы на странице Toolbars около названий полос действий управляют их видимостью. Если выключить такой индикатор, то во время выполнения соот­ветствующая панель будет невидимой.

Если вы выделили на странице Toolbars одну из полос действий, вы можете увидеть в Инспекторе Объектов ее свойства. Большинство из них обычны для лю­бых панелей. В частности, имеет смысл изменить задаваемую по умолчанию над­пись (Caption) на что-то более понятное пользователю, так как при настройках во время выполнения пользователь будет видеть эти надписи. Стоит также обратить внимание на свойство — AllowHiding. Оно позволяет (при значении true) или за­прещает делать полосу невидимой в процессе выполнения. Если задать Allow- Hiding = false, То в Редакторе Действий такая полоса отображается серой. Для та­кой полосы ни во время проектирования, ни во время выполнения невозможно пе­реключить индикатор видимости. Полоса всегда будет видна.

Выпадающий список Caption Options управляет способом отображения надпи­сей (Caption) Действий в выделенной в окне Toolbars инструментальной панели. Значение None Соответствует отсутствию надписей. Отображаются только пикто­граммы. Впрочем, если действие не имеет пиктограммы, то надпись все равно ото­бражается. Значение Selective Позволяет для каждого действия задать видимость надписи индивидуально. Значение АН Обеспечивает отображение надписей для всех действий. Индикатор Apply caption options to all toolbars распространяет выбран­ную опцию на все инструментальные панели.

Страница Options Редактора Действий позволяет задать некоторые опции ото­бражения. Индикатор Menus show recently used items first делает меню перестраивае­мым, как это предусмотрено в Windows 2000/XP, причем первыми располагаются разделы, которые недавно использовались. Если этот индикатор включен, то дис­петчер действий при каждом очередном выполнении приложение проверяет, давно ли пользователь обращался к тому или иному разделу меню. Если на протяжении нескольких сеансов работы какие-то разделы не использовались, они делаются не­видимыми. Точнее, их можно увидеть, только развернув меню полностью. Таким образом, меню перестраивается от сеанса к сеансу, делая видимыми и легко дос­тупными те разделы, к которым пользователь обращается чаще всего.

Кнопка Reset Usage Data восстанавливает первоначальные установки полос дей­ствий. Индикатор Large icons приводит к отображению в полосах действий больших пиктограмм. Индикатор Show tips on toolbars управляет появлением всплывающих ярлычков у элементов инструментальных панелей. А индикатор Show shortcut keys in tips определяет включение в тексты этих ярлычков обозначений «горячих» кла­виш. Выпадающий список Menu animation определяет форму отображения меню.

Основные свойства

Свойство

Объявление / Описание

ActionBars

TActionBars* ActionBars

Коллекция объектов полос действий, управляемых компонентом

I ActionCount

Int ActionCount

Количество действий в списке. Только для чтения ∣

Actions

TContainedAction* Actions[int Index]

Индексированный список действий

FileName

AnsiString FileName

Имя файла, в котором хранятся текущие настройки полос действий

Images

Imglist: :TCustomImageList* Images

Ссылка на список изображений — обычно на компонент ImageList

Linked

ActionLists

TActionListCollection* LinkedActionLists

Коллекция списов действий, доступных из полос действий (инстру­ментальных панелей и меню), управляемых данным компонентом

Priority

Schedule

I

Classes: =TStringList* PrioritySchedule

Список, управляющий числом обращений к действиям в управ­ляемом меню

State

Enum TActionListState {asNormal, asSuspended, asSuspendedEnabled};

Bool State

Определяет реакцию на действия пользователя (см. выше в опи­сании компонента)________________________________________________ J

Основные методы

Метод

Объявление / Описание |

ExecuteAction

Bool ExecuteAction(Classes::TBasicAction* Action)

Вызывается из метода Execute указанного действия Action. Генерирует событие OnExecute диспетчера действий

LoadFromFile

Void LoadFromFile(const AnsiString FileName)

Загружает из файла, указанного свойством FileName, ин­формацию о натройках полос действий

ResetActionBar

Void ResetActionBarlIndex: Integer)

Восстанавливает состояние по умолчанию полосы действий с индексом Index

ResetU seageData

Void ResetUsageData

Удаляет файл, указанный свойством FileName, восстанав­ливая тем самым начальное состояние всех полос действий

SaveToFile

Void SaveToFile(const AnsiString Filename)

Сохраняет в файле, указанном свойством FileName, состоя­ние всех полос действий

События

Событие

Описание

OnChange

Наступает, когда изменяется список действий

OnExecute

Наступает, когда действие генерирует событие OnExecute

OnUpdate

Наступает, когда изменяется действие

Все эти события используются редко. Поэтому больший интерес представляют События действий, которые вы можете посмотреть в разд. « ActionList О.

ActionMainMenuBar — настраиваемая полоса состояния

Главного меню__________________________________________________

Компонент главного меню, работающий совместно с диспетчером действий

ActionManager.

Страница библиотеки Additional

Класс TActionMainMenuBar

Иерархия TOfrrccT TPersistent TComponent TControl

TWinControl TToolWindow TCustomActionBar TcustomActionDockBar TcustomActionMenuBarTcustomActionMainMenuBar

Модуль AetnM cnus Описание

Компонент ActionMainMenuBar Введен в C++Builder 6 для создания совмест­но с ActionManager Перестраиваемой полосы главного меню. Методика работы с этим компонентом коротко изложена в данной главе, в разделах «Организация взаимодействия компонентов в приложении» и «ActionManagerо, а подробно рас­смотрена в книге [1].

Компонент должен вводится в приложение обычным способом переносом его на форму из палитры компонентов. А формирование разделов меню, как рассмотрено в указанных разделах, призводится из редактора компонента ActionManager.

Основные свойства

Свойство

Объявление / Описание

I ActionControls

TcustomActionControl* ActionControls[const Int Index]

Список объектов разделов меню

ActionManager

TActionManager* ActionManager

Указатель на компонент ActionManager, управляющий дан­ным меню

Animations tyle

Enurn TAnimationStyle {asNone, asDefault, AsUnFold, AsSlide, AsFade};

TAnimationStyle AnimationStyle

Определяет стиль анимации при показе разделов меню,

ExpandDelay

Int ExpandDelay

Определяет задержку в миллисекундах (по умолчанию 4000) пред показом невидимых или неиспользуемых разделов

Inactive

Bool Inactive

Определяет доступность данного меню

InMenuLoop

Bool InMenuLoop

Указывает, может ли меню получать фокус, обеспечивая до­ступ к его разделам

ParentControl

Actnman:: T CustomActionControl* ParentControl

Указатель на родительский компонент. Используется в кон­текстных меню, состав котолрых может изменяться в зависи­мости объекта, к которому такое меню относится

RootMenu

TCustomActionMenuBar* RootMenu

Указатель на головное меню из объекта вспомогательного вы­падающего меню

Основные методы!

I Метод

Объявление / Описание

CloscMenu

Void CloseMenu(void)

Сворачивает меню

1 FindFirst

TActionClientItem* FindFirst(Void)

Возвращает объект первого раздела меню

Основные события

Событие

Описание

OnPopup

Наступает перед показом всплывающего меню

‘OnPaint

Наступает перед прорисовкой меню на экране

ActionToolBar — настраиваемая инструментальная панель_____________________

Настраиваемая инструментальная панель, работающая совместно с диспетче­ром действий ActionManager.

Страница библиотеки Additional

Класс TActionToolBar

Иерархия TObiect TPersistent TComponent TControl TWinControL TToolWindow TCustomActionBar TcustomActionDockBar TcustomActionToolBar

Модуль ActnCtrls Описание

Компонент ActionToolBar Введен в C++Builder 6 для создания совместно с ActionManager Перестраиваемых инструментальных панелей. Методика работы с этим компонентом коротко изложена в данной главе в разделах «Организация взаимодействия компонентов в приложении» и «ActionManagero, а подробно рас­смотрена в книге [1].

Компонент может вводиться в приложение обычным способом — переносом его на форму из палитры компонентов, а может содаваться из редактора компонен­та ActionManager. Формирование кнопок инструментальной панели, как рассмот­рено в указанных разделах данной главы, призводится из редактора компонента

ActionManager.

Основные свойства

Свойство

Объявление / Описание

ActionClient

TActionCIient* ActionClient

Список клинтов, размещенных на панели

_______________

ActionControIs

TCustomActionControl* ActionControls [const int Index]

Список управляющих компонентов на панели

ActionManager

TActionManager* ActionManager

Указатель на компонент ActionManager, Управляющий дан­ной панелью

Align

Enum TAlign { aINone, aITop, alBottom, alLeft, alRight, alClient, alCustom }

TAlign Align

Определяет выравнивание панели в родительском контейнере

AllowHiding

Bool AllowHiding

Разрешает делать панель невидимой

HiddenCount

Int HiddenCount

Число невидимых управляющих компонентов на панели

Orientation

Enum TBarOrientation {boLeftToRight, boRightToLeft,

BoTopToBottom, boBottomToTop};

TBarOrientation Orientation

Определяет ориентацию размещения управляющих компонен­тов: слева направо, справа налево, сверху вниз, снизу вверх

Vert S eparator

Bool HorzSeparator

Определяет появление разделителя между рядами компонентов

Основные методы

! Метод

Объявление / Описание

I FindFirst

TActionClientItem* FindFirst(Void)

Возвращает объект первого управляющего элемента панели

FindFirst

VisibleItem

TActionClientltem* FindFirstVisibleItem(Void)

Возвращает объект первого видимого управляющего элемента панели

FindLast

Visibleltem

TActionClientltem* FindLastVisibleItem(Void)

Возвращает объект последнего видимого управляющего эле­мента панели

Основные события

Событие

Описание

OnControl, Created

Наступает в момент появления на панели нового компонента

OnPaint

Наступает перед прорисовкой панели на экране

Кроме того, наследуется множество событий класса TWinControl, Связанных С перетаскиванием и встраиванием, а также с манипуляциями мышью

Animate — клипы Windows________________________________________

Используется для воспроизведения немых клипов AVI, подобных используе­мым в Windows изображениям копирования файлов и т. п.

Страница библиотеки Win32

Класс TAnimate

Иерархия TObiect — TPersistent — TComjjonent TContгоI — TWinControl

Модуль Comctrls

Описание

Компонент Animate Позволяет воспроизводить на форме стандартные видео клипы Windows (типа копирования файлов, поиска файлов и т. п.) и немые видео файлы. avi — Audio Video Interleaved. Эти файлы представляют собой последова­тельность кадров битовых матриц. Они могут содержать и звуковую дорожку, но компонент Animate Воспроизводит только немые клипы AVI. Он работает только с неуплотненными файлами AVI или с клипами AVI, уплотненными с использова­нием RLE — run-length encoding.

Animate Может воспроизводить клипы AVI из ресурсов, из файлов или из биб­лиотеки Shell32.dll, если приложение работает с Windows 95/98/2000 или NT.

Во время проектирования в компонент Animate Можно загрузить кадры клипа AVI, указав такие свойства, как FileName — имя файла и CommonAVl’ — стан­дартный клип Windows. Можно также просматривать клип по кадрам, щелкнув на компоненте правой кнопкой мыши и выбирая разделы всплывающего меню Next Frame (Следующий кадр) или Previous Frame (Предыдущий кадр). Это позволит вам выбрать фрагмент клипа и воспроизводить его методом Play, Если вы не хоти­те воспроизводить клип полностью.

В компоненте Animate Предусмотрены события OnClose, OnOpen, OnStart И OnStop, Генерируемые соответственно в моменты закрытия и открытия компо­нента, начала и окончания воспроизведения.

Основные свойства

Свойство

Объявление / Описание

Active

Bool Active

Указывает, должен ли компонент воспроизводить клип. Уста­новка в True Запускает воспроизведение кадров, начиная со StartFrame И кончая StopFrame, Столько раз, сколько указано в свойстве Repetitions. Установка в False Прерывает воспроизве­дение. Перед активацией компонент должен быть открыт

AutoSize

Bool AutoSize

Указывает, что размер компонента автоматически устанавлива­ется равным размерам кадров

Center

Bool Center

Определяет центровку изображения в клиентской области ком­понента, если размеры клиентской области ClientHeight Или ClientWidth Не совпадают с соответствующими размерами кад­ра FrameHeight и FrameWidth. Если центровка не задана, изображение позиционируется в верхнем левом углу клиент­ской области J

CommonAVI

Enum TCommonAVI {aviNone, aviFindFolder, aviFindFile, aviFindComputer, aviCopyFiles, aviCopyFile, aviRecycleFile, aviEmptyRecycle, aviDeleteFile};

TCommonAVI CommonAVI

Указывает клип Windows из библиотеки Shell32.dll

FileName

AnsiString FileName

Указывает имя воспроизводимого файла. Установка FileName Автоматически приводит к установке CommonAVI = aviNone, Очищает ResName И сбрасывает на 0 ResHandle И ResID

FrameCount

Int FrameCount

Определяет общее количество кадров в клипе AVI. Свойство толь­ко для чтения

FrameHeight

Int FrameHeight

Высота, необходимая для полного отображения кадров. Если свойство AutoSize Установлено в True, Высота клиентской обла­сти компонента автоматически устанавливается равной Frame — Height^ Свойство только для чтения

Frame Width

Int FrameWidth

Ширина, необходимая для полного отображения кадров. Если свойство AutoSize Установлено в True, Ширина клиентской об­ласти компонента автоматически устанавливается равной Fra — MeWidth. Свойство только для чтения

Open

Bool Open

Указывает, открыт ли компонент, т. е. загружен ли клип. При задании клипа свойствами CommonAVI, FileName, ResName Или ResID, Компонент открывается автоматически. Установка в False Освобождает ресурсы, используемые клипом. При уста­новке в True Свойство StartFrame Устанавливается в 1, а свойст­во StopFrame — во FrameCount

Компонентов ApplicationEvents. Если же вы при этом не хотите, чтобы другие компоненты ApplicationEvents Получали события, примените к привилегирован­ному компоненту метод CancelDispatch. Тогда после обработки события в данном компоненте другие компоненты ApplicationEvents Вообще не будут реагировать на эти события.

Во многие обработчики событий компонента ApplicationEvents Передается по ссылке параметр Handled. По умолчанию его значение равно False. Если вы обра­ботали соответствующее событие и не хотите, чтобы оно далее обрабатывалось дру­гими компонентами ApplicationEvents, Надо в обработчике установить Handled = True. Если же вы оставите Handled = false, То событие будут пытаться обрабаты­вать другие компоненты ApplicationEvents (если они есть). Если событие так и ос­танется необработанным, то его будет пытаться обработать активный компонент, а если не обработает — то активная форма. Предотвратить обработку события дру­гими компонентами можно, используя описанный ранее метод CancelDispatch.

Приведем примеры использования описаннных далее событий компонента ApplicationEvents.

Обработчик события OnHint:

Void TForml: ZApplicationEventslHint(TObject *Sender)

(

StatusBarl->SimpleText = Application->Hint;

)

Отображает в полосе состояния StatusBarl Вторую часть свойства Hint Любого компонента, в котором определено это свойство и над которым перемещается кур­сор мыши. Отображение происходит независимо от значения свойства ShowHint Компонента.

Обработчик события OnShowHint:

Void TForml: ZApplicationEventslShowHint(AnsiString SHintStr,

Bool SCanShow, THintInfo SHintInfo)

{

If (HintInfo. Hintcontrol-AClassNameIs("TEdit")) if (Canvas-ATextWidth(Editl-AText) > Editl-XlientWidth)

(

HintStr = Editl-AText;

ApplicationEventsl-XancelDispatch() ;

)

1 проверяет класс источника события и, если это окно редактирования, то с помо­щью функции TextWidth Проверяет, не превышает ли длина текста ширины кли­ентской области. Если превышает, то текст ярлычка подменяется текстом, содер­жащимся в окне редактирования. Такой прием позволяет пользователю, подведя курсор мыши к окну редактирования, увидеть во всплывающем окне полный текст, который может не быть виден обычным образом, если он длинный и не по­мещается целиком в окне редактирования. Только учтите, что событие OnShow — Hint Будет наступать при перемещении курсора только над теми компонентами, в которых свойство ShowHint Установлено в True.

Обработчик события OnHelp:

Bool TForml: :ApplicationEventslHelp(

WORD Command, int Data, bool SCallHelp)

If ( (Command == HELP_CONTEXT) SS (Data < 10) )

{

Application-XelpCommand(HELP_CONTEXTPOPUP, Data);

CallHelp = false;

}

Return true;

}

Обеспечивает отображение всех контекстных справок с номерами иденификаторов тем, меньшими 10, во всплывающем окне, не вызывая при этом WinHelp. Это дает возможность отобразить многострочные (в отличие от ярлычков) всплывающие окна, поясняющие назначение тех или иных элементов приложения.

Обработчик события OnShortCut:

Void TFormlziApplicationEventslShortCutCrWMKey SMsg, bool SHandled)

{

If (Msg-CharCode == ‘Q,)

If (Application->MessageBox(

"Действительно хотите завершить работу?",

"Подтвердите завершение", mb_yesnocancel+mb_iconquestion) == idyes)

Application-ATerminate();

)

Перехватывает нажатие пользователем клавиш и, если нажата клавиша с симво­лом " Q” (в любом регистре и независимо от установки русского или английского языка), то пользователю методом Application-AMessatieBox предлагается диало­говое окно с текстом "Действительно хотите завершить Работу?". Если пользова­тель в нем нажмет кнопку Да, то приложение закрывается методом Applicati­On— >Terminate.

Обработчики событий OnActivatc И OnDeactivate :

Void TFormlzZApplicationEventslActivate(TObject *Sender)

(

Labell-ACaption = "Ура! Я работаю!";

}

Void TFormlzzApplicationEventslDeactivate(TObject *Ξender)

{ .

Labell-ACaption = "Увы! Меня покинули!";

}

Обеспечивают появление в метке Labell соответствующей надписи каждый раз, когда пользователь переключается из данного приложение в другое и возвращает­ся назад.

Основные свойства

Никаких специальных свойств в компоненте не определено. Компонент насле­дует ряд свойств базового класса TComponent.

Основные методы

Метод

Объявление / Описание

Activate

Void Activate(void)

Ставит данный компонент в начало очереди компонентов Ар — plicationEvents. В результате все события передаются прежде всего этому компоненту

CancelDispatch

Void CancelDispatch(void)

Предотвращает обработку текущего события другими объекта­ми ApplicationEvents

Остальные методы наследуются от базового класса TControl

События

Событие

Описание

OnAction

Execute

Возникает при выполнении действия, объявленного в компо­ненте ActionList, Но не обработанного им (не написан соответ­ствующий обработчик). В обработчик передается параметр Ac­tion — действие и по ссылке передается параметр Handled

OnAction

Update

Возникает при обновлении (Update) некоторого действия, объ­явленного в компоненте ActionList, Но не обработанного им (не написан соответствующий обработчик). В обработчик пере­дается параметр Action — действие и по ссылке передается параметр Handled

OnActivate

Возникает, когда приложение становится активным (при нача­ле выполнения и в случаях, когда пользователь, перейдя к другим приложениям, вернулся в данное). Если это событие обработано в ApplicationEvents, То предотвратить дальнейшую его обработку можно методом CancelDispatch

OnDeactivate

Возникает перед тем моментом, когда приложение перестает быть активным (пользователь переключается на другое прило­жение). Если событие обработано в ApplicationEvents, То предотвратить дальнейшую его обработку можно методом Can- CelDispatch

OnExeption

Возникает, когда в приложении сгенерировано исключение, которое нигде не перехвачено. В обработчик передается пара­метр Sender — источник Исключения, и параметр Е типа Ex­ception — объект исключения. В обработчике можно преду­смотреть нестандартную обработку исключений на уровне при­ложения, например, русифицировать стандартные сообщения об исключениях и дать пользователю какие-то рекомендации

OnHelp

Возникает при запросе приложением справки. Это событие возникает, в частности, при выполнении методов приложения HelpContext, Help Jump И HelpCommand. Обработчик может использоваться для каких-то подготовительных операций.

В обработчик передаются параметры — Command — команда API WinHelp, Data — параметр этой команды и по ссылке пе­редается булев параметр CallHelp. Если его установить в True, То после завершения обработчика будет вызван WinfIelp, В противном случае вызова WinHelp не будет

OnHint

Возникает в момент, когда курсор мыши начинает перемеща­ться над компонентом или разделом меню, в котором опреде­лено свойство Hint. При этом свойство Hint Компонента пере­носится в свойство Hint Приложения (Application-Hint) И в об­работчике данного события может отображаться, например, в строке состояния

OnIdIe

Возникает, когда приложение начинает простаивать, ожидая, например, действий пользователя. В обработчик передается по ссылке булев параметр Done, Который по умолчанию равен True. Если оставить его без изменения, то по окончании работы обработчика будет вызвана функция WaitMessage API Win­dows, которая займется в период ожидания другими приложе­ниями. Если задать Done = false, То эта функция вызываться не будет. Это может снизить производительность Windows_______________________________

Событие

Описание

OnMessage

Возникает, когда приложение получает сообщение Windows.

В обработчике можно предусмотреть нестандартную обработку сообщения. В обработчик передается параметр Msg — полу­ченное сообщение и по ссылке передается параметр Handled. Учтите, что в Windows передаются тысячи сообщений в секун­ду, так что обработчик OnMessage может серьезно снизить производительность приложения

I OnMinimize

Возникает при сворачивании приложения

OnRestore

Возникает при восстановлении ранее свернутого приложения

I OnShortCut

Возникает при нажатии пользователем клавиши, до того, как возникло стандартное событие OnKeyDown. Обработчик позволя­ет предусмотреть нестандартную реакцию на нажатие какой-то клавиши. В него передается параметр сообщения Windows Msg, поле CharCode Которого (Msg-CharCode) Содержит виртуальный код нажатой клавиши. Передается также по ссылке параметр Handled. Если задать ему значение true, то стандартные события OnKevDown. OnKevPress. OnKevUD не наступят

OnShowHint

J

Возникает, когда приложение собирается отобразить ярлычок с текстом подсказки Hint. В обработчик передается по ссылке параметр HintStr — первая часть свойства Hint компонента, ярлычок которого должен отображаться. В обработчике этот текст можно изменить. Так же по ссылке передается параметр CanShow. Если в обработчике установить его равным falπse, то ярлычок отображаться не будет. Третий параметр, переда­ваемый по ссылке — HintInfo. Это структура, поля которой содержат информацию о ярлычке. В частности, имеется поле HintControl — компонент, сообщение которого должно отобра­жаться в ярлычке, и поле HintStr — отображаемое сообще­ние. В обработчике это значение можно изменить

BatchMove — перенос данных из одного набора в другой_____________

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

Страница библиотеки BDE, в версиях младше C++Builder 6 — Data Access

Класс TBatchMove

Иерархия TO⅛⅛С I — —

Модуль Dbtables

Описание

Компонент BatchMove Предназначен для групповых операций переноса дан­ных из одного набора в другой. Основные свойства компонента: Source — источ­ник данных и Destination — приемник данных типа Ttable. Свойство Mode (см. в гл. 3) определяет режим переноса данных.

Основной метод компонента — Execute Выполняет операцию переноса дан­ных.

При использовании компонента BatchMove Надо иметь в виду, что обычно воз­никают проблемы с переносом русских текстов.

Основные свойства

Свойство

Объявление / Описание

I AbortOnKey

Bool AbortOnKeyViol

Viol

Указывает, должна ли немедленно прекращаться операция, вызвавшая в таблице-приемнике нарушение целостности или дублирование первичного ключа. При задании false желатель­но одновременно задать KeyViolTableName

AbortOn

Bool AbortOnProblem

Problem

Указывает, должна ли немедленно прекращаться операция, вызвавшая несоответствие типов полей в таблице-источнике и таблице-приемнике. При задании false желательно одновре­менно задать ProblemTableName

ChangedCount

Int ChangedCount

Число записей, измененных или добавленных в таблице-при­емнике (при Mode = batUpdate или batAppendUpdate), или удаленных из нее (при Mode = batDelete). Копии этих записей хранятся в таблице ChangedTableName

ChangedTable

AnsiString ChangedTableName

Name

Определяет имя таблицы Paradox, создаваемой для сохране­ния копий всех изменяемых записей таблицы-приемника

I CommitCount

Int CommitCount

Объем перемещаемых данных в байтах, при превышении кото­рого данные фиксируются в базе данных

Destination

TTable* Destination

Объект Table, являющийся приемником данных

KeyViolCount

Int KeyViolCount

Число записей, нарушающих целостность таблицы-приемника и поэтому не помещенных в приемник

KeyViolTable

AnsiString KeyViolTableName

Name

Указывает имя таблицы Paradox, в которую будут помещаться записи, нарушающие целостность таблицы-приемника и поэто­му не помещенные в приемник

Mappings

ClassesnTStrings* Mappings

Список, позволяющий задать таблицу соответствия полей ис-

Точни ка и приемника

Mode

Enum TBatchMode { batAppend, batUpdate,

BatAppendUpdate, batDelete, batCopy };

TBatchMode Mode

Режим переноса данных

MovedCount

Int MovedCount

Число записей таблицы-источника, участвующих в операции переноса данных

I ProblemConnt

Int ProblemCount

Число записей с несоответствием типов полей, которые поэто­

______________

Му не помещены в приемник

Свойство

Объявление / Описание

ProblemTable

Name

AnsiString ProblemTableName

Указывает имя таблицы Paradox, в которую будут помещаться записи с несоответствием типов полей, которые поэтому не по­мещены в приемник

RecordCount

Int RecordCount

Число записей, успешно перенесенных в таблицу-приемник

Source

TBDEDataSet* Source

Объект Table, являющийся источником данных

Transliterate

1

Bool Transliterate

Указывает, требуется ли трансляция множества символов при переносе данных из источника в приемник

Основной метод

Метод

Объявление / Описание

Execute

Void Execute(void)

Выполняет операцию, заданную свойством Mode

Остальные методы наследуются от TComDonent

BDEClientDataSet — клиентский набор данных BDE_________________

Клиентский набор данных, использующий BDE.

Страница библиотеки BDE

Класс TBDEClientDataSet

Иерархия TObiect TPersistЕпTTComponent TDataSet TcustomClientDataSet. TcustomCachedDataSet

Модуль DBClient

Описание

Компонент BDEClientDataSet Используется для создания в приложении кли­ентского набора данных. С его помощью можно создавать автономные наборы дан­ных, портфельные наборы данных, интерфейсы к другим наборам данных, обла­дающие расширенными возможностями по индексации и фильтрации данных, по расчету совокупных характеристик.

Все вопросы, связанные с клиентскими наборами данных, см. в описании ком­понента CLientDataSeT. Отличие BDEClientDataSet от ClientDataSet Заключается в том, что BDEClientDataSet Использует внутренние компоненты Query и Data- SetProvider. Так что внешний провайдер для BDEClientDataSet Не требуется, как он требуется для ClientDataSet. Вместо этого для связи с базой данных использу­ется компонент Database. На этот компонент дается ссылка в свойстве Nection. А запрос SQL записывается в свойстве COmmandText.

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

• Ввести в приложение компонент Database И установить его свойства, обеспе­чивающие связь с базой данных.

• Ввести в приложение компонент BDEClientDataSet и в его свойстве DBCon — nection сослаться на компонент Database.

• Записать в свойстве CominandText текст запроса. Например, «Select * from Pers ».

А все остальное программирование и работа с клиентским набором осуществ­Ляется так же, как описано для компонента ClientDataSet.

BitBtn — кнопка с пиктограммой__________________________________

Управляющая кнопка с пиктограммой.

Страница библиотеки Additional Класс TBitBtn

Иерархия TO⅛∕ЕсT TPersistentTCorrijjonentTControl TWinControlTButtonContro ITButtoN

Модуль Stdctrls

Примеры изображения

Рис. 2.2

Примеры кнопок BitBtn

Описание

Компонент BitBtn — это управляющая кнопка, на поверхности которой мож­но располагать изображение. Изображение на кнопке задается ее свойством Glyph. Оно представляет собой битовую матрицу, содержащую до четырех изображений размером 16 на 16. Самое левое соответствует отжатой кнопке. Второе слева соот­ветствует недоступной кнопке, когда ее свойство Enabled равно false. Третье слева изображение используется при нажатии пользователя на кнопку при ее включе­нии. Четвертое слева изображение используется в кнопках с фиксацией Speed — Button, а не в BitBtn. Изображение во время проектирования загружается в Glyph с помощью редактора, вызываемого из Инспектора Объектов. Число пиктограмм в изображении отображается автоматически в свойстве NumGlyphs.

Расположение изображения и надписи (свойство Caption) на кнопке определя­ется свойствами Margin, Layout и Spacing. Если свойство Margin равно -1 (значе­ние по умолчанию), то изображение и надпись размещаются в центре кнопки. При этом положение изображения по отношению к надписи определяется свойством Layout, которое может принимать значения (см. рис. 2.2): IjlGlyphLeft (слева, это значение принято по умолчанию), IblGlyphRight (справа), blGlyphTop (вверху), WGlyphBottom (внизу). Если же Margin > 0, то в зависимости от значения Layout изображение и надпись смещаются к той или иной кромке кнопки, отступая от нее на число пикселов, заданное значением Margin.

Свойство Spacing задает число пикселов, разделяющих изображение и над­пись на поверхности кнопки. По умолчанию Spacing = 4. Если задать Spacing = О,

Изображение и надпись будут размещены вплотную друг к другу. Если задать Spacing = 1, то текст появится посередине между изображением и краем кнопки.

Еще одно свойство BitBtn — свойство Kind Определяет тип кнопки. По умол­чанию значение этого свойства равно BkCustom — заказная. Но можно установить и множество других предопределенных типов (см. рис. 2.2): BkOK, bkCancel, BkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bklgnore, bkʌlɪ. В этих типах уже сделаны соответствующие надписи, введены пиктограммы, заданы свойства ModalResult и др.

Основное событие кнопки — OnClick, Возникающее при щелчке на ней. В об­работчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке.

Свойство Cancel, Если его установить в True, Определяет, что нажатие пользо­вателем клавиши Esc будет эквивалентно нажатию на данную кнопку. Это свойство целесообразно задавать равным true для кнопок Отменить в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав кла­вишу Esc.

Свойство Default, Если его установить в true, определяет, что нажатие пользо­вателем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно

Кнопка в фокусе.

Еще одно свойство — ModalResult Используется в модальных формах. В обыч­ных формах значение этого свойства должно быть равно MrNone.

Из методов, присущих кнопкам, имеет смысл отметить один — Click. Выпол­нение этого метода эквивалентно щелчку на кнопке, т. е. вызывает событие кнопки OnClick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке.

Основные свойства

Свойство

Объявление / Описание

Action

Classes: :TBasic Act ion* Action

Определяет действие, связанное с данной кнопкой

Cancel

Bool Cancel

Определяет, будет ли обрабатываться событие кнопки OnClick при нажатии клавиши Esc

Caption

AnsiString Caption

Надпись на кнопке

Default

Bool Default

Определяет, что нажатие пользователем клавиши ввода Enter бу­дет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе

Glyph

GraphicsuTBitmaD* Glyph

Определяет битовую матрицу, которая появляется на кнопке

Kind

I___________ j

Enum TBitBtnKind {bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bklgnore, bkAH};

TBitBtnKind Kind

Определяет тип кнопки с заранее заданными надписями, пиктог­раммами и др. (см. выше в описании BitBtn). По умолчанию тип кнопки — заказная (bkCustom)

Свойство

Объявление / Описание I

Layout

Enum TButtonLayout {blGlyphLeft, WGlyphRight, BlGlyphTop, blGlyphBottom };

TButtonLayout Layout

Определяет, к какому краю кнопки смещается изображение

Margin

Int Margin

Определяет количество пикселов между краем изображения и краем кнопки, указанным свойством Layout. При -1 изобра­жение и надпись размещаются в центре кнопки

ModalResult

Typedef Int TModalResult;

Forms: :TModalResult ModalResult

Определяет значение свойства модальной формы ModalResult, задаваемое автоматически при щелчке на данной кнопке

NumGliphs

Typedef Shortint TNumGlyphs;

TNumGlyphs NumGlyphs

Указывает количество изображений в свойстве Glyph

Spacing

Int Spacing

Число пикселов, разделяющих изображение и надпись на повер­хности кнопки

Style

Enum TButtonStyle { bsAutoDetect, BsWin31, bsNew }; TButtonStyle Style

Определяет внешний вид кнопки. По умолчанию bsAutoDetect — автоматически изменяет вид, подстраиваясь под Windows 3.x или 32-разрядные Windows

TabOrder

Typedef short TTabOrder;

TTabOrder TabOrder

Указывает позицию компонента в списке табуляции. Определяет порядок переключения фокуса между компонентами окна при нажатии клавиши Tab. Изначально соответствует порядку добав­ления компонентов на форму

TabStop

Bool TabStop

Определяет возможность доступа пользователя к кнопке с помо­щью клавиши Tab

Основные методы

Метод

Объявление / Описание

Click

Void Click(void)

Имитирует щелчок мышью, как если бы пользователь щелк­нул на кнопке

ExecuteAction

Bool ExecuteAction(TBasicAction* Action)

Вызывает указанное действие Action, связанное с данной кноп­Кой

SetFocus

Void SetFocus(void)

Передает фокус элементу, активизирует его

Событие

Событие

Описание I

OnClick

Соответствует щелчку мыши на кнопке или нажатию клавиш быстрого доступа

Button — кнопка

Кнопка для выполнения пользователем каких-то команд. Страница библиотеки Standard Класс TBuiton

Иерархия TObjectTPersistentTComjooneruTWinContro I TButtonControl

Модуль Stdctrls

Пример изображения

Рис. 2.3

Пример кнопки Button

Описание

Компонент Button Представляет собой стандартную кнопку Windows, иниции­рующую какое-то действие. Основное с точки зрения внешнего вида свойство кнопки — Caption (надпись). В надписях кнопок можно предусматривать исполь­зование клавиш ускоренного доступа, выделяя для этого один из символов надпи­си — ставя перед ним символ амперсанда Этот символ не появляется в надпи­

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

Основное событие кнопки — OnClick, Возникающее при щелчке на ней. В об­работчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке.

Свойство Cancel, Если его установить в True, Определяет, что нажатие пользо­вателем клавиши Esc будет эквивалентно нажатию на данную кнопку. Это свойство целесообразно задавать равным true для кнопок Отменить в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав кла­вишу Esc.

Свойство Default, Если его установить в True, Определяет, что нажатие пользо­вателем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.

Еще одно свойство — ModalResult Используется в модальных формах. В обыч­ных формах значение этого свойства должно быть равно mr None. Но в модальных формах использование этого свойства позволяет в ряде случаев вообще не писать обработчик щелчка на кнопке.

Из методов, присущих кнопкам, имеет смысл отметить один — Click. Выпол­нение этого метода эквивалентно щелчку на кнопке, т. е. вызывает событие кнопки

OnClick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке.

Основные свойства

Свойство

————————————————————————————— .——- __—-

Объявление / Описание

Action

ClasseszTBasicAction* Action

Определяет действие, связанное с данной кнопкой

Cancel

Bool Cancel

Определяет, будет ли обрабатываться событие кнопки OnClick при нажатии клавиши Esc

Caption

AnsiString Caption property Caption: TCaption;

Надпись на кнопке

Default

Bool Default

Определяет, что нажатие пользователем клавиши ввода Enter Бу­дет эквивалентно нажатию на данную кнопку, даже если дан­ная кнопка в этот момент не находится в фокусе

ModalResult

Typedef int TModalResult;

Forms::TModalResult ModalResult

Определяет значение свойства модальной формы ModalResult, задаваемое автоматически при щелчке на данной кнопке

TabOrder

Typedef short TTabOrder;

TTabOrder TabOrder

Указывает позицию компонента в списке табуляции. Определя­ет порядок переключения фокуса между компонентами окна при нажатии клавиши Tab. Изначально соответствует порядку добавления компонентов на форму

TabStop

Bool TabStop

Определяет возможность доступа пользователя к кнопке с помо — ■ щью клавиши Tab ■

Основные методы!

Метод

Объявление / Описание

Click

Void Click(void)

Имитирует щелчок мышью, как если бы пользователь щелкнул На

Кнопке

Execute

Action

Bool ExecuteAction(TBasicAction* Action)

Вызывает указанное действие Action, связанное с данной кнопкой

SetFocus

Void SetFocus(void)

Передает фокус элементу, активизирует его

Событие

Событие

Описание I

OnClick

Соответствует щелчку мыши на кнопке или нажатию клавиш

Быстрого доступа [

Chart — графики и диаграммы

Компонент принадлежит к семейству компонентов TChart, Которые использу­ются для создания диаграмм и графиков.

Страница библиотеки Additional Класс TChart Модуль Chart Примеры изображения

Рис. 2.4

Примеры компонента Chart: вверху отображение диаграммы, внизу — графиков

Описание

Компонент Chart Является панелью, на которой можно создавать диаграммы и графики различных типов.

Компонент является контейнером объектов Series типа TChartSeries — серий данных, характеризующихся различными стилями отображения. Каждый компо­нент может включать несколько серий. Свойства серий устанавливаются с помо­щью Редактора Диаграмм или программно. Редактор Диаграмм вызывается из Ин­спектора Объектов нажатием кнопки с многоточием около соответствующего свой­ства или двойным щелчком на компоненте Chart. Вы попадаете в окно Редактора Диаграмм, показанное на рис. 2.5, на страницу Chart, которая имеет несколько за­кладок. Прежде всего, вас будет интересовать на ней закладка Series. Щелкните на кнопке Add — добавить серию. Вы попадете в окно, в котором вы можете выбрать тип диаграммы или графика. Воспользовавшись закладкой Titles, вы можете задать заголовок диаграммы, закладка Legend позволяет задать параметры отображения легенды диаграммы (списка обозначений) или вообще убрать ее с экрана, закладка Panel определяет вид панели, на которой отображается диаграмма, закладка 3D дает вам возможность изменить внешний вид вашей диаграммы: наклон, сдвиг, толщину и т. д.

Рис. 2.5

Окно Редактора Диаграмм компонента Chart

Когда вы работаете с Редактором Диаграмм и выбрали тип диаграммы, в ком­поненте Chart на вашей форме отображается ее вид с занесенными в нее условны­ми данными. Поэтому вы сразу можете наблюдать результат применения различ­ных опций к вашему приложению, что очень удобно.

Страница Series, также имеющая ряд закладок, дает вам возможность выбрать дополнительные характеристики отображения серии. В частности, для круговой диаграммы на закладке Format полезно включить опцию Circled Pie, которая обеспе­чит при любом размере компонента Chart отображение диаграммы в виде круга. На закладке Marks кнопки группы Style определяют, что будет написано на ярлыч­ках, относящихся к отдельным сегментам диаграммы: Value — значение, Percent — проценты, Label — названия данных и т. д.

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

• Clear — очищает серию от занесенных ранее данных

• Add — позволяет добавить в диаграмму новую точку

• AddXY — позволяет добавить новую точку в график функции

Например, следующие операторы очищают серию Seriesl и заносят в нее для

Отображения диаграммы четыре значения, задавая отображающие их цвета:

Int

Int

Int

Int

Seriesl->Clear ();

Seriesl->Add(Al,"Цех Seriesl->Add(А2,"Цех Seriesl->Add(АЗ,"Цех Seriesl->Add (А4,"Цех

1",, clyellow) 2",, clblue) ; 3"., clred) ;
4’,clpurple)
Следующие операторы заносят в серию Series2 значения, предназначенные для отображения графика синуса:

Series2->Clear ();

For (int i = 0; i <= 100; i + + )

Series2->AddXY(O.02*Pi*i, sin(0.02*Pi*i) , ‘",,clRed) ;

Следующий оператор переносит данные серии Seriesl В серию Series3, Свойст­ва которой, например, определяют отличный от Seriesl тип диаграммы:

Series3->Assign(Seriesl);

Следующие операторы обеспечивают смену типа диаграммы, переключая ви­димость серий Seriesl и Series3:

Seriesl->Active = ! Seriesl->Active;

Series3->Active = ! Series3->Active;

Свойство AllowPanning’ компонента TChart Разрешает пользователю прокру­чивать графики и те типы диаграмм, в которых предусмотрены координатные оси. Прокрутку пользователь может осуществлять во время выполнения, нажимая пра­вую кнопку мыши и буксируя ею график.

Свойство AllowZooin разрешает пользователю увеличивать размер выбранного фрагмента графика или диаграммы с осями координат, растягивая его на все види­мое поле. Для этого пользователь должен с помощью левой кнопки мыши обвести рамкой требуемый фрагмент. Построение рамки вниз и вправо растягивает фраг­мент на всю область изображения. Построение рамки вверх и влево восстанавлива­ет исходный масштаб. Можно также восстановить исходный масштаб методом UndoZoom. Например, следующий оператор, вставленный в обработчик события OnMouseDoWn. Восстанавливает масштаб, если пользователь нажимает кнопку мыши при нажатой клавише Alt:

If (Shift-Contains(SsAlt)) Chartl-XJndoZoom();

Можно также изменять масштаб методами ZoomPercent и ZoomRect.

По умолчанию весь график или диаграмма размещаются на одной странице, которая видна целиком. Но если задать MaxPointPerPage — максимальное число точек на страницу, то изображение будет автоматически разбито на несколько страниц (если, конечно, число точек серий больше, чем MaxPointPerPage). По­следняя страница может оказаться неполной. На экране одновременно можно ви­деть одну страницу (она определяется свойством Page). Перемещение по страни­цам возможно с помощью прокрутки графика пользователем (если оно разрешено свойством AllowPanning) Или с помощью свойств Page, NumPages (число стра­ниц) и методов PreviousPage и NextPage. Отображение последней страницы опре­деляется свойством ScaleLastPage.

Среди множества свойств серий можно отметить Mark — ярлычки, отобра­жающие численные значения точек серии.

Множество свойств Chart Определяет оформление графика — оси координат (они могут быть со всех 4-ех сторон), трехмерную имитацию отображения и т. п.

Работа с компонентом Chart Подробно рассмотрена в [3].

Компонент реализован на Object Pascal, так что не удивляйтесь, что приведен­ные ниже определения свойств и методов не похожи на C++.

Основные свойства

Свойство

Объявление / Описание

AllowPanning

Property AllowPanning : TPanningMode;

Разрешение пользователю прокручивать графики и некоторые типы диаграмм (диаграммы с осями координат), нажимая пра­вую кнопку мыши: PmNone — запрет прокрутки, PmHorizon — tal — горизонтальная прокрутка, Pm Vertical — вертикальная прокрутка, PmBoth — прокрутка в любых направлениях

AllowZoom

Property AllowZoom : Boolean;

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

Свойство

Объявление / Описание

Animated

Zoom

Property AnimatedZoom : Boolean;

Определяет, будет ли при AllowZoom = true увеличение разме­ра выполняться плавно (при значении True), Или скачком

Animated

ZoomSteps

Property AnimatedZoomSteps : Integer;

Задает число шагов, используемых при плавном изменении масштаба (при AnimatedZoom = true)

AxisVisible

Property AxisVisible : Boolean;

При значении true видны те координатные оси, в которых

Ч

Свойство Visible = true. При значении AxisVisible = false все оси не видны

BackWall

Property BackWall : TChartWall;

Определяет множество атрибутов задней стенки трехмерного изображения осей координат (пространства между осями): ви­димость, цвет, размер, штриховку и т. п.

BottomAxis

Property BottomAxis : TChartAxis;

Множество атрибутов, определяющих нижнюю координатную ось

BottomWall

Property BottomWall : TChartWall;

Определяет множество атрибутов трехмерного изображения ниж­ней оси координат: видимость, цвет, размер, штриховку и т. п.

ClipPoints

Property ClipPoints : Boolean;

Определяет рисование последовательности точек в пределах ко­ординатных осей, предохраняя другие области от затирания.

При значении false сдвиг графика приводит к тому, что его изображение выходит за пределы координатных осей

DepthAxis

Property DepthAxis : TChartAxis;

Множество атрибутов, определяющих координатную ось, на­правленную в глубину

Foot

Property Foot : TChartTitle;

Оформление нижней части диаграммы: текст (Text) и атрибуты его форматирования

LeftAxis

Property LeftAxis : TChartAxis;

Множество атрибутов, определяющих левую координатную ось

LeftWall

Property LeftWall : TChartWall;

Определяет множество атрибутов трехмерного изображения ле­вой оси координат: видимость, цвет, размер, штриховку и т. п.

Legend

Property Legend : TChartLegend;

Определяет текст и атрибуты изображения легенды — списка обозначений данных

MarginBottom

Property MarginBottom : Integer;

Размер нижнего поля, свободного от изображения

MarginLeft

_____________

Property MarginLeft : Integer;

Размер левого поля, свободного от изображения

Свойство

Объявление / Описание __________________

MarginRight

Property MarginRight : Integer;

Размер правого поля, свободного от изображения

MarginTop

Property MarginTop : Integer;

Размер верхнего Поля, Свободного от изображения

MaxPoints

PerPage

Property MaxPointsPerPage : LongInt;

По умолчанию 0. Задание значения > 0 определяет число точек на страницу. Если в серии больше точек, изображение автома­тически размещается на нескольких страницах. Перемещение по страницам возможно с помощью прокрутки графика пользо­вателем (при AIlowPanning = pmHorizontal или pmBoth) или с помощью свойств Page, NumPages и методов PreviousPage и NextPage

NumPages

Function NumPages : Longint;

Число страниц графика. Отлично от 1 только при MaxPoints- PerPage > 0. Свойство времени выполнения

Page

Property Page : Longlnt;

Текущая видимая страница. Отлична от 1 при MaxPointsPer — Page > 0. Свойство времени выполнения

RightAxis

Property RightAxis : TChartAxis;

Множество атрибутов, определяющих правую координатную ось

ScaleLast

Page

Property ScaleLastPage : Boolean;

Управляет способом отображения последней страницы при MaxPointsPerPage > 0. Значение true означает отображение в том же масштабе, как и другие страницы. При значении false масштаб выбирается исходя из числа точек (их на последней странице может быть меньше, чем на предыдущих)

Series

_____________

Property Series[Index:Longint]:TChartSeries;

Индексированный список серий — объектов с множеством сво­их свойств и методов. Одно из основных из них — Active опре­деляет активность серии

SeriesCount

Function SeriesCount : Longint ;

Число серий в массивах Series и SeriesList

Title

Property Title : TChartTitle;

Определяет текст надписи и атрибуты Форматирования В верх­ней части компонента

TopAxis

Property TopAxis : TChartAxis;

Множество атрибутов, определяющих верхнюю координатную ось

View3D

Property View3d : Boolean;

Задает трехмерный характер изображения

View3DWaIls

Property View3dWalls : Boolean;

Определяет видимость левой и правой стенок объемного изобра­жения координатных осей

Свойство

Объявление / Описание

Γwidth3D

Property Width3D : Longint;

Определяет глубину при трехмерном изображении

Основные методы

Метод

Объявление / Описание

ActiveSeries

Legend

— ,

Function ActiveSeriesLegend(SeriesIndex : Longint) :

TChartSeries;

Возвращает активную серию с указанным индексом

I AddSeries

Procedure AddSeries(ASeries : TChartSeries);

Добавляет новую серию

Assign

Procedure Assign(Source : TPersistent);

Копирует все свойства указанной серии в данную

ChartXCenter

Function ChartXCenter : Longint;

Средняя горизонтальная координата изображения

I ChartYCenter

Function ChartYCenter : Longint;

Средняя вертикальная координата изображения

CopyTo

! ClipBoard

Metafile

Procedure CopyToClipboardMetafile(Enhanced:Boolean);

Копирует всю область диаграммы в буфер Clipboard в формате метафайла

CopyTo

Clipboard

Bitmap

Procedure CopyToClipboardBitmap;

Копирует всю область диаграммы в буфер в формате битовой

Карты

GetASeries

Function GetASeries : TChartSeries;

Возвращает первую активную серию

GetAxis

Series

Function GetAxisSeries( Axis : TChartAxis ) : TChartSeries; Возвращает первую серию, связанную с указанной ^сью

LoadChart, FromFile

Procedure LoadChartFromFile(Var ACharLTCustomChart;

Const AName:String);

Загружает изображение из указанного файла. Это может быть файл, ранее сохраненный методом SaveChartToFile

J MaxXValue

Function MaxXValue(AAxis : TChartAxis): Double;

Возвращает максимальное значение, отображаемое на горизон­тальной оси

I MaxYValue

Function MinYValue(AAxis: TChartAxis): Double;

Возвращает максимальное значение, отображаемое на вертикаль­ной оси

I MinXValue

Function MinXValue(AAxis: TChartAxis): Double;

Возвращает минимальное значение, отображаемое на горизонталь­ной оси

MinYValue

Function MinYValuefAAxis: TChartAxis): Double; ,

Возвращает минимальное значение, отображаемое на вертикаль­ной оси

Метод

Объявление / Описание

NextPage

Procedure NextPage;

Переходит к следующей странице

(идентично выражению Page = Page+1)

NumPages

Function NumPages : Longint;

Возвращает количество страниц

PreviousPage

Procedure PreviousPage;

Переходит к следующей странице

(идентично выражению Page = Page —ɪ)

Print

Procedure Print;

Посылает изображение на печать

Print

Landscape

Procedure PrintLandscape;

Задает альбомную (Landscape) ориентацию принтера.

Print

Orientation

Procedure PrintPortrait;

Посылает изображение на печать с заданной ориентацией. По­сле печати прежняя ориентация восстанавливается

PrintPortrait

Procedure PrintPortrait;

Устанавливает книжную (вертикальную) ориентацию принтера

Remove

AIISeries

Procedure RemoveAIISeries;

Удаляет все серии из SeriesList

RemoveSeries

Procedure RemoveSeries(ASeries : TChartSeries);

Удаляет указанную серию из SeriesList

RotatcLabel

Procedure RotateLabel(x, y: Integer; Const St: String;

RotDegree: Integer);

Рисует указанную строку текста, повернутую под указанным углом

SaveChart

ToFile

Procedure SaveChartToFilelAChart : TCustomChart;

Const AName : String);

Сохраняет изображение в файле с указанным именем. В даль­нейшем он может быть загружен методом LoadChartFromFile

SaveTo

BitmapFile

Procedure SaveToBitmapFile(Const FileName : String); Сохраняет изображение в файле .bmp с указанным именем

SaveTo

Metafile

Procedure SaveToMetafile(Const FileName : String);

Сохраняет изображение в метафайле с указанным именем

SaveTo

MetafileEnh

Procedure SaveToMetafileEnh(Const FileName : String);

Сохраняет изображение в метафайле Enhanced WMF с указан­ным именем

SeriesCount

Function SeriesCount : Longint;

Количество серий в компоненте (активных и неактивных)

SeriesDown

Procedure SeriesDown( A Series : TChartSeries);

Пересылает серию на «задний план» — она будет рисоваться последней

Метод

Объявление / Описание

SeriesTitle

Legend

Function SeriesTitleLegend(SeriesIndex : Longint;

ActiveOnly : Boolean) : String;

Возвращает заголовок указанной серии

SeriesUp

Procedure SeriesUp (ASeries : TChartSeries);

Пересылает серию на «передний план» — она будет рисоваться

Первой

Undo Zoom

Procedure UndoZoom;

Восстанавливает исходный масштаб после изменения его поль­зователем I

ZoomPercent

Procedure ZoomPercent(Const PercentZoom : Double);

Осуществляет изменение (увеличение или уменьшение) масшта — J ба заданием его в процентах. На характер процесса изменения оказывает влияние свойство AnimatedZoom

[ ZoomRect

Procedure ZoomRect(Const Rect : TRectl:

Осуществляет изменение (увеличение или уменьшение) масшта­ба заданием координат новой отображаемой области. На харак­тер процесса изменения оказывает влияние свойство Animated-

Zoom

События

Событие

Описание

OnAfterDraw

Наступает после прорисовки всех серий. В обработчике нель­зя изменять какие-то свойства, способные вызвать повтор­ную прорисовку серий

OnAllowScroll

Наступает перед прокруткой изображения. В обработчике мож­но указать величину прокрутки, а можно запретить прокрутку

OnClick

Наступает при щелчке на точке какой-то серии

OnClickAxis

Наступает при щелчке на оси координат

. OnClick Background

Наступает при щелчке в точке фона, не относящейся к оси,

Серии или легенде

OnCIickLegend

Наступает при щелчке на легенде — списке обозначений

OnClickSeries

Наступает при щелчке на точке какой-то серии. В обработ­чике можно узнать серию и точку, на которой был щелчок

OnGetAxisLabel

Наступает при рисовании метки оси

OnGetLegendPos

Наступает перед отображением легенды. В обработчике мож­но определить и изменить координаты и цвет отображения

OnGetLegend

Rect

Наступает перед отображением легенды. В обработчике можно определить и изменить координаты и размеры отображения

OnGetLegend

Text

Наступает перед отображением легенды. В обработчике мож­но определить и изменить отображаемый текст

I OnGetNextAxis

Label

Обработчик используется для неавтоматического изображе­ния осей______________________ ________________________________ J

Событие

Описание

OnPageChange

Наступает перед изменением свойства Page перед прорисов­кой изображения новой страницы

OnScroll

Наступает перед очередной перерисовкой при прокрутке по­льзователем изображения правой кнопкой мыши

________________

OnUndoZoom

Наступает при восстановлении масштаба с помощью метода UndoZoom и соответствующем изменении диапазона отобра­жаемых значений

OnZoom

Наступает при увеличении изображения пользователем или методами ZoomRect и ZoomPercent

CheckBox — индикатор

Индикатор с флажком, используемый для включения и выключения каких-то опций или для индикации состояния.

Страница библиотеки Standard Класс TCheckBox

Иерархия TObiect TPersistent TComponent TContГоI-

TWinControl TButtonContro I TCustomCheckBox

Модуль Stdctrls Примеры изображения

рис. 2.6
примеры индикаторов
⅛≈JSl×J

P WsckBbxii J* CheekBbx2 Г CheekBbx3

ToLefUuSl

____________

Описание

Индикаторы с флажком CheckBox Используются в приложениях в основном для того, чтобы пользователь мог включать и выключать какие-то опции, или для индикации состояния. При каждом щелчке пользователя на индикаторе его со­стояние изменяется, проходя в общем случае последовательно через три значения: выделение (появление черной галочки — CheckBoxl На рис. 2.6), промежуточное (серое окно индикатора и серая галочка — CheckBox2 На рис. 2.6) и не выделенное (пустое окно индикатора — CheckBoxS на рис. 2.6). Этим трем состояниям соответ­ствуют три значения свойства компонента State: cbChecked, cbGrayed, cbUn — checked. Все три состояния допускаются только при значении другого свойства AIlowGrayed Равном True. Если же AllowGrayed = false (значение по умолчанию), то допускается только два состояния: выделенное и не выделенное. И State, И AIlowGrayed Можно устанавливать во время проектирования или программно во время выполнения.

Промежуточное состояние обычно используется, если индикатор применяется для отображения какой-то характеристики объекта. Например, если индикатор призван показать, какой регистр использовался при написании некоторого фраг­мента текста, то в случае, если весь текст написан в верхнем регистре, индикатор может принимать выделенное состояние, если в нижнем — не выделенное, а если использовались оба регистра — промежуточное.

Проверять состояние индикатора можно не только по значению State, Но и по значению свойства Checked. Если Checked Равно True, То индикатор выбран, т. е. State = cbChecked. Если Checked Равно False, То State Равно cbUnchecked или cbGτayed. Установка Checked В True во время проектирования или выполнения ав­томатически переключает State В CbChecked.

Надпись в индикаторе задается свойством Caption, А ее размещение по отно­шению к индикатору — свойством Alignment (на рис. 2.6 в нижнем индикаторе Alignment = taLeftJus tify И надпись расположена слева).

Основное событие индикатора — OnClick, Наступающее при щелчке на компо­ненте. В обработчике этого события можно анализировать свойства Checked И State, Которые уже приняли новое значение.

Основные свойства

Свойство

Объявление / Описание

Action

Classes::TBasicAction* Action

Определяет действие, связанное с данным индикатором ∣

Alignment

Спит TAlignment { TaLeftJustify, TaRight Justify, taCenter } ; I Typedef TAlignment TLeftRight;

Classes::TLeftRight Alignment

Определяет положение надписи (слева или справа) по отноше­нию к индикатору

AllowGrayed

Bool AllowGrayed

Разрешает или запрещает появление в индикаторе третьего со­стояния cbGrayed

Caption

AnsiString Caption

Надписьиндикатора!

______________

.

Checked

Bool Checked

Указывает, выбран ли индикатор (содержит ли он флажок)

State

Enum TCheckBoxState {cbUnchecked, CbChecked, CbGrayed}; TCheckBoxState State

Определяет состояние индикатора: выключен (cbUnchecked), включен (cbChecked), в третьем состоянии (cbGrayed)

TabOrder

Typedef short TTabOrder;

TTabOrder TabOrder

Указывает позицию компонента в списке табуляции. Опреде­ляет порядок переключения фокуса между компонентами окна при нажатии клавиши Tab. Изначально соответствует порядку добавления компонентов на форму

TabStop

Bool TabStop

Определяет возможность доступа пользователя к кнопке с по­мощью клавиши Tab

Основные методы

Метод

Объявление / Описание

ExecuteAction

Bool ExecuteAction(TBasicAction* Action)

Вызывает указанное действие Action, Связанное с данным ин­дикатором

; Метод

Объявление / Описание

I

________

Hide

Void Hide(void)

Делает индикатор невидимым

SetFocus

Void SetFocus(void)

Передает фокус элементу, активизирует его

Show

Void SetFocus(void)

Делает видимым невидимый индикатор

Основные события

Событие

Описание J

OnCIick

Наступает при щелчке на компоненте. В обработчике этого события можно анализировать свойства Checked и State, ко­торые уже приняли новое значение

OnContextPopup

Наступает при вызове пользователем контекстного меню, связанного с компонентом (щелчком правой кнопкой мыши

Или иным способом)

ClieckListBox — список строк с индикаторами

Отображает список строк с индикаторами.

Страница библиотеки Additional Класс TCheckListBox

Иерархия TObiectTPersistentTComponentTControl TWinControl TCustomListBox

Модуль Checklst Примеры изображения

Засолом*. 1

————- Г

C строка 2

Й строка 3

□ строе а 4

Заголовок 2

□ строка 7

ZJ

jΞj×j
u- строка ~s, строка 8
q строка 2 о строка э gi строка 3 □ строка 1 о
строка 4 строка 1 1
c 'строка 5 ij > строка 6 : й <n⅛hl⅝⅛⅝
' строка 7 строка 14
Рис. 2.7

Компоненты CheckListBox: слева — окно списка с одним столбцом, справа — с двумя

Описание

Компонент CheckListBox Аналогичен компоненту списка строк ListBox. За ис­ключением того, что рядом с каждый элементом находится окно с флажком — ин­дикатор, который пользователь может включать и выключать, помечая элементы списока. Состояние индикатора изменяется при каждом щелчке пользователя на нем. Если свойство AlIowGrayed установленно True, То при переключении индика­тора возможно, наряду с включенным и выключенным состояниями, третье про­межуточное состояние CbGrayed (см. строку 3 в правом списке на рис. 2.7).

Основное свойство компонента, содержащее список строк, — Items, Имеющее тип TStrings. Заполнить его во время проектирования можно, нажав кнопку с многоточием около этого свойства в окне Инспектора Объектов. Во время выпол­нения работать с этим свойством можно, пользуясь свойствами и методами класса TStrings Clear, Add И другими.

Индекс выбранной пользователем строки определяется свойством ItemIndex, Доступным только во время выполнения. Если ни одна строка не выбрана, то Itemlndex = -1. Начальное значение Itemlndex Невозможно задать во время про­ектирования. По умолчанию Itemlndex = -1. Это означает, что ни один элемент списка не выбран. Если вы хотите задать этому свойству какое-то другое значение, т. е. установить выбор по умолчанию, который будет показан в момент начала рабо­ты приложения, то сделать это можно, например, в обработчике события OnCreate Формы, введя в него оператор вида

ChecListBoxl. ItemIndex:=O;

Свойство Columns Определяет число столбцов, в которых будет отображаться список, если он не помещается целиком в окне компонента CheckListBox (в пра­вом списке на приведенном выше рисунке Columns = 2).

Свойство Sorted Позволяет упорядочить список по алфавиту. При Sorted = true Новые строки в список добавляются не в конец, а по алфавиту.

Свойство Style, установленное в IbStandard (значение по умолчанию) соответ­ствует списку строк. Другие значения Style Позволяют отображать в списке не только текст, но и изображения (см. об этом подробнее в описании компонента ListBox).

Состояния индикаторов определяют два свойства: State и Checked. Оба эти свойства можно рассматривать как индексированные массивы, каждый элемент которого соответствует индексу строки. Эти свойства можно устанавливать про­граммно или читать, определяя установки пользователя. Например, операторы

CheckListBoxl->Checked[1J = true;

CheckListBoxl-J-State [2] = CbGrayed;

Устанавливают индикатор второй строки списка CheckListBoxl в состояние вы­бранного, а индикатор третьей строки — в промежуточное состояние (вспомним, что индексы начинаются с 0).

Оператор

For (int i=0; i < CheckListBoxl-J-Items-J-Count; i+ + ) if ( CheckListBoxl->Selected[i]) …

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

В компоненте CheckListBox Имеется событие OnClickCheck, Возникающее при каждом изменении пользователем состояния индикатора. Его можно использовать для обработки результатов изменения.

В C++Builder 6 в CheckListBox Появились новые свойства, позволяющие зри­тельно разбить список на несколько разделов с помощью заголовков. Свойство Header Представляет собой индексированный массив булевых значений, опреде­ляющих, является ли соответствующая строка заголовком (значение true), или это обычная строка с индикатором (значение False). Свойство Header — только време­ни выполнения и должно заполняться программно (по умолчанию все значения равны False). Например, операторы

CheckListBoxl->Header[0] = true;

CheckListBoxl-J-Header [4 ] = true;

Задают в качестве заголовков первую и пятую строки (см. рис. 2.7).

Заголовки отображаются в строках с цветом фона, определяемым свойством HeaderBackgroundColor, И цветом надписи, задаваемым свойством HeaderColor.

См. также описание компонента ListBox, В котором описаны многие общие ха­рактеристики компонентов CheckListBox и ListBox.

Основные свойства

Свойство

Объявление / Описание I

Action

Classes: :TBasicAction* Action

Определяет действие, связанное с данным компонентом

Align

Enum TAlign {alNone, AlTop, AlBottom, alLeft, alRight, alClient, AlCustom};

TAlign Align

Определяет способ выравнивания компонента в контейнере (ро­дительском компоненте)

AllowGrayed

Bool AllowGrayed

Разрешает или запрещает появление в индикаторе третьего про­межуточного состояния CbGrayed

Anchors

Enum TAnchorKind { AkLeft, AkTop, akRight, akBottom }; typedef Set<TAnchorKind, akLeft, akBottom> TAnchors; TAnchors Anchors

Определяет привязку данного компонента к родительскому при изменении размеров последнего

Checked

Bool Checked[int Index]

Индексированный массив, каждый элемент которого соответст­вует индексу строки и определяет, включен ли в ней индикатор

(имеет ли он флажок)

Columns

Int Columns

Определяет число столбцов, в которых будет отображаться спи­сок, если он не помещается целиком в окне компонента

Count

Int Count

Определяет число строк в списке. Может (и должно) задаваться только при значениях Style, равных IbVirtual Или IbVirtualOw — nerDraw

Extended

Select

Bool ExtendedSelect

Определяет, может ли пользователь при MultiSelect = true вы­брать несколько последовательно расположенных элементов,

Держа нажатой клавишу Shift

Header

Bool Header[int Index]

Индексированный массив булевых значений, определяющих, яв­ляется ли соответствующая строка заголовком (значение true), или это обычная строка с индикатором (значение false). Свойст­во только времени выполнения

Header

Background

Color

Graphics: :TColor HeaderBackgroundColor

Определяет цвет фона строк заголовков, заданных свойством He­ader

HeaderColor

GraphicsuTColor HeaderColor

Определяет цвет надписей строк заголовков, заданных свойством

Header

Свойство

Объявление / Описание

ItemEnabled

Bool ItemEnabled[int Index]

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

| ItemIndex

Int Itemlndex

Указывает порядковый номер элемента, выделенного в списке. Свойство только времени выполнения!

Items

____________

Classes-TStrings* Items

Массив строк списка — объект класса TStrings. Свойства этого класса позволяют формировать и изменять список

ɪ MultiSelect

Bool MultiSelect

Разрешает выбирать в списке несколько строк

SelCount

Int SelCount

Указывает количество выделенных элементов при MultiSelect = true. Доступ только для чтения :

Selected

Bool Selected[int Index]

Индексированный массив, определяющий, какие элементы спис­ка выделены

Sorted

Bool Sorted

Указывает, должны ли строки в списке автоматически сортиро­ваться в алфавитном порядке ‘

State

Enum TCheckBoxState {cbUnchecked, CbChecked, cbGrayed}; StdctrlszTCheckBoxState State[int Index]

Индексированный массив, определяющий состояния всех инди­каторов: CbUnchecked (не включен), cbChecked (включен), cbGrayed (в третьем состоянии)

I Style

Enum TListBoxStyle {lbStandard, IbOwnerDrawFixed,

IbOwnerDrawVariable, IbVirtual, IbvirtualOwnerDrawJ;

TListBoxStyle Style

Определяет, будет ли окно списка стандартным, отображающим только текст, или будет позволять отображение также графиче­ских образов, а также определяет виртуальные списки (см. в описании компонента ListBox)

TopIndex

Int Toplndex

Указывает индекс элемента, видимого вверху списка. Изменение i этого индекса соответственно сдвигает видимую часть списка

Основные методы

Метод

Объявление / Описание

Clear

___

Void Clear(void)

Удаляет все элементы списка

I Метод

Объявление / Описание ɪl

ItemAtPos

Int ItemAtPos(TPoint &Pos, Bool Existing)

Возвращает индекс элемента списка, соответствующего указан­ным координатам Pos. Если позиция Pos расположена после по­следнего элемента, то при Existing = true ItemAtPos возвращает -1, а при Existing = false — последний элемент списка

ItemRect

TvpesuTRect ItemRect(int Index)

Возвращает прямоугольник, описывающий указанный элемент

Item списка

5 SetFocus

Types: :TRect ItemReet(int Index)

Передает фокус элементу, активизирует его

Основные события

Событие

Описание

J OnClick

Наступает при щелчке на элементе списка l∣

J OnClickCheck

Наступает, когда пользователь изменяет состояние индикатора

Элемента списка

OnData

Наступает в виртуальных списках, когда приложению надо ото­бразить очередную строку списка

OnDataFind

Обработчик события пишется для возможности управления вир­туальным списком, например, для поиска строки по первым символам или для упорядочивания строк ∣

‘ OnDataObject

Наступает в виртуальных списках, когда со строками виртуаль­ного списка надо связать какие-то объекты

_____________

OnDrawItem

Наступает при необходимости перерисовать элемент списка (см. ! выше описание CheckListBox) ∣∣

OnKevDown

Событие наступает при нажатии пользователем любой клави­ши. В обработчике можно распознать нажатую клавишу

OnKevPress

Событие наступает при нажатии пользователем клавиши симво­ла. В обработчике можно распознать вводимый символ и при необходимости изменить его или запретить его ввод

OnKevUp

Событие наступает при отпускании пользователем любой клави­ши. В обработчике можно распознать отпускаемую клавишу

_____________

OnMeasure

I Item

Наступает при необходимости перерисовать элемент в списке с изменяемой высотой элементов

ClientDAtaSet клиентский набор данных

Клиентский набор данных.

Страница библиотеки Data Access Класс TClientDataSet

Иерархия TObieCt TPersistent TComponent TDataSet TcustomClientDataSeT

Модуль DBClient

Описание

Компонент ClientDataSet Используется для создания в приложении клиент­ского набора данных. С его помощью можно создавать автономные наборы дан­ных, портфельные наборы данных, интерфейсы к другим наборам данных, обла­дающие расширенными возможностями по индексации и фильтрации данных, по расчету совокупных характеристик.

Все свойства и методы компонент ClientDataSet Наследует от своего базового класса TCustomClientDataSet. Рассмотренного в гл. 1. Основные свойства, методы и события рассмотрены также в главах 4 и 5, где можно найти соответствующие примеры. Клиентские наборы обладают также всеми свойствами и методами, на­следуемыми ими от предшественника TCustomClientDataSet — класса TDataSet. И многими возможностями, присущими наборам данных, связанным с таблицами. Иначе говоря, упорядочивание данных с помощью индексов, задание ограниче­ний, создание и модификация таблиц может осуществляться в клиентских набо­рах данных так же, как и в других наследниках TDataSet. Но во всех этих опера­циях добавляется немало новых возможностей.

Особенность клиентских наборов данных заключается в том, что данные хра­нятся в памяти и могут сохраняться в файле на диске и читаться из этого файла. Таким образом, клиентские наборы данных могут выступать как автономные осно­ванные на файлах MyBase наборы данных в однопоточных приложениях. Другая немаловажная функция клиентских наборов — создание так называемой «порт­фельной» базы данных, в которую первоначально записываются данные сервера или какой-то иной базы данных, а затем вся работа проходит с файлом на компью­тере клиента. Пользователь может изменять эти данные, причем при закрытии клиентского набора все изменения запоминаются в файле. А при открытии набора данные из файла записываются в клиентский набор. Таким образом, «портфель­ная» база данных — альтернатива кэширования. Преимуществом является то, что изменения могут производиться не обязательно в одном сеансе работы, а в не­скольких. И когда пользователь решит, что изменения заслуживают пересылки в базу данных, он может занести в нее все изменения, сделанные на протяжении этих сеансов.

Клиентские наборы данных обладают еще одной полезной особенностью. С их помощью наиболее просто осуществлять взаимную трансляцию таблиц баз дан­ных, созданных в разных СУБД и работающих на разных платформах.

Рассмотрим несколько подробнее основные области применения клиентских наборов данных. Начнем с автономных наборов данных.

Клиентские наборы данных могут выступать как автономные основанные на файлах MyBase наборы данных в однопоточных приложениях. Для работы с уже имеющимся автономным набором, хранящемся в виде файла, достаточно размес­тить на форме компонент клиентского набора ClientDataSet И указать в его свой­стве FileName Имя файла. При начале выполнения приложения данные из указан­ного файла будут читаться, а при завершении выполнения будут сохраняться в файле. Управление фиксацией результатов редактирования данных и отказом от проведенного редактирования осуществляется свойством SavePoint (см. в гл. 3).

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

Новый пустой набор данных можно создавать и во время проектирования. Для этого сначала с помощью Инспектора Объектов надо заполнить свойство FieldDefs. Тогда при щелчке правой кнопкой мыши на компоненте клиентского набора дан­ных в меню появится раздел Create Data Set. Выбор этого раздела обеспечит созда­ние набора данных.

Теперь рассмотрим работу с портфельной базой данных. Для создания порт­фельного набора в приложении, кроме компонент клиентского набора ClientDaTaSet, Должен располагаться провайдер (например, DataSetProvider) или брокер, обеспечивающие связь с основной базой данных. Набор основной базы данных мо­жет размещаться как в том же приложении, так и на удаленном сервере. Простей­ший вариант — размещение набора (Table. Query Или любого другого) в том же при­ложении. Этот набор должен обычным образом быть связанным с базой данных.

В свойстве DataSet Провайдера указывается основной набор данных. В свойст­ве ProviderName Клиентского набора указывается провайдер. Если связь клиент­ского набора с сервером устанавливается брокером, то этот брокер должен быть указан в свойстве ConnectionBroker. В многопоточных приложениях в свойстве RemoteServer Должен указываться компонент, используемый для связи с серве­ром приложений.

Так же, как в автономных базах данных, в свойстве FileName Компонента клиентского набора указывается имя файла, в котором хранится база данных. Свойство FileName Задается, если компонент должен всегда читать и записывать данные одного определенного файла. Если файл, указанный в FileName, Сущест­вует, то при каждом открытии набора данных в него будут загружаться данные из этого файла, а при каждом закрытии набора данных в него будут записываться данные из набора. Можно также осуществлять чтение данных из файла методом LoadFromFile.

Фиксация исправлений в портфельном наборе данных или отказ от сделанных исправлений осуществляется с помощью свойства SavePoint. Пересылка исправ­лений в основную базу данных осуществляется методом AiiplvUpdates.

Если в некоторый момент надо прочитать опять в портфельный набор всю базу данных, это можно сделать, удалив файл базы, а затем закрыв и открыв клиент­ский набор данных.

Имеется возможность создавать портфельный набор, перекачивая в него не всю основную базу данных, а только записи, удовлетворяющие некоторым крите­риям. Это делается с помощью фильтрации, как показано в гл. 4 в примере раздела «DataRequest, OnDataRequest — методы и событие».

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

Теперь рассмотрим, в чем состоят особенности клиентских наборов данных при выполнении традиционных операций: индексация данных и их фильтраци. Клиентские наборы данных обладают расширенными возможностями по упорядо­чиванию их отображения. В клиентских наборах можно осуществлять сортировку заданием списка полей в свойстве IndexFieldNames. Причем в этом свойстве мож­но указывать список любых полей, а не только тех, которые имеются в предопре­деленных индексах. Но существенно более широкие возможности открывает метод AddIndex. Он позволяет добавлять индекс, задавая при этом для каждого поля на­правление сортировки: нарастающее или убывающее. Индексы, добавляемые ме­тодом Addlndex, Поддерживают группировку и вычисление совокупных характе­ристик. Все это дает возможность пользователю задавать различные способы ин­дексации непосредственно во время выполнения, как показано в гл. 4, в примерах, приведенных при описании метода Addlndex.

Клиентские наборы данных обладают также расширенными возможностями фильтрации записей. Свойство Filter Поддерживает в них множество операций
и функций (см. в гл. 3), недоступных, например, в таком традиционном наборе данных, как TTable. При использовании клиентского набора данных как порт­фельного можно также отфильтровать записи, записываемые в набор из основной базы данных. Эта возможность рассмотрена в гл. 4, в примере раздела «DataRe — quest, OnDataRequest — методы и Событие».

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

Имеется два способа вычисления совокупных характеристик: использование свойства Aggregates И создание полей совокупных характеристик. Оба способа рассмотрены в гл. 3 в описании свойства Aggregates. Вычисление совокупных ха­рактеристик клиентского набора данных может осуществляться по всем записям набора, или по некоторой совокупности записей. В последнем случае требуемые за­Писи должны быть выделены в некоторый уровень группирования (см. в [11 и [3]).

CoIorBox — выпадающий список для выбора цвета_________________

Выпадающий список для выбора цвета.

Страница библиотеки Additional Класс TColorBox

Иерархия TObiect TPersistЕпTTConwonentTControl

TWinControl TCustomComb ОВох — TCustomColorBox

Модуль ExtCtrls Пример изображения

Рис. 2.8

Пример компонента, содержащего строки «Custom» и «None» при включенной опции CbPrettyNarnes

Описание

Компонент CoIorBox, Введенный в C++Builder 6, представляет собой выпадаю­щий список цветов. Может использоваться как простой и удобный способ выбора цвета пользователем.

Свойство Style Является множеством, элементы которого определяют, какие именно категории цвета представлены в списке: стандартные, системные, допол­нительные. Этим свойством может быть также задано наличие строки с заказным цветом. Подобная строка с надписью «Custom…» появляется первой в списке. При выборе ее открывается стандартный диалог Windows выбора цвета, в котором пользователь может определить заказной (нестандартный) цвет.

Свойство Style Позволяет также включить в список цветов строки «с,!De­fault» — цвет компонента по умолчанию, и «clNone» — цвет, зависящий от версии Windows — белый для Windows 98, черный для Windows NT/2000/XP. Если при­своить цвет ClDefault Какому-то компоненту, то компонент будет рисоваться цве­том, который заложен в него по умолчанию. Аналогично, присваивание ClNone Тоже приведет к тому, что истинный цвет будет определяться самим компонентом.

Еще одна опция свойства Style -CbPrettyNames обеспечивает отображение имен цветов без префикса «cl». Например, «Black» (при CbPrettyNames = True) Вместо «clBlack» (при CbPrettyNames = false).

Свойство DefaultcolorColor Определяет, квадратиком какого цвета будет по­мечена в списке строка «ClDefault». Свойство N OneColorColor Определяет, квадра­тиком какого цвета будет помечена в списке строка «clNone». При этом, как сказа­но выше, в действительности присваиваемые цвета будут определяться теми ком­понентами, в которые они передаются.

Узнать цвет, выбранный пользователем в списке, позволяет свойство Selected. Для этого можно воспользоваться, например, событием компонента OnSelect, На­ступающим в момент выбора пользователем цвета. Например, оператор

Memol->Color = ColorBoxl->Selected;

Помещенный в обработчик этого события, задаст фону окна Memol цвет, выбран­ный пользователем.

Свойство Colors Является индексированным массивом цветов в списке (индек­сы начинаются с 0). Свойство ColorNames — аналогичный массив строк с именами

Цветов.

Большинство остальных свойств, методов, событий подобны компоненту Com— ЬоВох. В частности, список всех строк содержится в свойстве Items Типа TStrings. Индекс строки цвета, которая будет показана пользователю в момент начала вы­полнения приложения, определяется свойством только времени выполнения ItemIndex. Если вам желательно в первый момент показать пользователю определен­ный цвет, это можно сделать в обработчике события формы OnCreate. определив в нем ItemIndex С помощью метода IndexOf. Например, оператор:

ColorBoxl->ItemIndex = ColorBoxl->Items->IndexOf("ClDefault"); или (при CbPrettyNames = true):

ColorBoxl->ItemIndeX = ColorBoxl->Items->IndexOf ("Default") ; в первый момент показывает пользователю строку цвета по умолчанию.

Основные свойства

I Свойство

Объявление / Описание

ColorNames

AnsiString ColorNamesΓint Indexl

Индексированный массив строк с именами цветов. Индексы начинаются с 0. В зависимости от опции CbPrettyNames свойства Style имена начинаются с префикса «cl» («clBlack») или записываются без этого префикса («Black»)

Colors

Graphics::TColor Colorsfint Index]

Индексированный массив строк цветов. Индексы начинаются с 0. Опции свойства Style определяют, какие цвета содержат­ся в списке

! DefaultColor Color

GraphicsuTCoIor DefaultColorColor

Определяет, квадратиком какого цвета будет помечена в спи­ске строка «ClDefault». Истинный цвет определяется компо­нентом, воспринимающим этот цвет (см. описание компонен­та ColorBox). Свойство работает, только если в Style заданы опции cbSystemColors и CbIncludeDefault

DropDown

Count

Int DropDownCount

Определяет максимальное число строк, отображаемое в рас­крывающемся списке

Свойство

Объявление / Описание

ItemIndex

Int Itemlndex

Указывает порядковый номер элемента, выделенного в выпа­дающем списке

Items

Classes::TStrings* Items

Массив строк списка — объект класса TStrings. Свойства это­го класса позволяют формировать и изменять список

NoneColorColor

Graphics-TColor NoneColorColor

Определяет, квадратиком какого цвета будет помечена в спи­ске строка «ClNone». Истинный цвет определяется компонен­том, воспринимающим этот цвет (см. описание ColorBox). Свойство работает, только если в Style Заданы опции CbSys — temColors И CbIncIudeNone I

Selected

TCoIor Selected

Выбранный пользователем цвет. Его удобно определять в об­работчике события OnSelect

Style

Enum TColorBoxStyles {cbStandardColors, cbExtendedColors, cbSystemColors, CbIncludeNone, CbIncludeDefault, cbCustomColor, CbPrettyN ames };

Typedef Set<TColorBoxStyles, cbStandardColors, cbPrettyNames> TColorBoxStyle;

TColorBoxStyle Style

Множество опций, определяющих состав цветов в списке

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

combobox — выпадающий список строк Страница библиотеки Standard

Класс TComboBox

Иерархия TObiect — TPersistent — TComoonentTControl —

TWinControlTcustomComboBox

Модуль Stdctrls

Примеры изображения

Рис. 2.9

Компоненты ComboBox: слева список в стиле CsDropDown, справа — CsSimpIe

Описание

Компонент ComboBox Объединяет функции компонентов ListBox — списка, и Edit — окна редактирования. Компонент позволяет пользователю выбрать из

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

Отличие ComboBox От схожего по функциям компонента ListBox Заключается в следующем:

ComboBox Разрешает пользователю редактировать список, a ListBox Не разре­шает

В ComboBox Список может быть развернут или свернут, а в ListBox Он всегда развернут

ListBox Может допускать множественный выбор, а в ComboBox Пользователь всегда должен выбрать только один элемент

Основное свойство компонента, содержащее список строк, — Items, имеющее тип TStrings. Заполнить его во время проектирования можно, нажав кнопку с многоточием около этого свойства в окне Инспектора Объектов. Во время выпол­нения работать с этим свойством можно, пользуясь свойствами и методами класса TStrings — Clear, Add и другими.

Стиль изображения списка определяется свойством Style:

I CsDropDown

Выпадающий список со строками одинаковой высоты и с окном редактирования, позволяющим пользователю вводить или редактировать текст (слева на рисунке)

CsSimple

Развернутый список со строками одинаковой высоты и с окном редактирования, позволяющим пользователю вводить или редактировать текст (справа на рисунке)

CsDropDownList

Выпадающий список со строками одинаковой высоты, не содержащий окна редактирования

CsOwnerDrawFixed

Выпадающий список типа CsDropDown с графической прорисовкой элементов одинаковой высоты, задаваемой

Свойством ItemHeight

CsOwnerDrawVariable

Выпадающий список типа CsDropDown с графической прорисовкой элементов, которые могут иметь различ­ную высоту

Выбор пользователя или введенный им текст можно определить по значению свойства Text. Индекс выбранного пользователем элемента списка можно опреде­лить по свойству ItemIndex. Если в окне проводилось редактирование данных, то ItemIndex = -1. По этому признаку можно определить, что редактирование прово­дилось. Начальное значение Itemlndex Можно задать во время проектирования, только если список (свойство Items) заполнен.

Свойство MaxLength Определяет максимальное число символов, которые поль­зователь может ввести в окно редактирования. Если MaxLength = 0, то число вводи­мых символов не ограничено.

Свойство Sorted Позволяет упорядочить список по алфавиту. При Sorted = true Новые строки в список добавляются не в конец, а по алфавиту.

Текст выбранной или написанной пользователем строки находится в свойстве Text. Индекс выбранной строки можно узнать из свойства Itemlndex.

Основное событие компонента — OnChange Наступает при изменении текста в окне редактирования в результате прямого редактирования текста или в резуль­тате выбора из списка.

При значениях стиля Style, Равных CsOwnerDrawFixed и CsOwnerDraw- Variable Редактирование текста в окне списка невозможно. Работа с графикой производится в обработчиках событий OnDrawItет и OnMeasureIiem. Событие

OnDrawItem наступает, когда должна рисоваться какая-то строка списка. Заголо­вок обработчика этого события имеет вид:

Void TForrnl::ComboBoxlDrawItem(TWinControl *Control,

Int Index, TRect SRect, TOwnerDrawState State)

Параметр Control Является указателем на список, в котором происходит собы­тие. Параметр Index Указывает индекс элемента, который должен быть перерисо­ван. Параметр Rect Типа TRect (см. в гл. 1) указывает область канвы списка, соот­ветствующую рисуемому элементу списка. Параметр State Типа TOwnerDraw — State Является множеством, элементами которого могут быть значения OdSelec — Ted — строка выделена, OdFocused Строка находится в фокусе и ряд других.

В обработчике события OnDrawItem Надо методами работы на канве (см. в гл. 1 описание типа TCanvasI нарисовать изображение элемента.

При значении Style, Равном IbOwnerDrawFixed, перед прорисовкой наступает только событие OnDrawItem. При Style = IbOwnerDrawVariable перед этим собы­тием наступает другое — OnMeasureItem, в котором надо указать высоту элемен­та. Заголовок обработчика этого события имеет вид:

Void TForml::ListBoxlMeasureItem(TWinControl *Control,

Int Index, int SHeight)

Параметры Control И Index Имеют тот же смысл, что и в обработчике OnDrawItem, А значение параметра Height Надо задать равным высоте данного элемента списка.

Подробно работа с графикой в списках рассмотрена в [1].

Основные свойства

Свойство

———a———— ■ ——■

Объявление / Описание ■

Action

ClassescTBasicAction* Action

Определяет действие, связанное с данным компонентом

Align

Enum TAlign { alNone, alTop, alBottom, alLeft, alRight, alClient, alCustom }

TAlign Align

Определяет способ выравнивания компонента в контейнере (ро­дительском компоненте) ■

Anchors

Enum TAnchorKind { akLeft, akTop, akRight, akBottorn }; typedef Set<TAnchorKind, akLeft, akBottom> TAnchors;

TAnchors Anchors

Определяет привязку данного компонента к родительскому при изменении размеров последнего

DropDown

Count

Int DropDownCount

Определяет максимальное число элементов, отображаемое в рас­крывающемся списке без появления полосы прокрутки. Действу­ет при всех значениях Style, кроме csSimple

ItemHeight

Int ItemHeight

Указывает высоту элементов, в пикселах, в выпадающем списке

ItemIndex

Int Itemlndex

Указывает порядковый номер элемента, выделенного в списке

Items

ClassesnTStrings* Items

Массив строк списка — объект класса TStrings. Свойства этого класса позволяют формировать и изменять список ∣

Свойство

Объявление / Описание ‘

SelLength

Int SelLength

Определяет количество выделенных символов в окне редактиро­вания

Γsel Start

Int SelStart

Указывает позицию первого выделенного символа в окне редак­тирования или, если выделения нет, то позицию курсора в нем

SelText

AnsiString SelText

Текст, выделенный в окне редактирования

Sorted

Bool Sorted

Указывает, должны ли строки в списке автоматически сортиро­ваться в алфавитном порядке

Style

Enum TComboBoxStyle {csDropDown, CsSimple, CsDropDownList, CsOwnerDrawFixed, CsOwnerDrawVariable } ; I

TComboBoxStyle Style

Определяет стиль отображения списка (см. выше в описании

ComboBox)

Основные методы

I Метод

Объявление / Описание

Clear

Void Clear(void)

Удаляет все элементы списка

I SelectAll

Void S elect All(void)

Выделяет весь текст в окне редактирования

SetFocus

Void SetFocus(void)

Передает фокус элементу, активизирует его

Основные события

Событие

Описание

OnChange

Наступает при изменении текста в окне редактирования в резуль­тате прямого редактирования текста или в результате выбора из списка. В обработчике можно прочитать текст Text и индекс вы­бранного элемента ItemIndex (-1, если был не выбор, а редакти­рование)

OnDrawItem

Наступает при необходимости перерисовать элемент списка (см. выше описание ComboBox)

OnDropDown

Событие происходит, когда пользователь открывает раскрываю­щийся список, щелкая на стрелке справа от компонента

OnKevDown

Событие наступает при нажатии пользователем любой клави­ши. В обработчике можно распознать нажатую клавишу

OnKeyPress

Событие наступает при нажатии пользователем клавиши сим­вола. В обработчике можно распознать вводимый символ и при необходимости изменить его или запретить его ввод

Событие

Описание!

OnKeyUp

Событие наступает при отпускании пользователем любой кла­виши. В обработчике можно распознать отпускаемую клавишу

OnMeasure

Item

Наступает при необходимости перерисовать элемент в списке с изменяемой высотой элементов (см. выше описание ComboBox) ,,

ComboBoxEx — выпадающий список строк текста с изображениями

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

Страница библиотеки Win32

Класс TComboBoxEx

Иерархия TObiectTPersistent TComyonentTControl

TWinControI-TCustomListControl— TCustomComboTCustomComboBoxEx— TBiDiComboBoxEx

Модуль StdCtrls Пример изображения

Рис. 2.10

Пример компонента ComboBoxEx

Описание

Компонент ComboBoxEx во многом подобен ComboBox. Различие, прежде все­го, заключается в том, что в ComboBoxEx Легче, чем в ComboBox, Вводить изобра­жения в элементы списка. С другой стороны, некоторые возможности ComboBox, Например, возможность сортировки, в ComboBoxEx Не поддерживаются. Невоз­можно также в этом списке заказное рисование на канве.

Изображения, отображаемые в элементах списка, должны содержаться в ком­поненте ImageList. Ссылка на этот компонент задается в свойстве Images. Ввод элементов списка во время проектирования осуществляется редактором коллек­ций, вызываемым шелчком на кнопке с многоточием в окне Инспектора Объектов около свойства ItemsEx. Перед вами откроется окно, в котором кнопка Add New позволяет ввести новый элемент. Если вы ввели элемент и выделили его, то в окне Инспектора Объектов увидите его свойства. Основные из них: Caption — текстовая строка, ImageIndex — индекс соответствующей пиктограммы в списке ImageList, Indent — отступ от левого поля элемента списка.

Свойство Style Определяет стиль элемента и может быть равным CsExDrop — Down — выпадающий список с окном редактирования, CsExSimple — разверну­тый список с окном редактирования, CsExDropDownList — выпадающий список без окна редактирования, так что пользователь не может ввести свой текст.

Более подробное описание работы со списком см. в разделе, посвященном ком­поненту ComboBox.

Основные свойства

! Свойство

Объявление / Описание

Align

Enum TAlign { alNone, alTop, alBottom, alLeft, alRight, alCIient, alCustom }

TAlign Align

Определяет способ выравнивания компонента в контейнере (ро­дительском компоненте)

Anchors

Enum TAnchorKind { akLeft, akTop, akRight, akBottom }; typedef SetcTAnchorKind, akLeft, akBottom> TAnchors;

TAnchors Anchors

Определяет привязку данного компонента к родительскому при изменении размеров последнего

DropDown

Count

Int DropDownCount

Определяет максимальное число элементов, отображаемое в рас­крывающемся списке без появления полосы прокрутки. Дейст­вует при всех значениях Style, кроме csSimple

Images

TCustomImageList* Images

Ссылка на компонент ImageList, содержащий список изображе­ний

ItemHeight

Int ItemHeight

Указывает высоту элементов, в пикселах, в выпадающем списке

I ItemIndex

Int Itemlndex

Указывает порядковый номер элемента, выделенного в списке

Items

Classes: :TStrings* Items

Массив текстовых строк списка — объект класса TStrings. Свой­ства этого класса позволяют формировать и изменять список

ItemsEx

TComboExItems* Items

Коллекция объектов элементов списка, основные свойства кото­рых описаны выше

L! SelLength

Int SelLength

Определяет количество выделенных символов в окне редактиро­вания

! SelStart

Int SelStart

Указывает позицию первого выделенного символа в окне редак­тирования или, если выделения нет, то позицию курсора в нем

SelText

AnsiString SelText

Текст, выделенный в окне редактирования

Style

Enum TcomboBoxExStyle {csExDropDown, csExSimple, CsExDropDownListI;

TComboBoxExStyle Style

Определяет стиль отображения списка (см. в описании компо­нента)

Свойство

Объявление / Описание

StyleEx

Епшп TComboBoxExStyleEx {csExCaseSensitive, CsExNoEditImage, CsExNoEditlmagelndent, CsExNoSizeLiniit, csExPathWordBreak};

Typedef Set<TComboBoxExStyleEx, CsExCaseSensitive,

CsExPathWordBreak> TComboBoxExStyles;

TComboBoxExStyles StyleEx

Множество флагов, определяющих стиль изображения: CsExCaseSensitive Чувствительность к регистру, CsExNoEditImage — строки появляются без изображений, CsExNoEditlmagelndent — отсутствие отступов в строках, CsExNoSizeLimit — управляет перестроением высоты элементов, CsExPathWordBreak — символы "/" и трактуются как

Разделители. Это облегчает навигацию с использованием путей и URL (в Windows 9.x не поддерживается)

Основные методы

Метод

Объявление / Описание

Clear

Void Clear(void)

Удаляет все элементы списка

SelectAll

Void SelectAll(VOid)

Выделяет весь текст в окне редактирования

SetFocus

1

Void SetFocus(void)

Передает фокус элементу, активизирует его

Наследуется также много методов классов-предшественников.

Основные события

Событие

Описание

OnBeginEdit

Наступает в начале редактирования пользователем текста в окне

Редактирования

OnChange

Наступает при изменении текста в окне редактирования в результа­те прямого редактирования текста или в результате выбора из спис­ка. В обработчике можно прочитать текст Text и индекс выбранного элемента ItemIndex (-1, Если был не выбор, а редактирование)

OnEndEdit

Наступает после редактирования пользователем текста в окне редактирования

‘■ OnDropDown

Событие происходит, когда пользователь открывает раскрываю­щийся список, щелкая на стрелке справа от компонента

OnKevDown

Событие наступает при нажатии пользователем любой клавиши.

В обработчике можно распознать нажатую клавишу

OnKevPress

Событие наступает при нажатии пользователем клавиши симво­ла. В обработчике можно распознать вводимый символ и при не­обходимости изменить его или запретить его ввод

OnKevUp

Событие наступает при отпускании пользователем любой клави­ши. В обработчике можно распознать отпускаемую клавишу

ControIBar — контейнер инструментальных панелей________________

Используется в качестве контейнера перестраиваемых инструментальных па­нелей с использованием технологии Drag&Doc.

Страница библиотеки Additional

Класс TControlBar

Иерархия TObject TPersistentTComponent TContГоI

TWinControl TCustomCo ntrol TcustomControlBar

Модуль Extctrls Пример изображения

Рис. 2.11

Пример ControIBar. В середине — панель ToolBar, вынутая из ControIBar и ставшая плавающим окном

Описание

Компонент ControIBar, Как и компонент СооШаг. Относится к числу пере­страиваемых панелей и служит для составления сложных инструментальных па­нелей, состоящих из ряда других панелей, размещенных на полосах ControIBar. Отличие от СооШаг Заключается в широком применении техники перетаскивания и встраивания Drag&Doc, которую вы можете видеть в инструментальных панелях C++Builder 6. На ControIBar Можно поместить различные компоненты, например, инструментальные панели ToolBar, Окна редактирования Edit И др. Каждый ком­понент, попадая на ControIBar, Получает полосу захвата (см. на рис. 2.11), свойст­венную технологии Drag&Doc. В дальнейшем пользователь сможет все эти компо­ненты перемещать по ControIBar и Даже вынимать из ControIBar, Превращая в са­мостоятельные плавающие окна (см. рис. 2.11).

Свойство AutoDrag компонента ControIBar Определяет, можно (при значении True), Или нельзя простым перетаскиванием вынести полосу за пределы Control — Bar. Но чтобы воспользоваться этой возможностью надо у компонентов, размещен­ных на ControIBar, Установить свойства DragMode = dmAutomatic И DragKind = dkDock. Это будет означать автоматическое выполнение операций Drag&Doc. Если этого не сделать, допускается только перемещение компонентов по полосам Cont — roIBar.

Свойства RowSize И RowSnap Компонента ControIBar Определяют процедуру встраивания. Свойство RowSize Задает размеры полос, в которые могут встраи­ваться компоненты, a RowSnap Определяет захват полосами встраиваемых компо­нентов.

Свойство AutoDock, Установленное в True, Обеспечивает временное встраива­ние компонента, перетаскиваемого над панелью, в ControIBar. Это позволяет поль­зователю наглядно представлять результат перетаскивания. Причем это относится не только к компонентам, первоначально находившимся на ControIBar, Но и к лю­бому перетаскиваемому и встраиваемому компоненту.

Основные свойства

Свойство

Объявление / Описание

Align

Enum TAlign {alNone, alTop, alBottom, alLeft, alRight, alClient, alCustom};

TAlign Align

Определяет способ выравнивания компонента в контейнере (ро­дительском компоненте)

Anchors

Enum TAnchorKind { akLef t, akTop, akRight, akBottom } ; typedef SeKTAnchorKind, akLef t, akBottom> TAnchors; TAnchors Anchors

Определяет привязку данного компонента к родительскому при изменении размеров последнего

AutoDock

Bool AutoDock

Обеспечивает временное встраивание компонента, перетаскивае­мого над панелью, в ControlBar

AutoDrag

Bool AutoDrag

Определяет, можно (при значении true), или нельзя простым пе­ретаскиванием вынести полосу за пределы ControlBar

I AutoSize

Bool AutoSize

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

BevelEdges

Enum TBevelEdge { beLeft, beTop, beRight, beBottom }; typedef Set<TBevelEdge, beLeft, beBottom> TBevelEdges; TBevelEdges BevelEdges

Определяет, какая граница компонента будет иметь обрамление. Является множеством, которое может содержать beLeft — ле­вая, ЬеТор — верхняя, beRight — правая, beBottom — нижняя

BeveIIimer

Enum TBevelCut {bvNone, bvLowered, bvRaised, bvSpace}; TBevelCut Bevellnner

Определяет выпуклый, утопленный или плоский вид внутренней 1 части компонента

BevelKind

Enum TBevelKind {bkNone, bkTile, bkSoft, hkFlat};

TBevelKind BevelKind

Определяет в комбинации с BevelWidth, Bevellnner и BevelOu- ter тип обрамления компонента

■ BevelOuter

Enum TBevelCut {bvNone, bvLowered, bvRaised, bvSpace}; TBevelCut BevelOuter

Определяет выпуклый, утопленный или плоский вид обрамле­ния компонента..

I BeveIWidth

Typedef int TBevelWidth;

TBevelWidth BevelWidth

Определяет ширину обрамления компонента в пикселах

BorderWidth

Typedef unsigned TBorderWidth;

TBorderWidth BorderWidth

Расстояние в пикселах между наружной и внутренней кромками

Обрамления

Свойство

Объявление / Описание

Picture

Graphics: :TPicture* Picture

Определяет рисунок — шаблон, заполняющий фон панели

RowSize

Typedef unsigned TRowSize;

TRowSize RowSize

Определяет высоту полос, на которых располагаются компоненты

RowSnap

Bool RowSnap

Определяет захват полосами встраиваемых компонентов. Если RowSnap = True, То высота встраиваемых компонентов становит­ся равной высоте полос RowSize

Методы

Никаких специальных методов, вызываемых из приложения, в компоненте не

Объявлено

Основные события

Событие

Описание∣

OnBandDrag

Наступает, когда пользователь начинает перетаскивание указан­ного компонента. В обработчике можно запретить перетаскивание

I OnBandInfo

Наступает при согласовании позиции встраиваемого в панель

Компонента j

OnBandMove

Наступает при перемещении панели

, OnBandPaint

Наступает при прорисовке полос панели

OnPaint

Наступает при прорисовке панели

Помимо этого наследуется множество событий, свойственных всем оконным

Компонентам.

CoolBar — контейнер инструментальных панелей

Позволяет строить перестраиваемые панели, состоящие из полос, в которые мо­гут включаться инструментальные панели и любые другие оконные компоненты.

Страница библиотеки Win32 Класс TCoolBar

Иерархия TObiect TPersistent TComnonent TContГоI

TWinContrOl

Модуль Comctrls Пример изображения Рис. 2.12

Пример перестраиваемой панели на основе компонента CoolBar

Описание

Компонент CoolBar Позволяет строить перестраиваемые панели, состоящие из полос. В полосы могут включаться инструментальные панели ToolBar И любые другие оконные компоненты: окна редактирования, панели и т. п. Каждый из этих компонентов автоматически снабжается средствами перемещения его пользовате­лем в пределах окна CoolBar. В полосы могут вставляться и не оконные компонен­ты, например, метки. Но они не будут перемещаемыми.

Свойства полос вы можете задавать редактором полос, который можно вы­звать тремя способами: из Инспектора Объектов кнопкой с многоточием около свойства Bands, Двойным щелчком на компоненте CoolBar Или из контекстного меню, выбрав команду Bands Editor. В окне этого редактора вы можете перемещать­ся по полосам, добавлять новые полосы или уничтожать существующие. При пере­мещении по полосам в окне Инспектора Объектов вы будете видеть свойства полос. Свойство Control Определяет размещенный на полосе компонент. Свойство Break Определяет, занимает ли полоса весь соответствующий размер контейнера Cool — Bar, Или обрывается. Свойство Text Задает текст, который может появиться в на­чале соответствующей полосы (см. надписи «Панель и «Окно на рис. 2.12). Вместо свойства Text (или наряду с ним) можно задать свойство Iniageliidex — ин­декс списка изображений ImageList. Ссылка на который задается свойством Images. Указанные таким образом изображения появятся в начале соответствую­щих полос (см. верхние полосы на рис. 2.12).

Свойства MinHeight И MinWidth Определяют минимальную высоту и ширину полосы при перестроениях пользователем полос панели. Свойство FixedSize Опре­деляет, фиксирован ли размер данной полосы, или он может изменяться пользова­телем. По умолчанию для всех полос FixedSize = false, Т. е. все полосы перестраи­ваются. Но при желании размеры некоторых полос можно зафиксировать, задав для них FixedSize = True.

Для компонента CoolBar В целом, помимо обычных для других панелей свойств, надо обратить внимание на свойство BandMaximize. Оно определяет дей­ствие, которым пользователь может установить максимальный размер полосы, не перетаскивая ее границу: BmNone — такое действие не предусмотрено, bmClick — щелчком мыши, BmDblCIick — двойным щелчком.

Свойство FixedOrder, если его установить в True, Не разрешит пользователю в процессе перемещений полос изменять их последовательность. Свойство Vertical Указывает вертикальное или горизонтальное расположение полос.

Основные свойства

Свойство

Объявление / Описание

Align

Enum TAlign {alNone, alTop, alBottom, alLeft, alRight, alClient, alCustom}

TAlign Align

Определяет способ выравнивания панели (по умолчанию AlTop)

BandBorder

Style

Enum TFormBorderStyIe {bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin};

Typedef TFormBorderStyle TBorderStyle;

FormsziTBorderStyle BandBorderStyle

Определяет наличие (bsSingle) или отсутствие (bsNone) рамки, окружающей панель

Band

Maximize

Enum TCoolBandMaximize {bmNone, bmClick, bmDblCIick}; TCoolBandMaximize BandMaximize

Определяет действие, которым пользователь может установить максимальный размер полосы, не перетаскивая ее границу: BmNone — такое действие не предусмотрено, BmClick — щелч­ком мыши, BmDblClick — двойным щелчком

Свойство

Объявление / Описание

Bands

TCoolBands* Bands

Собрание полос панели — объектов TCoolBand

BitMap

GraphicsnTBitmap* Bitmap

Изображение, заполняющее фон полос

EdgeBorders

Enum TEdgeBorder {ebLeft, ebTop, ebRight, ebBottom}; typedef Set<TEdgeBorder, ebLeft, ebBottom> TEdgeBorders; TEdgeBorders EdgeBorders

Определяет изображение отдельных сторон панели (левой, пра­вой, верхней, нижней)

EdgeInner

Enum TEdgeStyle {esNone, esRaised, EsLowered};

TEdgeStyle Edgelnner

Стиль изображения внутренней части панели (утопленный, вы­ступающий или плоский)

EdgeOuter

Enum TEdgeStyle {esNone, EsRaised, EsLowered};

TEdgeStyle EdgeOuter

Стиль изображения внешней части панели (утопленный, высту­пающий или плоский)

FixedOrder

Bool FixedOrder

Разрешает (true) или не разрешает (false) пользователю в про­цессе перемещения полос изменять их последовательность

FixedSize

Bool FixedSize

Фиксирует размеры полос, не разрешая пользователю изменять их

L Images

ImglistzTCustomImageList* Images

Список изображений ImaeeList. Которые появятся в начале соот­ветствующих полос (свойство полосы ImageIndex Задает для нее изображение из этого списка)

ShowText

Bool ShowText

Определяет, отображаются ли в полосах надписи, заданные свой­ством Text полос

Vertical

Bool Vertical

Указывает вертикальное или горизонтальное расположение полос

Методы

Никаких специальных методов, вызываемых из приложения, В компоненте не

Объявлено.

Основные события

Событие

Описание

. OnChange

Наступает при изменении размера или местоположения полосы: Ее Свойств Break, Index или Width

Помимо этого наследуется множество событий, свойственных всем оконным

Компонентам.

Database — компонент базы данных_______________________________

Невизуальный компонент, осуществляет управление транзакциями.

Страница библиотеки BDE, в версиях младше C++Builder 6 — Data Access

Класс TDatabase

Иерархия TO⅛⅛c TТ Persistent — TComponentTCustomConnection

Модуль Dhtables

Описание

Компонент базы данных типа Database Автоматически включается в любое приложение C++Builder, работающее с базами данных. Если же вы хотите созна­тельно управлять транзакциями, вы должны явным образом включить компонент Database В свое приложение. Этот компонент решает следующие задачи:

• Создание соединения с удаленным сервером

• Регистрация пользователя при первом обращении к серверу

• Создание локальных псевдонимов приложений ■ Управление транзакциями

• Определение уровня изоляции транзакции (регулирование одновременных транзакций к одним и тем же таблицам)

Database Связывается с компонентами наборов данных Table, Query И други­ми через имя базы данных, к которой он подключается. Это имя задается в свойст­ве DatabaseName. Может быть задан псевдоним базы данных или полный путь к ней. Если задается база данных, имеющая псевдоним BDE, то свойства Alias — Name, DriverName И Params можно не задавать. В противном случае надо задать или свойство AliasName, Или свойства DriverName И Params. Однако и при зада­нии AliasNamv или DriverName И Params Надо задать какое-то, в данном случае произвольное имя DatabaseName.

Установку значений всех этих свойств во время проектирования можно прово­дить непосредственно в Инспекторе Объектов, но удобнее воспользоваться специ­альным редактором, который вызывается двойным щелчком на Database (см. рис. 2.13).

Как уже говорилось, вы можете ограничиться заданием только имени базы данных (окно Name). Но если ваша база данных имеет псевдоним, вы можете ука­зать и его (окно Alias Name). В этом случае можно щелкнуть на кнопке Defaulls (умолчание) и в окне Parameter overrides появятся значения параметров по умолча­нию. Аналогичные данные появятся, если в выпадающем списке Driver Name вы выберете драйвер, а затем щелкнете на кнопке Defaults. Вы можете внести в эти данные какие-то изменения. Например, при работе с базой данных, защищенной паролем, вы можете указать в параметрах этот пароль и сбросить индикатор Login prompt — приглашение к соединению, которое запрашивает пароль. Тогда при за­пуске вашего приложения не будет каждый раз запрашиваться пароль. Это облег­чит работу пользователей, но, конечно, снимет защиту вашей базы данных.

Индикатор Keep inactive connection устанавливает свойство KeepConnection, О Котором будет сказано ниже.

После всех установок в редакторе щелкните на OK и введенные вами установ­ки заполнят значения свойств DatabaseName, AliasName, DriverName, Params И KeepConnection.

Свойство Connected (соединение) совместно со свойством KeepConnection Управляют процессом соединения компонентов с базой данных. Если KeepConnec — tion Равно True, То соединение с базой данных постоянное даже при отсутствии от­крытых наборов данных. Если же KeepConnection Равно False, То для регистрации на сервере надо устанавливать Connected В True При каждом открытии таблицы.

рис. 2.13
окно редактора компонента database

Свойство Translsolatioii Определяет уровень изоляции транзакции. Это свой­ство может иметь значения:

TiDirtyRead

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

‘ HReadConnnit

Позволяет читать только зафиксированные изменения, про­водимые другими транзакциями. Это значение принято по умолчанию

I HRepeatableRead

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

Указанные выше значения свойства Translsolation Могут не поддерживаться на конкретном сервере, с которым вы работаете. В этом случае сервер переходит на доступный ему более высокий, чем запрошенный, уровень изоляции. Ниже приве­дена таблица уровней для различных систем.

Translsolation

! — — —

Interbase

Oracle

Sybase & Microsoft

TiDirtyRead

Read commited

Read commited commited

Read

TiReadCommit

Read commited

Read commited

Read commited

Li, ifp’-1

Repeatable Read

Repeatable Read (READ ONLY)

Error

(не поддерживается)

Основные методы компонента Database: StartTransaction — начало транзак­ции, Commit — фиксация изменений в базе данных, Rollback — откат, отмена всех изменений. Программа работы с данными должна строиться по следующей схеме:

Databasel->StartTransaction();

Группа операторов изменения данных! ExecSQL И др.)

Проверка результатов: Если успешно — Databasel-XSommitO;

Если неудача — Databasel->RollbackО;

Основные свойства

Свойство

Объявление / Описание

AliasName

AnsiString AliasName

Псевдоним BDE базы данных. При установке AliasName свойство DriverName автоматически очищается

I Connected

Bool Connected

Указывает, активно ли соединение с базой данных

ι DatabaseName

AnsiString DatabaseName

Указывает имя базы данных, с которой связан компонент

! DataSetCount

Int DataSetCount

Число активных наборов данных, связанных с компонентом

DataSets

TDBDataSet* DataSets[int Index]

Индексированный массив активных наборов данных, связан­ных С компонентом

Directory

AnsiString Directory

Рабочий каталог для баз данных Paradox и dBASE

Driver Name

AnsiString DriverName

Имя используемого драйвера BDE

Exclusive

Bool Exclusive

Запрещает или разрешает доступ к базе данных другим при­ложениям

KeepConnection

Bool KeepConnection

Указывает, остается ли приложение соединенным с базой данных даже если нет отрытой базы данных ∣

! Locale

Void * Locale

Драйвер языка BDE, Используется только при явном обраще­нии к функциям BDE. Только для чтения

LoginPrompt

Bool LoginPrompt

Указывает, должен ли появляться диалог соединения (имя пользователя, пароль) при открытии базы данных

Session

TSession* Session

Указывает компонент Session, связанный с базой данных

SessionName

AnsiString SessionName

Имя компонента сеанса сетевого соединения Session, связан­ного с базой данных

Readonly

Bool Readonly

Устанавливает данные только для чтения (при значении true)

Il TransIsolation

I______________

Enum TTransIsolation {tiDirtyRead, tiReadCommitted, URepeatableRead };

TTransIsolation TransIsolation

Определяет уровень изоляции транзакций (см. пояснения выше в описании Database)

Основные методы

1 Метод

Объявление / Описание

1 ApplyUpdates

Void ApplyUpdates(const TDBPataSet* const * DataSets, const int DataSets_Size)

Переносит кэшированные изменения в базу данных

Close

Void Close(void)

Закрывает соединение

CloseDataSets

Void CloseDataSets(void)

Закрывает все наборы данных, связанные с компонентом

Commit

Void Commit(void)

Фиксирует в базе данных все изменения, произведенные транзакцией, и завершает транзакцию

Open

Void Open(void)

Открывает соединение

Rollback

Void Rollback(void)

Производит откат назад, аннулируя все изменения данных, произведенные на протяжении транзакции

Start

Transaction

__

Void StartTransaction(void)

Начинает новую транзакцию

События

Событие

Описание

OnLogin

Наступает при соединении приложения с базой данных

AfterConnect

Наступает после установки соединения с базой данных

‘ ^" . —

AfterDisconnect

Наступает после закрытия соединения с базой данных

BeforeConnect

Наступает перед установкой соединения с базой данных

BeforeDisconnect

Наступает перед закрытием соединения с базой данных

DataSource — источник данных

Невизуальный компонент источника данных — обеспечивает интерфейс меж­ду компонентом набора данных и средствами визуализации.

Страница библиотеки Data Access

Класс TDataSource

Иерархия TObiect TPersistent TComponent

Модуль Db

Описание

Компонент DataSource Представляет собой источник данных, который обеспе­чивает связь между набором данных и компонентами отображения и редактирова­ния данных.

Все наборы данных должны быть связаны с компонентом источника данных, если требуется редактирование данных.

Основное свойство источника данных — DataSet. Оно указывает на компонент набора данных (Table, Query И др.), с которым связан источник. Свойство State Дает информацию о текущем состоянии набора данных: находится ли он в состоя­нии просмотра, редактирования, вставки данных и т. п.

Основные свойства

Свойство

Объявление / Описание

AutoEdit

Bool AutoEdit

Определяет, вызывается ли автоматически метод редактирования Данных Edit

DataSet

TDataSet* DataSet

Набор данных, с которым связан компонент

Enabled

Bool Enabled

Определяет, отображаются ли данные в компонентах отображения, связанных с этим источником данных

State

Enum TDataSetState {dslnactive, dsBrowse, dsEdit, dslnsert,

DsSetKey, dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead, dsInternalCalc, dsOpening};

TDataSetState State

Указывает текущее состояние набора данных, связанного с источ­ником данных

Основные методы

Метод

Объявление / Описание

Edit

Void Edit(void)

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

‘ IsLinkedTo

Bool IsLinkedTotTDataSct* DataSet)

Проверяет связь источника с указанным набором данных. Обычно напрямую не используется, а применяется при разработке новых

Компонентов

События

I—————————

Событие

Описание ^

OnDataChange

Наступает при перемещении на новое поле или новую запись, если текущая запись редактировалась

OnStateChange

Наступает при изменении состояния набора данных, связан — . ного с данным источником

OnUpdateData

Наступает, когда намечается обновление текущей записи

DBCheckBox — индикатор, связанный с данными___________________

Позволяет отображать и редактировать данные поля булева типа и некоторых

Других типов.

Страница библиотеки DatuAccess

Класс TDBCheekBox

Иерархия TObiect -TPersistent TComponent TContГоI —

TWincontro I TButtonCo ntro I TCustomCheckBox

Модуль Dhetrls

Описание

DBCheckBox — связанный с данными аналог обычного индикатора CheckBox. Он позволяет отображать и редактировать данные поля булева типа, а также сим­вольного и числового типа. Если при выводе данных булево поле имеет значение true, то индикатор включается. А если в процессе редактирования пользователь включит или выключит индикатор, то соответственно значение True или False За­пишется в поле. Это один из способов обеспечить пользователю безошибочный ввод значений в булево поле.

Если поле символьное или числовое, то в свойство ValueChecked Заносится строка, перечисляющая значения поля, при которых индикатор включается, а в свойстве ValueUncheckecl перечисляются значения, при которых индикатор вы­ключается. При значениях, не перечисленных ни в ValueChecked, ни в Value — Unchecked, Индикатор переходит в третье состояние, отображая серый флажок (даже если нет разрешения на третье состояние — свойство AIIowGrayed = false).

Включен или выключен индикатор можно определить по значению свойства Checked, Но только во время выполнения. Более детально состояние индикатора можно определить по свойству State: cbChecked — включен, CbUnchecked — вы­ключен, CbGrayed — третье состояние.

Свойства компонента, обеспечивающие связь с данными:

DataSource — источник данных типа TDataSource

DataField — имя поля, с которым связан компонент

Field — объект этого поля (только для чтения)

При переключении пользователем индикатора в поле заносится значение, оп­ределенное свойствами ValueChecked и ValueUnchecked (если в них записано йо нескольку значений, то заносится соответствующее первое значение).

Подробнее о свойствах, методах, событиях см. в описании CheckBox.

DBEdit — окно редактирования, связанное с данными______________

Представляет собой окно редактирования, которое может отображать и редак­тировать поле набора данных.

Страница библиотеки DataAccess

Класс TDBEdit

Иерархия TObieCt TPersistent TComponent TControlTWincontrol. TCustomEdit

Модуль Dbctrls

Описание

DBEdit — связанный с данными аналог обычного окна редактирования Edit. Он позволяет отображать и редактировать данные полей различных типов: строка, число, булева величина. Преобразование значения поля в строку текста, отобра­жаемую в DBEdit, Производится автоматически. Если задать в компоненте Read­Only = true, То он, Как и DBText. Будет служить элементом отображения, но не­сколько более изящным, чем DBText.

Свойства компонента, обеспечивающие связь с данными:

DataSource — источник данных типа TDataSource

DataField — имя поля, с которым связан компонент

Field — объект этого поля (только для чтения)

Большинство остальных свойств (AutoSelect, AntoSize, CharCase и др.) ана­логичны свойствам компонента Edit. Но в DBEdit Главное свойство окна — Text Недоступно во время проектирования. Текст в окне определяется соответствую­щим полем текущей записи и может изменяться пользователем или программно во время выполнения. Отредактированное значение в окне помещается в соответст­вующее поле набора данных.

Подробнее о свойствах, методах, событиях см. в описании Edit.

DBImage — отображение графического поля данных__________________________

Компонент позволяет отображать графические поля.

Страница библиотеки DataAeeess

Класс TDBImage

Иерархия TObiect TPersistent TComjmnent T Со Nt Г о I — lTWincontro I

Модуль Dbctrls

Описание

DBImage — связанный с данными аналог обычного компонента Image. Компо­нент позволяет отображать графические поля, например, фотографии сотрудников.

Свойства компонента, обеспечивающие связь с данными:

DataSource — Источник данных типа TDataSource

DataField — имя поля, с которым связан компонент

Field — объект этого поля (только для чтения)

Большинство свойств и методов DBImage Подобны Image. Однако основное свойство компонента — Picture Недоступно во время проектирования, поскольку связано с данными, хранящимися в соответствующем поле базы данных. Во время выполнения оно может изменяться программно или действиями пользователя, на­пример, загрузкой изображения из буфера обмена Clipboard.

Подробнее о свойствах, методах, событиях см. в описании Image.

DBMemo — отображение данных типа многострочных текстов__________________

Позволяет отображать и редактировать данные поля, в частности, типа MEMO

И BLOB.

Страница библиотеки DataAccess

Класс TDBMemo

Иерархия TObiect TPersistent TComponent TControl TWincOntrol TCustomEdit TCustomMemo

Модуль Dbctrls

Описание

DBMemo — связанный с данными аналог обычного многострочного окна ре­дактирования Memo. Он позволяет отображать и редактировать данные полей раз­ных типов и, прежде всего, типов MEMO и BLOB.

Свойства компонента, обеспечивающие связь с данными:

DataSource — Источник данных типа TDataSource

DataField — имя поля, с которым связан компонент

Field — объект этого поля (только для чтения)

Большинство остальных свойств и методов аналогичны свойствам и методам компонента Memo. Но в DBMemo Главное свойство окна — Lines Недоступно во время проектирования. Текст в окне определяется соответствующим полем теку­щей записи и может изменяться пользователем или программно во время выпол­нения. Отредактированное значение в окне помещается в соответствующее поле набора данных.

Свойство Lines, Доступное во время выполнения, имеет множество свойств и методов типа TStrings. Которые обычно используются для формирования и ре­дактирования текста.

Подробнее о свойствах, методах, событиях см. в описании Memo.

DBRadioGroup — группа радиокнопок, связанная с данными_________

Представляет группу радиокнопок, связанных с базой данных.

Страница библиотеки DataAccess

Класс TDBRadioGroup

Иерархия TObject TPersistent— TComponent TContГоI —

RTWiricontro I— — —

TcustomRadioGroup

Модуль Dbctrls Описание

DBRadioGroup — связанный с данными аналог группы радиокнопок Radio­Group. Компонент позволяет отображать и редактировать поля с ограниченным множеством возможных значений.

Количество радиокнопок в группе и надписи около них определяются свойст­вом Items. Это свойство во время проектирования удобно заполнять редактором, вызываемым из Инспектора Объектов. Значения полей, соответствующие кноп­кам, заносятся в свойство Values В той же последовательности, в которой заноси­лись кнопки в Items. Это свойство во время проектирования также удобно запол­нять редактором, вызываемым из Инспектора Объектов.

Свойство Columns Определяет число столбцов, в которых отображаются радио­кнопки группы.

Свойства компонента, обеспечивающие связь с данными:

DataSource — источник данных типа TDataSource

DataField — имя поля, с которым связан компонент

Field — объект этого поля (только для чтения)

Значение поля в текущей записи можно найти в свойстве Value. При переклю­чении пользователем кнопок в поле заносится значение из списка Values, Соответ­ствующее включенной кнопке. Определить во время выполнения, какая кнопка включена в данный момент, можно по индексу ItcmIndex (0 — первая кнопка, -1 — ни одна кнопка не включена).

Подробнее о свойствах, методах, событиях см. в описании RadioGroup.

Иерархия TObiect — TPersistent — TCoznporeenfTCont го I — TWincontro I— TciistoinEdU —

Модуль Dbctrls

Описание

Компонент DBRichEdit Дает возможность отображать и редактировать поле базы данных, содержащее текст в обогащенном формате RTF. Основные свойства, позволяющие осуществлять выборочное форматирование фрагментов текста — SelAttributes — объект типа TTextAttributes, Форматирующий выделенный или вновь вводимый текст, и свойство Paragraph Объект типа TParaAttributes, фор­матирующий текущий абзац.

DBRichEdit Имеет свойство Text, В котором содержится текст окна редактиро­вания. Свойство Lines Типа TStrings Представляет тот же текст, но разбитый на строки. Свойства и методы Lines Позволяют редактировать текст поля. Однако в отличие от RichEdit, В DBRichEdit Это свойство недоступно во время проектиро­вания, поскольку его содержание связано с данными, хранящимися в соответст­вующем поле базы данных.

Свойства компонента, обеспечивающие связь с данными:

• DataSource — источник данных типа TDataSource

DataField — имя поля, с которым связан компонент

Field — объект этого поля (только для чтения)

Подробнее о свойствах, методах, событиях см. в описании RichEdit.

DBText — метка, связанная с данными_____________________________

Аналог обычной метки Label, Связанный с данными.

Страница библиотеки DataAccess

Класс TDBText

Иерархия TObject TPersistentTComponentTControl —

TGraphicControlTCustomLable

Модуль Dbctrls

Описание

DBText — аналог обычной метки Label, Связанный с данными. Он позволяет отображать данные некоторого поля текущей записи набора данных, но не дает возможности их редактировать. Поле может быть различного типа: символьное, числовое, булево. Преобразование значения поля в строку текста, отображаемую в DBText, Производится автоматически.

Свойства компонента, обеспечивающие связь с данными:

DataSource — источник данных типа TDataSource

DataField — имя поля, с которым связан компонент

Field — объект этого поля (только для чтения)

Большинство остальных свойств (Alignment, AutoSize, Anchors И др.) анало­гичны свойствам компонента Label. Но в DBText Отсутствует главное свойство метки — Caption (текст). Текст целиком и полностью определяется соответствую­щим полем текущей записи.

Подробнее о свойствах, методах, событиях см. в описании Label.

Страница библиотеки Standard Класс TEdit

Иерархия TObiect TPersisten TComgaruijit — TControI TCustomEdit

Модуль Stdctrls Примеры изображения

Рис. 2.14

Примеры окон Edit

Описание

В компоненте Edit Вводимый и выводимый текст содержится в свойстве Text. Это свойство можно устанавливать в процессе проектирования или задавать про­граммно. Выравнивание текста невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается, и пользователь мо­жет перемещаться по нему с помощью курсора. Свойство AutoSize Позволяет авто­матически подстраивать высоту (но не ширину) окна под размер текста.

Окно редактирования снабжено многими функциями, свойственными боль­шинству редакторов. Например, в нем предусмотрены типичные комбинации «го­рячих» клавиш: Cirl-C — копирование выделенного текста в буфер обмена Clip­board (команда Copy), CM-X — вырезание выделенного текста в буфер Clipboard (ко­манда Cut), CtrI V — вставка текста из буфера Clipboard в позицию курсора (коман­да Paste), Ctrl-Z — отмена последней команды редактирования.

Свойство AutoSelect Определяет, будет ли автоматически выделяться весь текст при передаче фокуса в окно редактирования. Его имеет смысл задавать рав­ным True В случаях, когда при переключении в данное окно пользователь будет скорее заменять текущий текст, чем исправлять его. Имеются также свойства только времени выполнения SelLength, SelStart, SelText, Определяющие соответ­ственно длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст. В примере, показанном на рис. 2.14, SelStart = 4, SelLength = 5, SelText = "текст". Если выделенного текста нет, то свойство SelStart Просто определяет текущее положение курсора.

Свойство MaxLength Определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. В противном случае значение MaxLength Указывает максимальное число символов, которое может ввести поль­зователь.

Свойство Modified, Доступное только во время выполнения, показывает, про­водилось ли редактирование текста в окне. Если вы хотите использовать это свой­ство, то в момент начала работы пользователя с текстом Modified Надо установить в False. Тогда при последующем обращении к этому свойству можно по его значе­нию (true Или False) Установить, было или не было произведено редактирование.

Свойство PasswordChar Позволяет превращать окно редактирования в окно вво­да пароля. По умолчанию значение PasswordChar Равно #0 — нулевому символу. В этом случае это обычное окно редактирования. Но если в свойстве указать иной символ (например, символ звездочки то при вводе пользователем текста в окне

Будут появляться именно эти символы, а не те, которые вводит пользователь (см. среднее окно на рис. 2.14). Тем самым обеспечивается секретность ввода пароля.

Свойство BorderStyle Определяет, ограничена ли клиентская область компо­нента одинарной бордюрной линией (см. на рис. 2.14 нижнее окно без бордюра).

Основные свойства

Свойство

Объявление / Описание

AutoSelect

Bool AutoSelect

Определяет, будет ли автоматически выделяться весь текст при передаче фокуса в окно редактирования

AutoSize

[

Bool AutoSize

Указывает, изменяется ли автоматически высота компонента, подстраиваясь под размер текста. По умолчанию false — не

Подстраивается

BorderStyle

Enum TFormBorderStyle {bsNone, bsSingle, BsSizeable,

BsDialog, bsToolWindow, BsSizeToolWin};

Typedef TFormBorderStyle TBorderStyle;

TBorderStyle BorderStyle

Указывает, ограничена ли клиентская область компонента оди­нарной бордюрной линией

CanUndo

Bool CanUndo

Указывает, содержит ли компонент изменения, которые можно отменить. Доступ только для чтения

CharCase

Enum TEditCharCase { ecNormal, ecUpperCase, EcLowerCase }; TEditCharCase CharCase

Указывает, приводится ли принудительно текст к верхнему или нижнему регистрам

_____________

Color

I

Graphics-TColor Color

Указывает цвет фона компонента

Font

Graphics::TFont* Font

Определяет атрибуты шрифта

I HideSelection

Bool HideSelection

Определяет, видно ли (при значении false) выделение текста при переходе фокуса к другому компоненту

MaxLength

ClasseszTStrings* Lines

Указывает максимальное количество символов, которое пользо­ватель может вводить в компонент. При значении 0 длина тек­ста неограничена

Modified

Bool Modified

Указывает, редактировался ли пользователем текст в компоненте

: PasswordChar

Char PasswordChar

Указывает символ, замещающий фактические символы, вводи­мые в компонент. При значении ‘0’ Символы не заменяются. Используется для ввода паролей

PopupMenu

Menus: :TPopupMenu* PopupMenu

Идентифицирует всплывающее меню, связанное с данным ком­понентом

Свойство

Объявление / Описание

Readonly

Bool Readonly

Указывает, может ли пользователь изменять тест в компоненте

SelLength

Int SelLength

Определяет количество выделенных символов в строке

SelStart

Int SelStart

Указывает позицию первого выделенного символа в тексте или, если выделения нет, то позицию курсора

SelText

AnsiString SelText

Текст, выделенный в окне

It~

AnsiString Text

Текст в окне редактирования

Основные методы

Метод

Объявление / Описание

Clear

Void Clear(void)

Удаляет текст из окна

Clear

Selection

Void ClearSelection(Void)

Удаляет текст, выделенный в окне

ClearUndo

Void ClearUndo(void)

Очищает буфер отмены команд редактирования, так что ника­кие изменения в тексте после этого не могут быть отменены

СоруТо

Clipboard

Void CopyToClipboard(void)

Копирует выделенный текст в компоненте редактирования в Clipboard в формате CF TEXT

CutTo

Clipboard

Void CutToClipboard(void)

Переносит выделенный текст в Clipboard в формате CF_TEXT

И уничтожает его в окне

PasteFrom

Clipboard

Void PasteFromClipboard(Void)

Переносит в окно текст из буфера Clipboard

SelectAll

Void SelectAll(Void)

Выделяет весь текст в окне редактирования

Основные события

Событие

Описание

OnChange

Наступает, когда текст в окне может быть изменился. Свойство Modified показывает, действительно ли произошло изменение. Свойство Text отображает измененный текст

I OnKevDown

Событие наступает при нажатии пользователем любой клави­ши. В обработчике можно распознать нажатую клавишу

Событие

Описание!

Событие наступает при нажатии пользователем клавиши симво­ла. В обработчике можно распознать вводимый символ и при необходимости изменить его или запретить его ввод

I OnKevUp

Событие наступает при отпускании пользователем любой клави­ши. В обработчике можно распознать отпускаемую клавишу

FontDialog — диалог выбора шрифта _________ _________ _____________________

Невизуальный компонент вызова стандартного диалога Windows для выбора

Шрифта.

Страница библиотеки Dialogs

Класс TFontDialog

ИерарХия TO⅛⅛τ TPersistent TGraphicsObject

Модуль Dialogs

Описание

Компонент FontDialog Вызывает стандартный диалог Windows для выбора шрифта, показанный на рис. 2.15.

Отрытие диалога осуществляется методом Execute. Если в диалоге пользова­тель нажмет кнопку OK, диалог закрывается, метод Execute Возвращает Uue И вы­бранные атрибуты шрифта передаются в свойство Font Компонента-диалога. Если же пользователь отказался от диалога (нажал кнопку Отмена или клавишу Esc), то метод Execute Возвращает False.

Значение свойства Font Можно задать и перед обращением к диалогу. Тогда оно определит значения атрибутов шрифта по умолчанию, которые увидит пользо­ватель в момент открытия диалога. Таким образом, например, выполнение коман­ды Шрифт, по которой пользователь может задать текущее значение шрифта для компонента RichEditl, Может иметь вид:

// ЗаДание в качестве Атрибутов по умолчанию

// атрибутов шрифта текущей Позиции Курсора в тексте

FontDialogl->Font->Assign(RichEditl->SelAttгibutes);

// Открытие Диалога

If (FontDialogl->Execute ())

RichEditl->SelAttributes->Assign(FontDialogl->Font);

Рис. 2.15

Диалоговое окно выбора шрифта

Свойства MaxFontSize И MinFontSize Устанавливают ограничения на макси­мальный и минимальный размеры шрифта. Если значения этих свойств равны О (по умолчанию), то никакие ограничения на размер не накладываются. Если же значения свойств заданы (обычно это целесообразно делать, исходя из размеров компонента приложения, для которого выбирается шрифт), то в списке Размер диалогового окна (см. рис. 2.15) появляются только размеры, укладывающиеся в заданный диапазон. При попытке пользователя задать недопустимый размер ему будет выдано предупреждение вида «Размер должен лежать в интервале…» и вы­бор пользователя отменится. Свойства MaxFontSize И MinFontSize Действуют только при включенной опции FdLimitSize (см. ниже).

Свойство Device Определяет, из какого списка возможных шрифтов будет предложен выбор в диалоговом окне: fdScreen — из списка экрана (по умолча­нию), FdPrinter — из списка принтера, FdBoth — из обоих.

Свойство Options Содержит множество опций:

PfdAnsiOnly

* ■ 1 1— ‘ ■ 1 ■■ — ■ I

Отображать только множество шрифтов символов Windows, не отображать шрифтов со специальными символами

FdApplyButton

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

FdEffects

Отображать в диалоге индикаторы специальных эффектов (подчеркивание и др.) и список Цвет

I fdΓixedPitchOnly

Отображать только шрифты с постоянной шириной символов

FdForceFontExist

Позволять пользователю выбирать шрифты только из спис­ка, запрещать ему вводить другие имена

‘ fdLimitSize

Разрешить использовать свойства MaxFontSize и MinFont- Size, ограничивающие размеры шрифта

FdNoFaceSel

Открывать диалоговое окно без предварительно установлен­ного имени шрифта

If fdNoOEMFonts

Удалять из списка шрифтов шрифты OEM

I fdScalableOnly

Отображать только масштабируемые шрифты, удалять из списка не масштабируемые (шрифты bitmap)

FdNoSimulations

Отображать только шрифты и их начертания, напрямую поддерживаемые файлами, не отображая шрифты, в кото­рых жирный стиль и курсив синтезируется

FdNoSizeSel

Открывать диалоговое окно без предварительно установлен­ного размера шрифта

FdNoStyleSel

Открывать диалоговое окно без предварительно установлен­ного начертания шрифта

FdNoVectorFonts

Удалять из списка векторные шрифты (типа Roman или

Script для Windows 1.0)

FdShowHelp

Отображать в диалоговом окне кнопку Справка

FdTrueTypeOnly

Предлагать в списке только шрифты TrueType

FdWysiwyg

Предлагать в списке только шрифты, доступные и для экрана, и для принтера, удаляя из него мпаратно зависимые шрифты

По умолчанию все эти опции, кроме FdEffects, Отключены.

Если установить опцию FdApplyButton, То при нажатии пользователем кноп­

Ки Применить возникает событие OnApply, В обработчике которого вы можете напи-

Сать код, который применит выбранные пользователем атрибуты, не закрывая диалогового окна. Например:

RichEditl->SelAttributes->Assign(FontDialogl->Font);

Тогда пользователь может наблюдать изменения в окне RichEditl, Нажимая в диалоговом окне кнопку Применить и не прерывая диалога. Это очень удобно, так как позволяет пользователю правильно подобрать атрибуты шрифта.

При работе с окном редактирования Memo аналогичный оператор может

Иметь вид:

Memol->Font->Assign(FontDialogl->Font) ;

Основные свойства

— ……………..

Свойство

Объявление / Описание

Device

Enum TFontDialogDevice { fdScreen, fdPrinter, fdBoth }; TFontDialogDevice Device

Определяет, из какого списка возможных шрифтов будет предло­жен выбор в диалоговом окне: FdScreen — из списка экрана (по умолчанию), FdPrinter — из списка принтера, FdBoth — из обоих

Font

Graphics::TFont* Font

Определяет атрибуты шрифта

MaxFontSize

Int MaxFontSize

Устанавливает ограничение на максимальный размер шрифта

MinFontSize

Int MinFontSize

Устанавливает ограничение минимальный размер шрифта

Options

Enum TFontDialogOption {fdAnsiOnly, fdTrueTypeOnly, fdEffects, fdFixedPitchOnly, fdForceFontExist, fdNoFaceSel, fdNoOEMFonts, fdNoSimulations, fdNoSizeSel, fdNoStyleSel, fdNoVectorFonts, fdShowHelp, fdWysiwyg, fdLimitSize, fdScalableOnly, fdApplyButton};

Typedef Set<TFontDialogOption, fdAnsiOnly, fdApplyButton> TFontDialogOptions;

TFontDialogOptions Options

Различные опции диалога (см. выше в описании FontDialog)

Основные методы

Метод

Объявление / Описание

Execute

Bool Execute(void)

Вызывает диалог, возвращает true, если пользователь произвел

Выбор в диалоге

Остальные методы наследуются от классов — предшественников.

События

Событие

Описание i

OnApply

Наступает, когда пользователь в диалоге нажимает кнопку Apply j (см. выше в описании FontDialog)

OnClose

Событие наступает при закрытии диалога,

OnShow

Событие наступает при открытии диалога

GroupBox — групповая Панель____________________________________

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

Страница библиотеки Standard Класс TGroupBox

Иерархия TObiect TPersistЕпT— ^^mιponent TControl-

TWinControl TCustomControlTcustomGroupBox

Модуль Stdctrls Примеры изображения

Рис. 2.16

Примеры групповой панели GroupBox, размещающей радиокнопки (вверху) и окна редактирования (внизу)

Описание

Панель GroupBox — это контейнер с рамкой и надписью, объединяющий группу связанных органов управления, таких как радиокнопки RadioButton, Ин­дикаторы CheckBox И т. д. В отличие от других панелей (например, Panel) Не имеет широких возможностей задания различных стилей оформления. Но GroupBox Имеет встроенную рамку с надписью, которая обычно используется для выделения на форме группы функционально объединенных компонентов.

Основные свойства

Все свойства панели наследуются от TWinControl и TComponent. Основные из

Них:

Свойство

Объявление / Описание

Align

Enum TAlign {alNope, alTop, alBottom, al Left, alRight, alClient, alCustom};

TAlign Align

Определяет способ выравнивания компонента в контейнере (роди­тельском компоненте)

Anchors

Enum TAnchorKind { akLeft, akTop, akRight, akBottom }; Typedef SeteTAnchorKind, akLeft, akBottom> TAnchors;

TAnchors Anchors

Определяет привязку данного компонента к родительскому при из­менении размеров последнего

I Brush

Graphics::TBrush* Brush

Кисть, определяющая заполнение фона

Свойство

Объявление / Описание

Caption

AnsiString Caption

Надпись в углу рамки панели

Font

Graphics: :TFont* Font

Определяет атрибуты шрифта

TabOrder

Typedef Short TTabOrder;

TTabOrder TabOrder

Указывает позицию компонента в списке табуляции. Определяет порядок переключения фокуса между компонентами окна при на­жатии клавиши Tab. Изначально соответствует порядку добавле­ния компонентов на форму

I TahStOP

Bool Tab Stop

Определяет возможность доступа пользователя к кнопке с помо­щью клавиши Tab

Основные методы

Никаких специальных методов в панели не объявлено. Методы наследуются

От классов-предков TWinControl и TControl.

Основные события

Никаких специальных событий в панели не объявлено. События наследуются От классов-предков TWinControl и TControl.

Image — контейнер графического изображения______________________

Отображает графическое изображение и обеспечивает работу с ним.

Страница библиотеки Additional Класс TImage

Иерархия TObiect—TPersistent TComponenTTControl

TGraphicControl

Модуль Extctrls Пример изображения

Рис. 2.17

Пример отображения изображения графического файла в компоненте Image

Описание

Компонент Image Отображает на форме графическое изображение (рис. 2.17). Свойство Picture Типа TPicture содержит отображаемый графический объект типа битовой матрицы, пиктограммы, метафайла или определенного пользователем типа. Свойство Canvas Позволяет создавать и редактировать изображения.

Во время проектирования загрузить в свойство Picture Графический файл можно щелкнув на кнопке с многоточием около свойства Picture В окне Инспекто-

Pa Объектов или просто двойным щелчком на Image. Перед вами откроется окно Picture Editor (см. рис. 2.18), позволяющее загрузить в свойство Picture Какой-ни­будь графический файл (кнопка Load), а также сохранить открытый файл под но­вым именем или в новом каталоге.

Рис. 2.18

Окно загрузки графического файла в свойство Picture компонента Image

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

Если установить свойство AutoSize в True, То размер компонента Image Будет автоматически подгоняться под размер помещенной в него картинки. Если же свойство AutoSize Установлено в False, То изображение может не поместиться в компонент или, наоборот, площадь компонента может оказаться много больше площади изображения.

Другое свойство — Stretch позволяет подгонять не компонент под размер ри­сунка, а рисунок под размер компонента. Но поскольку вряд ли реально устано­вить размеры Image точно пропорциональными размеру рисунка, то изображение исказится. Устанавливать Stretch в True Может иметь смысл только для каких-то узоров, но не для картинок. Свойство Stretch Не действует на изображения пикто­грамм, которые не могут изменять своих размеров.

Свойство — Center, Установленное в true, центрирует изображение на площа­ди Image, Если размер компонента больше размера рисунка.

Рассмотрим еще одно свойство — Transparent (прозрачность). Если Trans­parent Равно True, То изображение в Image Становится прозрачным. Это можно ис­пользовать для наложения изображений друг на друга. Учтите, что свойство Transparent Действует только на битовые матрицы. При этом прозрачным (т. е. за­меняемым на цвет расположенного под ним изображения) делается по умолчанию цвет левого нижнего пиксела битовой матрицы.

Свойство Picture Позволяет легко организовать обмен с графическими файла­ми любых типов в процессе выполнения приложения. Это свойство является объ­ектом, который имеет в свою очередь подсвойства, указывающие на хранящийся графический объект. Если в Picture Хранится битовая матрица, на нее указывает свойство Picture-Bitmap. Если хранится пиктограмма, на нее указывает свойство PictureJcon. На хранящийся метафайл указывает свойство Picture-Metafile. На­конец, на графический объект произвольного типа указывает свойство Pictu­re. Graphic.

Объект Picture И его свойства Bitmap, Icon, Metafile и Graphic Имеют методы файлового чтения и записи LoadFromFile и SaveToFile. Для свойств Pictu-

Re. Bitmap, PictureJcon И Picture-Metafile Формат файла должен соответствовать классу объекта: битовой матрице, пиктограмме, метафайлу. При чтении файла в свойство Picture. Graphic Файл должен иметь формат метафайла. А для самого объекта Picture Методы чтения и записи автоматически подстраиваются под тип файла.

Например, если вы имеете в приложении компонент-диалог OpenPicture — Dialog, То загрузка в Image Выбираемого пользователем графического фала может быть организована оператором

If (OpenpictureDialogl-S-Execute () )

Imagel->Picture->LoadFromFile(OpenPictureDialogl->FileName);

Загружаемый этим оператором файл может быть любого типа: битовая матри­ца, пиктограмма или метафайл. Если будут открываться только файлы битовых матриц, то оператор загрузки файла можно заменить на

Imagel->Picture->Bitmap->LoadFromFiIe(

Для пиктограмм можно было бы использовать оператор

А для метафайлов — оператор

Или

Но во всех этих случаях, если формат файла не совпадет с предполагаемым,

Возникнет ошибка.

Аналогично работает и метод SaveToFile С тем отличием, что примененный к Picture Или к Picture->Graphic Он сохраняет в файле изображение любого фор­мата. Например, если вы дополните свое приложение диалогом SavePicture — Dialog, То сохранение изображения в файле можно организовать оператором

If (SavepictureDialogl-S-ExecuteO )

Imagel->Picture->SaveToFile(SavepictureDialogl-S-FileName);

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

Абсолютно идентично для изображений любого формата будет работать про­грамма, если оператор сохранения вы замените на

Imagel-S-Picture->Graphic->SaveToFiIe(SavePictureDialogl->FiIeName);

Использующий свойство Picture->Graphic. А если вам известен формат хранимо­го в компоненте Image Изображения, то вы можете применить метод SaveToFile К свойствам Picture->Bitmap, Picture—>Icon, И Picture—>Metafile.

Для всех рассмотренных объектов Picture, Picture—>Bitmap, Picture—>Icon, И Picture—>Metafi! e Определены методы присваивания значений объектов Assign. Однако для BitMap, Icon И Metafile Присваивать можно только значения однород­ных объектов: соответственно битовых матриц, пиктограмм, метафайлов. При по­пытке присвоить значения разнородных объектов генерируется исключение ЕСоп- VertError. Объект Picture — универсальный, ему можно присваивать значения объектов любых из остальных трех классов. А значение Picture Можно присваи­вать только тому объекту, тип которого совпадает с типом объекта, хранящегося в нем.

Метод Assign можно использовать и для обмена изображениями с буфером Clipboard. Например, оператор

Clipboard()->Assign(Imagel->Picture);

Занесет в буфер обмена изображение, хранящееся в Image 1. Аналогично оператор Imagel->Picture->Assign(Clipboard());

Прочитает в Image 1 Изображение, находящееся в буфере обмена. Причем это мо­жет быть любое изображение и даже текст.

Надо только не забыть при работе с буфером обмена вставить в модуль дирек­тиву:

(finclude<Clipbrd. hρp>

Автоматически C++Builder эту директиву не вставляет.

Благодаря наличию канвы Canvas Компонент Image Широко используется не

Только для хранения готовых изображений, но и для построения различных гра­фических редакторов (это подробно рассмотрено в [1]).

Основные свойства

Свойство

Объявление / Описание

AutoSize

Bool AutoSize

Указывает, изменяется ли автоматически размер компонента, подстраиваясь под размер изображения. По умолчанию False —• Не подстраивается

Canvas

GraphicsuTCanyas* Canvas

Определяет поверхность (холст, канву) для рисования пером Реп и кистью Brush, Для наложения друг на друга нескольких изоб­ражений. Доступ только для чтения. Доступно только, если в свойстве Picture Хранится битовая матрица

Center

Bool Center

Указывает, должно ли изображение центрироваться в поле компо­нента, если его размеры меньше размеров поля. При значении Fal­se Изображение располагается в верхнем левом углу поля. Свойст­во не действует, если AutoSize Установлено в True Или если

Stretch Установлено в True И Picture Содержит не пиктограмму

Incremental

Display

Bool IncrementalDisplay

Указывает, должно ли изображение частично рисоваться во вре­мя медленных операций с большими изображениями. Вместо та­кого рисования часто можно использовать индикацию процесса обработкой событий OnProgress

Picture

Graphics: :TPicture* Picture

Определяет отображаемый графический объект типа TPicture. Может загружаться программно или во время проектирования с помощью Picture Editor

Stretch

Bool Stretch

Указывает, должны ли изменяться размеры изображения, подго — няясь под размеры компонента. Учтите, что изменение размеров изображения приведет к его искажению, если соотношение сто­рон графического объекта и компонента Image Не одинаково I

Свойство

Объявление / Описание

Transparent

Bool Transparent

Указывает, должен ли быть цвет фона изображения прозрачным, чтобы сквозь него было видно нижележащее изображение

Основные методы

Никаких специальных методов в компоненте не объявлено. Компонет насле­дует множество методы от базового класса TControl.

Основные события

Событие

Описание

OnProgress

События происходят при медленных процессах изменения графи­ческого изображения и позволяют построить индикатор хода про­цесса

Остальные события наследуются от класса TControl.

ImageList — список изображений

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

Страница библиотеки Additional

Класс Win32

Иерархия TObiect TPersistent ^^mponent TCustomImageList TDragImageList

Модуль Controls

Описание

ImageList Используется и как компонент, и как свойство других компонентов, например, свойство Images Компонента MainMenu. Представляет собой набор изо­бражений одинаковых размеров, на которые можно ссылаться по индексам, начи­нающимся с 0. Используется для эффективного управления множеством пикто­грамм и битовых матриц. Может включать в себя монохромные битовые матрицы, содержащие маски для прозрачности рисуемых изображений.

Изображения в компонент ImageList могут быть загружены в процессе проек­тирования с помощью редактора списков изображений. Окно редактора (рис. 2.19), вызывается двойным щелчком на компоненте ImageList Или щелчком правой кноп­ки мыши и выбором команды контекстного меню ImageList Editor.

Рис. 2.19

Окно редактора списка изображений

В окне редактора списков изображений вы можете добавить в списки изобра­жения, пользуясь кнопкой Add, удалить изображение из списка кнопкой Delete, очистить весь список кнопкой Clear. При добавлении изображения в список откры­вается обычное окно открытия файлов изображений, в котором вы можете выбрать интересующий вас файл. Только учтите, что размер всех изображений в списке должен быть одинаковым. Как правило, это размер, используемый для пикто­грамм в меню, списках, кнопках. При добавлении в список изображений для кно­пок надо иметь в виду, что они часто содержат не одно, а два и более изображений. В этих случаях при попытке добавить изображение задается вопрос: "Bitmap dimensions for … are greater then imagelist dimensions. Separate into… separate bitmaps?" (Размерность изображения… больше размерности списка. Разделить на отдель­ных битовых матрицы?). Если вы ответите отрицательно, то все изображения уменьшатся в горизонтальном размере и лягут как одно изображение. Использо­вать его в дальнейшем будет невозможно. Поэтому на заданный вопрос надо отве­чать положительно. Тогда загружаемая битовая матрица автоматически разделит­ся на отдельные изображения, и потом вы можете удалить те из них, которые вам не нужны, кнопкой Delete.

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

В редакторе списков изображений вы можете, выделив то или иное изображе­ние, установить его свойства: Transparent Color и Fill Color. Но это можно делать толь­ко в том сеансе работы с редактором списков изображений, в котором загружено данное изображение. Для изображений, загруженных в предыдущих сеансах, из­менение этих свойств невозможно.

Свойство Transparent Color определяет цвет, который используется в маске для прозрачного рисования Изображения. По умолчанию это цвет левого нижнего пик­села изображения. Для пиктограмм данное свойство устанавливается в clNone, по­скольку пиктограммы уже маскированы.

Свойство Fill Color определяет цвет, используемый для заполнения пустого про­странства при перемещении и центрировании изображения. Для пиктограмм дан­ное свойство устанавливается в clNone.

Группа радиокнопок Options определяет способ размещения изображения би­товой матрицы с размерами, не соответствующими размерам, принятым в списке:

Crop

Отображается часть изображения, помещающаяся в размер списка, начиная с левого верхнего угла

Stretch

Размеры изображения изменяются, становясь равными размерам списка. При этом возможны искажения

Center

Изображение центрируется, а если его размер больше размера спи­ска, то не помещающиеся области отсекаются

Основные свойства

Свойство

Объявление / Описание

AllocBy

Int AllocBy

Определяет количество изображений, на которое увеличивается список для добавления новых изображений

Свойство

Объявление / Описание

BkColor

Graphicsr-TColor BkColor

Определяет цвет фона, используемый при маскировании облас­ти изображений. Если BkColor равен ClNone, Изображение ри­суется прозрачным с использованием маски. В противном слу­чае BkColor определяет цвет вне маски. BkColor не влияет на изображение, если свойство Masked установлено в false

BlendColor

Graphics::TColor BlendColor

Определяет цвет фона, используемый при рисовании изображе­ния. Это цвет, который комбинируется с указанным цветом при Значениях DrawingStvle, Равных DsFocus И DsSelected. Значение J ClNone соответствует отсутствию комбинируемого цвета, а значе — . ние clDefauIt означает системный цвет выде ления

Count

Int Count

Указывает число изображений в списке. Свойство только для

Чтения J

DrawingStyle

Enum TDrawingStyle {dsFocus, dsSelected, dsNormal, dsTransparent};

TDrawingStyle DrawingStyle

Указывает стиль, испол. ьзуемый при рисовании

_____________

Height

Int Height

Высота изображений в списке. При изменении этого свойства

Список очищается i

ImageType

Enum TImageType {itlmage, itMask};

TImageType ImageType

Определяет, использует ли список изображение (itlmage) или

Маску (itMask) 1

Masked

Bool Masked

Определяет, содержит ли список маски, комбинируемые с изоб­ражениями

Width

L____________

Int Width

Ширина изображений в списке. При изменении этого свойства

Список очищается

Основные методы

Все методы TImageList наследует от своих предков, прежде всего от TDrag — ImageList и TCustomImageList.

I Метод

Объявление / Описание .

Add

Int Add(Graphics::TBitmap* Image, Graphics: .-TBitmap* Mask) Добавляет в компонент изображение и его маску. Возвращает индекс изображения или-1 ‘

AddIcon

Int AddIcon(Graphics::TIcon* Image)

Добавляет пиктограмму в компонент. Возвращает индекс изоб­ражения или

AddImages

Void AddlmagestTCustomImageList* Value)

Добавляет в компонент изображения из другого списка изобра — ■ Жений Value ___________

Метод

Объявление / Описание

I AddMasked

Int AddMasked(Graphics: :TBitmap* Image,

Graphics-TColor MaskColor)

Добавляет в компонент изображение вместе с цветом, который используется, чтобы сгенерировать прозрачную маску

DragLoek

Bool DragLock(HWND Window, int XPos, int YPos)

Заменяет изображение перетаскиваемого окна изображением из данного списка, рисует его в позиции, определяемой парамет­рами XPos И YPos

DragMove

Bool DragMove(int X, Int Y)

Заменяет изображение перетаскиваемого окна изображением из данного списка, определяя новую позицию координатами X И Y

DragUnlock

Void DragUnlock(Void)

Устраняет связь между изображением данного списка и перета­скиваемым окном, которая использовалась в методах DragLock И DragMove

Draw

Enum TImageType {it Image, it Mask};

Void DrawtGraphicsr-TCanvas* Canvas, int X, int Y, int Index, bool Enabled = true);

Void DrawiGraphicsaTCanvas* Canvas, int X, int Y, int Index, TDrawingStyle ADrawingStyle,

TImageType AImageType, bool Enabled = true);

Рисует изображение, указанное индексом Index, В указанной позиции (X, Y) На канве Canvas. При Enabled = false Изобра­жение рисуется как недоступное

DrawOverlay

Typedef Shortint TOverlay;

Enum TDrawingStyle {dsFocus, dsSelected, dsNormal, dsTransparent};

Enum TImageType {itlmage, it Mask};

Void DrawoverlavtGranhicsaTCanvas* Canvas, int X, int Y, int ImageIndex, TOverlay Overlay, bool Enabled = true);

Void DrawoverlavtGraphicsaTCanvas* Canvas, int X, int Y, int Imagelndex, TOverlay Overlay,

TDrawingStyle ADrawingStyle,

TImageType AlmageType, bool Enabled = true);

Рисует изображение Imagelndex И находящуюся над ним про­зрачную оверлейную маску с индексом Overlay На канве Can­vas В позиции (X, Y)

FileLoad

Enum TResType { rtBitmap, rtCursor, rtlcon };

Bool FileLoad(TResType ResType, const AnsiString Name, Graphics: :TColor MaskColor)

Загружает в список изображение из ресурсов (битовую матри­цу, курсор или пиктограмму)

_____________

I GetBitmap

1

Void GetBitmap(int Index, GraphicsaTBitmap* Image)

Возвращает по указанному индексу указатель на битовую мат­рицу, хранящуюся в списке

GetHotSpot

1

TvnesaTPoint GetHotSpotO

Возвращает позицию рабочей точки (текущую позицию мыши), связанную с перетаскиваемым изображением

Метод

Объявление / Описание

Getlcon

Enum TDrawingStyIe {dsFocus, dsSelected, dsNormal, dsTransparent};

Enum TImageType {itlmage, it Mask};

Void Getlcon(int Index, GraphicsnTIcon* Image,

TDrawingStyle ADrawingStyle,

TImageType AImageType);

Void Getlcon(int Index, GraphicsnTIcon* Image);

Возвращает по указанному индексу указатель на пиктограмму, хранящуюся в списке

GetImage

Bitmap

HBITMAP GetImageBitmap(Void)

Возвращает ссылку на битовую матрицу, содержащую все изоб­ражения из списка изображений

GetMask

Bitmap

HBITMAP GetMaskBitmap(Void)

Возвращает ссылку на битовую матрицу, содержащую все мас­ки изображений из списка изображений

GetResource

Enum TResType { rtBitmap, rtCursor, rtlcon };

Enum TLoadResource (IrDefaultColor, IrDefaultSize,

IrFromFile, lrMap3DColors, IrTransparent, IrMonoChrome);

Typedef SetcTLoadResource, IrDefaultColor, lrMonoChrome> TLoadResources;

Bool GetResource(TResType ResType, const AnsiString Name, int Width, TLoadResources LoadFlags, Graphics: :TColor MaskColor);

Загружает битовую матрицу, курсор или пиктограмму из ре­сурса в список изображений (для загрузки ресурса из пакета нужно использовать GetInstRes)

HideDrag

Image

Void HideDragImage(Void)

Скрывает текущее перетаскиваемое изображение, если перед этим оно было видимым

Insert

HIDESBASE fastcall Insert(int Index, GraDMcsnTBitmap* Image, GraphicsnTBitmap* Mask)

Вставляет битовую матрицу Image И ее маску Mask В указан­ную позицию Index Списка изображений

InsertIcon

Void Insertlcon(int Index, GraphicsnTIcon* Image)

Вставляет пиктограмму Image В указанную позицию Index Спи­ска изображений

InsertMasked

Void InsertMasked(int Index, GraphicsnTBitmap* Image,

Graphics nTColor MaskColor)

Вставляет битовую матрицу Image В указанную позицию Index Списка изображений, создавая маску на основе цвета MaskColor

Overlay

Typedef Shortint TOverlay;

Bool Overlay(int ImageIndex, TOverlay Overlay)

Включает индекс изображения в список изображений для исполь­зования в качестве оверлейной маски

Register

Changes

Void RegisterChanges(TChangeLink* Value)

Регистрирует объект для последующих извещений об изменени­ях в списке изображений __

I Метод

Объявление / Описание

Replace

Void Replace(int Index, Graphics::TBitmap* Image, Graphics::TBitmap* Mask)

Заменяет изображение в списке с индексом Index новым изоб­ражением Image и маской Mask

ReplaceIcon

Void Replacelcon(int Index, Graphics-TIcon* Image)

Заменяет изображение в списке с индексом Index новой пик­тограммой Image

Replace

I Masked

Void ReplaceMasked(int Index, Graphics-TBitmap* NewImage, Graphics: :TColor MaskColor)

Заменяет изображение в списке с индексом Index новым изоб­ражением Newlmage и маской цвета MaskColor

ResInstLoad

Enum TResType { rtBitmap, rtCursor, rtlcon } Bool ResInstLoad(int Instance, TResType ResType,

Const AnsiString Name,

Graphics: :TColor MaskColor)

Загружает ресурс из пакета в список изображений

ResourceLoad

Bool ResourceLoad(TResType ResType, const AnsiString Name, Graphics-TColor MaskColor)

Загружает ресурс в список изображений (для загрузки ресурса из пакета нужно использовать RestInstLoad)

I SetDrag

Image

Bool SetDragImage(int Index, int HotSpotX, int HotSpotY)

Устанавливает изображение Index в списке изображений, кото­рое должно быть показано во время операции перетаскивания Drag&Drop. HotSpotX и HotSpotY — точка привязки

ShowDrag

Image

Void ShowDragImage(Void)

Делает видимым текущее перетаскиваемое изображение, если до этого оно было невидимо

UnRegister

Changes

Void UnRegisterChanges(TChangeLink* Value)

Удаляет объект из списка зарегистрированных объектов изоб­ражений

События

В ImageList Определено только одно событие:

! Событие

Описание

I OnChange

Происходит при изменении списка

Label — метка

Метка, используемая для отображения текста.

Страница библиотеки Standard Класс TLabel

Иерархия TObiect TPersist—t— TComponentTControl

TGraphicControl TCustomLabel

Модуль Stdctrls

Примеры изображения Рис. 2.20

Примеры меток. В левых метках

Color = ClBtnFace, в правых — clWhite. Левые метки поясняют свойства, установленные в правых метках

Описание

Компонент Label Используется для отображения текста, который играет роль метки и не изменяется пользователем. Текст метки задается свойством Caption. Шрифт надписи определяется свойством Font, Цвет фона — — свойством Color, А цвет надписи — подсвойством Color Свойства Font. Размер меток Label Определя­ется свойством AutoSize. Если это свойство установлено в true, то вертикальный и горизонтальный размеры компонента определяются размером надписи. Если же AutoSize Равно False, То выравнивание текста внутри компонента определяется свойством Alignment, Которое позволяет выравнивать текст по левому краю, пра­вому краю или центру клиентской области метки.

Свойство Wordwrap Определяет допустимость переноса слов длинной надпи­си, превышающей длину компонента, на новую строчку. Чтобы такой перенос мог осуществляться, надо установить свойство Word Wrap в True, Свойство AutoSize в False (чтобы размер компонента не определялся размером надписи) и сделать вы­соту компонента такой, чтобы в нем могло поместиться несколько строк. Если Wordwrap Не установлено в True при AutoSize Равном False, То длинный текст, не помещающийся в рамке метки, просто обрезается.

Влияние свойств AutoSize и Wordwrap Вы можете видеть на рис. 2.20. На нем представлены три метки с одинаковой надписью "Это длинный текст метки". Цвет фона Color Выбран белым, чтобы был виден размер меток. В верхней метке AutoSize = true И размер метки определяется размером надписи. В нижних мет­ках одинакового размера AutoSize = false, А выравнивание Alignment = TaCenter (по центру). Но в средней метке Wordwrap = false И видна только середина надпи­си. А в нижней метке WordWrap = true И текст переносится.

Метки могут обеспечить клавишами ускоренного доступа ,элементы, В кото­рых такие клавиши не предусмотрены, например, окна редактирования. Компо­нент, на который должен переключаться фокус при нажатии клавиш ускоренного доступа, задается свойством FocusControl. Чтобы доступ осуществлялся, надо ус­тановить в True Свойство ShowAccelChar. В надписи Caption Перед соответствую­щим символом надо поставить символ амперсанда — Следующий за ампер­

Сандом символ будет отображаться в надписи подчеркнутым и будет являться сим­волом быстрого доступа: при выполнении приложения нажатие клавиши Alt + кла­виши данного символа будет эквивалентно переключению фокуса на компонент, указанный свойством FocusControl.

Основные свойства

Свойство

Объявление / Описание

Alignment

Enum ТAlignment { taLeft Justify, taRight Justify, taCenter }; ClassesaTAlignment Alignment

Управляет горизонтальным выравниванием текста в пределах метки, если свойство AutoSize установлено в False: taLeftJusti — ‘l fy — влево, TaRight Justify — вправо, TaCenter — по центру

Свойство

Объявление / Описание

AutoSize

Bool AutoSize

Если это свойство установлено в True, То вертикальный и гори­зонтальный размеры компонента определяются размером над­писи. Если же AutoSize равно false, то выравнивание текста внутри компонента определяется свойством Alignment

Caption

AnsiString Caption

Строка текста, отображаемая меткой. Может содержать символ ускоренного доступа к элементу, указанному свойством Focus-

Control

Color

Graphics: :TColor Color

Определяет цвет фона метки

FocusControl

Controls: :TWinControl* FocusControl

Определяет оконный компонент, получающий фокус при нажа­тии пользователем клавиши быстрого доступа метки (см. пояс­нения выше в описании Label)

Font

Graphics: :TFont* Font

Определяет атрибуты шрифта

Layout

Enum TTextLayout { TlTop, TlCenter, TlBottom };

TTextLayout Layout

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

ParentColor

Bool ParentColor

Определяет (при значении true), что для фона метки будет за­имствован цвет родительского компонента. В этом случае фон метки не заметен и видна только ее надпись — Caption

ShowAccel

Char

Bool ShowAccelChar

Определяет, как амперсанд отображается в тексте метки (см. пояснения выше в описании Label)

Wordwrap

Bool Wordwrap

Указывает, переносится ли текст на новую строку, если он пре­вышает ширину метки, а высота метки позволяет разместить

В ней несколько строк

Основные методы

Никаких специальных методов в компоненте не объявлено. Метка наследует множество методов от своих предшественников, в основном, от базового класса

TControl.

Основные события

В C++Builder 6 в метке определены новые события:

—————————

Событие

Описание

OnMouseEnter

Наступает в начале прохождения курсора мыши над меткой

OnMouseLeave

Наступает в конце прохождения курсора мыши над меткой

Кроме того, метка наследует множество событий от класса TControl.

LabeledEdit — окно редактирования с меткой

Окно редактирования для ввода пользователем однострочных текстов с привя­занной к окну меткой.

Страница библиотеки Additional Класс TLabeledEdit

Иерархия TObiect TPersistentTComponentTControl

TWinContro ITCustomEdilTCustomLabeledEdit

Модуль ExtCtrls Примеры изображения Рис. 2.21

Примеры LabeledEdit. В текстах меток указаны значения свойства LabelPosition компонентов

Описание

Компонент LabeledEdit Является почти полным аналогом окна редактирова­ния Edit С единственным отличием — в нем имеется привязанная к окну метка. Наличие метки — свойства EditLabel Класса TBoundLabel, имеющего свои под­свойства, методы, события, создает ряд удобств в использовании компонента. Во-первых, практически любое окно редактирования в приложении все равно име­ет связанную с ним метку, поясняющую назначение окна. Но в данном случае не приходится заботиться о ее размещении: с помощью свойства LabelPosition Метку можно разместить сверху, слева, справа или внизу окна (см. рис. 2.21) и она будет привязана к нему при любых перемещениях. Во-вторых, выделение символом ам­персанда какого-то символа надписи в свойстве EditLabel->Caption позволя­

Ет задать для окна клавиши быстрого доступа — при нажатии пользователем кла­виши Alt и клавиши выделенного символа фокус автоматически будет передавать­ся данному окну. В-третьих, облегчается управление доступностью окна. Напри­мер, оператор

LabeledEditl->Enabled = ! LabeledEditl->Enabled;

Изменяет доступность окна. Причем, если окно сделано недоступным, то недоступ­ной выглядит и связанная с ним метка, извещая пользователя, что данным окном

Пользоваться нельзя.

Большинство свойств, методов и событий LabeledEdit, Кроме связанных со свойством EditLabel, Идентично компоненту Edit. Вводимый и выводимый текст содержится в свойстве Text. Свойство AutoSize позволяет автоматически под­страивать высоту (но не ширину) окна под размер текста. Свойство AutoSelect Оп­ределяет, будет ли автоматически выделяться весь текст при передаче фокуса в окно редактирования. Имеются также свойства только времени выполнения SelLcuigth, SelStart, SelText, Определяющие соответственно длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст. Свойство MaxLcngtli определяет максимальную длину вводимого текста. Свойство Modified, Доступное только во время выполнения, показывает, проводи­лось ли редактирование текста в окне. Свойство PasswordCliar позволяет превра-

Щать окно редактирования в окно ввода пароля. См. пояснения всех этих свойств в описании компонента Edit.

Из свойств объекта, содержащегося в свойстве EditLabel И характеризующего метку, надо отметить следующие:

Свойство

Объявление / Описание

Canvas

Graphics: :TCanvas* Canvas

Определяет поверхность (холст, канву) для рисования пером Реп и кистью Brush, для наложения друг на друга нескольких изображений. Доступ только для чтения

Caption

AnsiString Caption

Строка текста, отображаемая меткой

Color

Graphicsr-TColor Color

Определяет цвет фона метки

Font

GraphicsnTFont* Font

Определяет атрибуты шрифта

Layout

Enum TTextLayout { TlTop, tlCenter, TlBottom };

TTextLayout Layout

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

ShowAccel Char

Bool Show Accel Char

Определяет, как амперсанд отображается в тексте метки

J Wordwrap

Bool WordWrap

Указывает, переносится ли текст на новую строку, если он превышает ширину метки, а высота метки позволяет размес­тить в ней несколько строк

Свойства компонента LabeledEdit, связанные с меткой

Свойство

Объявление / Описание

EditLabel

Property EditLabel: TBoundLabel;

Объект класса TBoundLabel привязанной к окну метки (см. выше описание свойств этого класса)

LabelPosition

Type TLabelPosition = (IpAbove, IpBelow, IpLeft, IpRight); property LabelPosition: TLabelPosition;

Определяет положение метки относительно окна: IpAbove — сверху, IpBelow снизу, IpLeft — слева, IpRight — справа (см. рисунок)

J Label Spacing

Property LabelSpacing: Integer;

Расстояние в пикселах между меткой и окном

Все остальные свойства см. в описании компонента Edit.

Методы

Все методы см. в описании компонента Edit.

События

Все события см. в описании компонента Edit.

ListBox — список строк_____

Отображает список строк и позволяет пользователю выбрать из него необходи­мые строки.

Страница библиотеки Standard Класс TListBox

Иерархия TObject TPersistent TComgonent TControl

TWinControl TCustomListBox

Модуль Buttons Примеры изображения

Рис. 2.22

Примеры списков ListBox

Описание

Компонент ListBox Отображает список строк и позволяет пользователю вы­брать из него необходимые строки. В список автоматически добавляются полосы прокрутки, если все строки не помещаются в окне компонента.

Отличие ListBox От схожего по функциям компонента ComboBox Заключается в следующем:

• ComboBox разрешает пользователю редактировать список, a ListBox Не разре­шает

• в ComboBox список может быть развернут или свернут, а в ListBox Он всегда развернут

ListBox Может допускать множественный выбор, а в ComboBox Пользователь всегда должен выбрать только один элемент

Основное свойство компонента, содержащее список строк, — Items, Имеющее тип TStrintrs. Заполнить его во время проектирования можно, нажав кнопку с многоточием около этого свойства в окне Инспектора Объектов. Во время выпол­нения работать с этим свойством можно, пользуясь свойствами и методами класса TStrings Clear, Add И другими.

В компоненте ListBox Имеется свойство MultiSeIect, Разрешающее пользова­телю множественный выбор в списке. Если MultiSelect = false (значение по умол­чанию), то пользователь может выбрать только один элемент списка. В этом случае можно узнать индекс выбранной строки из свойства Itemlndex, Доступного только во время выполнения. Если ни одна строка не выбрана, то Itemlndex = -1. Началь­ное значение Itemlndex Невозможно задать во время проектирования. По умолча­нию Itemlndex = -1. Это означает, что ни один элемент списка не выбран. Если вы хотите задать этому свойству какое-то другое значение, т. е. установить выбор по умолчанию, который будет показан в момент начала работы приложения, то сде­лать это можно, например, в обработчике события OnCreate Формы, введя в него оператор вида

ListBoxl->ItemIndex = 0;

Если допускается множественный выбор (MultiSelect = true На рис. 2.22 множественный выбор задан в правом списке), то значение Itemlndex Соответству­ет тому элементу списка, который находится в фокусе. При множественном выбо­ре проверить, выбран ли данный элемент, можно проверив свойство SelectedJIn — dex: Integer] Типа Boolean. Например, следующий код для каждой из выбранных строк выдает сообщение вида «Выбрана строка…»:

For (int i=0; i < ListBoxl->Items->Count; i++) if ( ListBox2->Selected[i])

ShowMessage("Выбрана строка "+ListBoxl->Items->Strings [i]) ;

На способ множественного выбора при MultiSelect = true Влияет свойство ExtendedSelect. Если ExtendedSeIeet = true, То пользователь может выделить ин­тервал элементов, выделив один из них, затем нажав клавишу Shift и переведя кур­сор к другому элементу. Выделить не прилегающие друг к другу элементы пользо­ватель может, если будет удерживать во время выбора нажатой клавишу Ctrl. Если же ExtendedSelect = False, То клавиши Shift и Ctrl при выборе не работают.

Свойство Columns Определяет число столбцов, в которых будет отображаться список, если он не помещается целиком в окне компонента ListBox (в правом спи­ске рис. 2.22 Columns = 2).

Свойство Sorted Позволяет упорядочить список по алфавиту. При Sorted = true Новые строки в список добавляются не в конец, а по алфавиту.

Свойство Style, Установленное в IbStandard (значение по умолчанию), соот­ветствует списку строк. Другие значения Style Позволяют отображать в списке не только текст, но и изображения. При этом значение IhOwnerDrawKixed означает, что высота всех элементов списка одинакова, а значение IbOwnerDrawVariable оз­начает, что высота элементов может быть различной.

При значении Style, отличном от IbStandard, В момент, когда должна рисо­ваться какая-то строка списка, наступает событие OnDrawItem. Заголовок обра­ботчика этого события имеет вид:

Void TForml: ZListBoxlDrawltemlTWinControl *Control,

Int Index, TRect &Rect, TOwnerDrawState State)

Параметр Control Является указателем на список, в котором происходит собы­тие. Параметр Index Указывает индекс элемента, который должен быть перерисо­ван. Параметр Rect Типа TRect (см. В Гл. 6) указывает область канвы списка, соот­ветствующую рисуемому элементу списка. Параметр State Типа TOwnerDraw — State Является множеством, элементами которого могут быть значения OdSelec — ted — строка выделена, OdFocused Строка находится в фокусе и ряд других.

В обработчике события OnDrawItem Надо методами работы на канве (см. в гл. 1 описание типа TCanvas) Нарисовать изображение элемента.

При значении Style Равном IbOwnerDrawFixed Перед прорисовкой наступает только событие OnDrawItem. При Style = IbOwnerDrawVariable Перед этим собы­тием наступает другое — OnMeasureItem, в котором надо указать высоту элемен­та. Заголовок обработчика этого события имеет вид:

Void TForml :: ListBoxlMeasureIteni (TWinControl *Control,

Int Index, int 6Height)

Параметры Control и Index Имеют тот же смысл, что и в обработчике OnDrawItem, А значение параметра Height надо задать равным высоте данного элемента списка.

Примеры отображения в списках изображений рассмотрены в [1] и [3].

В C++Builder 6 введены значения Style, Равные IbVirtuaI и IbVirtuaIOwner — Draw. Они соответствуют виртуальным спискам, формируемым программно во время выполнения. Для этого используются события компонента OnData, OnData — Find, OnDataObject. Чтобы эти события наступили, надо задать свойство списка Count — число строк. Это свойство всегда присутствует в списке ListBox, Но толь­ко в виртуальных списках допускается задание его значения. В остальных случаях это свойство только для чтения.

Событие OnData Наступает в тот момент, когда приложению надо отобразить очередную строку списка. Заголовок обработчика этого события имеет вид:

Void TForml::ListBoxlData(TWinControl *Control,

Int Index, AnsiString &Data)

Параметр Control — список, в котором происходит событие. Параметр Index — это индекс строки, которая должна отображаться. А в параметр Data Надо задать ото­бражаемый текст.

Если со строками виртуального списка надо связать какие-то объекты, это де­лается в обработчике события OnDataObject, Заголовок которого имеет вид:

Void TForml:ZListBoxlDataObject(TWinControl *Control,

Int Index, TObject *&DataObject)

Параметр Index Указывает индекс строки, а в параметр DataObject Заносится связываемый со строкой объект.

Для возможности управления виртуальным списком, например, для поиска строки по первым символам или для упорядочивания строк, надо написать обра­ботчик события OnDataFind. Его заголовок имеет вид:

Int TForrnl::ListBoxlDataFind(TWinControl *Control,

AnsiString FindString)

Параметр FindString — это искомая строка, индекс которой надо вернуть как Result — результат, возвращаемый функцией.

Примеры создания виртуальных списков рассмотрены в [1] и [3].

Имеется еще один компонент, очень похожий на ListBox — это список с инди­каторами CheckListBox. Выглядит он так же, как ListBox, Но около каждой стро­ки имеется индикатор, который пользователь может переключать.

Основные свойства

Свойство

Объявление / Описание

Action

ClassescTBasicAction* Action

Определяет действие, связанное с данным компонентом

Align

Enum TAlign {alNone, alTop, alBottom, alLeft, alRight, alClient, alCustom};

TAlign Align

Определяет способ выравнивания компонента в контейнере (родительском компоненте)

Anchors

Enum TAnchorKind { akLeft, akTop, akRight, akBottom }; typedef Set<T Anchor Kind, akLeft, akBottom> TAnchors; TAnchors Anchors

Определяет привязку данного компонента к родительскому при изменении размеров последнего

Columns

Int Columns

Определяет число столбцов, в которых будет отображаться список, если он не помещается целиком в окне компонента

Count

Int Count

Определяет число строк в списке. Может (и должно) задавать­ся только при значениях Style, равных Ib Virtual или IbVirtu — alOwnerDraw

I ExtendedSelect

Bool ExtendedSelect

Определяет, может ли пользователь при MultiSelect = true выбрать несколько последовательно расположенных элемен­тов, держа нажатой клавишу Shift

Свойство

Объявление / Описание

ItemIndex

Int Itemlndex

Указывает порядковый номер элемента, выделенного в списке

Items

Classes: =TStrings* Items

Массив строк списка — объект класса TStrings. Свойства это­го класса позволяют формировать и изменять список

MultiSelect

Bool MultiSelect

Указывает, можно ли выбрать в окне списка несколько эле­ментов одновременно

SelCount

Int SelCount

Указывает количество выделенных элементов при MultiSelect = True. Доступ только для чтения

Selected

Bool Selected[int Index]

Индексированный массив, определяющий, какие элементы

Списка выделены

I Sorted

Bool Sorted

Указывает, должны ли строки в списке автоматически сорти­роваться в алфавитном порядке

J Style

Enum TListBoxStyle {IbStandard, IbOwnerDrawFixed,

IbOwnerDrawVariable, IbVirtual, IbvirtualOwnerDrawJ-,

TListBoxStyle Style

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

TopIndex

Int Toplndex

Указывает индекс элемента, видимого вверху списка. Изменение этого индекса соответственно сдвигает видимую часть списка

Основные методы

.. —————-

! Метод

Объявление / Описание

! Clear

Void Clear(void)

Удаляет все элементы списка

ItemAtPos

Int ItemAtPosfTPoint &Pos, bool Existing)

Возвращает индекс элемента списка, соответствующего указанным координатам Pos. Если позиция Pos расположена после последнего элемента, то при Existing = True ItemAtPos возвращает -1, а при Existing = false — последний элемент списка

ItemRect

TvpesnTRect ItemRectfint Index)

Возвращает прямоугольник, описывающий указанный элемент

Item списка

SetFocus

TypesnTRect ItemRectfint Index)

Передает фокус элементу, активизирует его

Основные события

Событие

Описание J

OnClick

Наступает при щелчке на элементе списка |

OnData

Наступает в виртуальных списках, когда приложению надо отобразить очередную строку списка

OnDataFind

Обработчик события пишется для возможности управления виртуальным списком, например, для поиска строки по пер­вым символам или для упорядочивания строк

_____________

OnDataObject

Наступает в виртуальных списках, когда со строками виртуа­льного списка надо связать какие-то объекты

OnDrawItem

Наступает при необходимости перерисовать элемент списка (см. выше описание ListBox)

OnKeyDown

Событие наступает при нажатии пользователем любой клави­ши. В обработчике можно распознать нажатую клавишу

_____________

, OnKevPress

Событие наступает при нажатии пользователем клавиши сим­вола. В обработчике можно распознать вводимый символ и при необходимости изменить его или запретить его ввод

I OnKevUn

Событие наступает при отпускании пользователем любой кла­виши. В обработчике можно распознать отпускаемую клавишу

OnMeasure

Item

Наступает при необходимости перерисовать элемент в списке с изменяемой высотой элементов

MainMenu — главное меню _______________________________________

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

Страница библиотеки Standard

Класс TMainMenu

Иерархия TObject TPersistent TComponent TMenu

Модуль Menus

Описание

Компонент MainMenu Отображает на форме главное меню. Обычно на форму помещается один компонент MainMenu. В этом случае его имя автоматически за­носится в свойство формы Menu. Но можно поместить на форму и несколько ком­понентов MainMenu С разными наборами разделов, соответствующими различным режимам работы приложения. В этом случае во время проектирования свойству Menu Формы присваивается ссылка на один из этих компонентов. А в процессе вы­полнения в нужные моменты это свойство можно изменять, меняя соответственно состав главного меню приложения.

Основное свойство компонента — Items. Его заполнение производится с помо­щью конструктора меню, вызываемого двойным щелчком на компоненте Main — Menu Или нажатием кнопки с многоточием рядом со свойством Items В окне Ин­спектора Объектов. Окно конструктра показано на рис. 2.23 а. На рис. 2.23 б пока­зано сконструированное меню в работе.

Рис. 2.23

Окно конструктора меню (а) и сконструированное меню в работе (б)

При работе в конструкторе меню новые разделы можно вводить, помещая кур­сор в рамку из точек, обозначающую место расположения нового раздела (см. рис. 2.23 а). Если при этом раздел ввелся не на нужном вам месте, вы можете от­буксировать его мышью туда, куда вам надо. Другой путь ввода нового раздела — использование контекстного меню, всплывающего при щелчке правой кнопкой мыши. Если вы предварительно выделите какой-то раздел меню и выберете из контекстного меню команду Insert, то рамка нового раздела вставится перед ранее выделенным. Из контекстного меню вы можете также выполнить команду Create Submenu, позволяющую ввести подменю в выделенный раздел (см. на рис. 2.23 под­меню раздела Опции).

При выборе нового раздела вы увидите в Инспекторе Объектов множество свойств данного раздела. Дело в том, что каждый раздел меню, т. е. каждый эле­мент свойства Items, Является объектом типа TMenuItem, обладающим своими свойствами, методами, событиями.

Свойство Caption Обозначает надпись раздела. Заполнение этого свойства под­чиняется тем же правилам, что и заполнение аналогичного свойства в кнопках, включая использование символа амперсанда для обозначения клавиш быстрого доступа. Если вы в качестве значения Caption Очередного раздела введете символ минус то вместо раздела в меню появится разделитель (см. на рис. 2.23 разде­лители после разделов Сохранить как, Настройка принтера и Опции).

Свойство Name Задает имя объекта, соответствующего разделу меню.

Свойство Shortcut Определяет клавиши быстрого доступа к разделу меню — «горячие» клавиши, с помощью которых пользователь, даже не заходя в меню, может в любой момент вызвать выполнение процедуры, связанной с данным разде­лом. Чтобы определить клавиши быстрого доступа, надо открыть выпадающий список свойства Shortcut В окне Инспектора Объектов и выбрать из него нужную комбинацию клавиш. Эта комбинация появится в строке раздела меню (см. на рис. 2.23 команду Сохранить).

Свойство Default Определяет, является ли данный раздел разделом по умолча­нию своего подменю, т. е. разделом, выполняемым при двойном щелчке пользова­теля на родительском разделе. Подменю может содержать только один раздел по умолчанию, выделяемый жирным шрифтом (см. на рис. 2.23 раздел Открыть).

Свойство Break Используется в длинных меню, чтобы разбить список разделов на несколько столбцов. Возможные значение Break: mbN one — отсутствие разбие­ния меню (это значение принято по умолчанию), MbBarBreak И MbBreak В меню вводится новый столбец разделов, отделенный от предыдущего полосой (mbBarBreak) Или пробелами (mbBreak). На приведенном ниже рис. 2.24 показан пример, в котором в разделе 1-3 установлено значение Break = mbBreak, А в разде­ле 1-5 — Break = mbBarBreak.

1-1
1-2
рис. 2.24
пример меню с разбиением на столбцы
1-3 | 1-5,1-4 1-6

Свойство Checked, Установленное в True, Указывает, что в разделе меню будет отображаться маркер флажка, показывающий, что данный раздел выбран — см. на рис. 2.23 раздел «Автосохранение». В C++Builder 6 в разделах меню имеется свойство AutoCheck. Если установить его в True, То при каждом щелчке пользова­теля на этом разделе (перед каждым событием OnClick) Значение маркера пере­ключается на противоположное. В версиях младше C++Builder 6 сам по себе этот маркер не изменяется и в обработчик события OnClick Такого раздела надо встав­лять оператор типа

MAutoSave->Checked = ! MAutoSave->Checked;

(в приведенном операторе подразумевается, что раздел меню назван MAutoSave).

Еще одним свойством, позволяющим вводить маркеры в разделы меню, явля­ется RadioItem. Это свойство, установленное в True, Определяет, что данный раз­дел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства GroupIndex. По умолчанию значение Group — Index Равно 0. Но можно задать его большим нуля и тогда, если имеется несколько разделов с одинаковым значением Grouplndex И с Radioltem = true, То в них мо­гут появляться маркеры флажков, причем только в одном из них. На рис. 2.23 свойство Radioltem Установлено в True В разделах Шаблон 1 и Шаблон 2, имеющих одинаковое значение Grouplndex. Если вы зададите программно в одном из этих разделов Checked = True, то в остальных разделах Checked Автоматически сбросит­ся в False. Впрочем, установка Checked = true Лежит на программе; эта установка может выполняться аналогично приведенному выше оператору.

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

Для каждого раздела могут быть установлены во время проектирования или программно во время выполнения свойства Enabled (доступен) и Visible (види­мый). Если установить Enabled = false, То раздел будет изображаться серой надпи­сью и не будет реагировать на щелчок пользователя. Если же задать Visible = false, То раздел вообще не будет виден, а остальные разделы сомкнутся, заняв ме­сто невидимого. Свойства Enabled И Visible Используются для того, чтобы изме­нять состав доступных пользователю разделов в зависимости от режима работы приложения.

В C++Builder предусмотрена возможность ввода в разделы меню изображе­ний. За это ответственны свойства разделов Bitmap и ImageIndex. Первое из них позволяет непосредственно ввести изображение в раздел, выбрав его из указанного файла. Второе позволяет указать индекс изображения, хранящегося во внешнем компоненте ImaifeList. Указание на этот компонент вы можете задать в свойстве Images компонента MainMenu.

Основное событие раздела меню — OnClick, Возникающее при щелчке пользо­вателя на разделе или при нажатии «горячих» клавиш и клавиш быстрого доступа.

Рассмотрим теперь вопросы объединения главных меню вторичных форм с меню главной формы. Речь идет о приложениях с несколькими формами, в кото­рых и главная, и вспомогательные формы имеют свои главные меню — компонен­ты MainMenu. Конечно, пользователю неудобно работать одновременно с несколь­кими окнами, каждое из которых имеет свое меню. Обычно надо, чтобы эти меню сливались в одно меню главной формы.

Приложения с несколькими формами могут быть двух видов: приложения с интерфейсом множества документов — — так называемые приложения MDI, и обычные приложения с главной и вспомогательными формами. В приложениях MDI меню дочерних форм всегда объединяются с меню родительской формы. А в приложениях с несколькими формами наличие или отсутствие объединения оп­ределяется свойством AutoMerge Компонентов TMainMenu. Если требуется, чтобы меню вторичных форм объединялись с меню главной формы, то в каждой такой вторичной форме надо установить AutoMerge в True. При Этом свойство Auto­Merge Главной формы должно оставаться в False.

Способ объединения меню определяется свойством разделов Grouplndex. По умолчанию все разделы меню имеют одинаковое значение Grouplndex, Равное нулю. Если требуется объединение меню, то разделам на до задать неубывающие номера свойств Grouplndex. Тогда, если разделы встраиваемого меню имеют те же значения Grouplndex, Что и какие-то разделы меню основной формы, то эти разде­лы заменяют соответствующие разделы основного меню. В противном случае раз­делы вспомогательного меню встраиваются между элементами основного меню в соответствии с номерами Grouplndex. Если встраиваемый раздел имеет Group — Index Меньший, чем любой из разделов основного меню, то разделы встраиваются в начало.

% каскадупорядочить упорядочить значкиТеперь остановимся на одном из вопросов, связанных с меню в упоминавших­ся выше приложениях MDI. В них пользователь может открывать сколько ему тре­буется окон документов. Обычно в подобных приложениях имеется меню Окно (см. рис. 2.25), которое содержит такие разделы, как Новое, Упорядочить и т. п. Послед­ним идет обычно список открытых окон документов, в который заносятся назва­ния открытых пользователем окон. Выбирая в этом списке, пользователь может переключаться между окнами документов.

Рис. 2.25

Меню «Окно» в приложении MDI со списком открытых документов

1 Документ 1 √ 2 Документ 2

3 Документ 3

Для включения в меню раздела списка открытых окон, надо в свойстве WindowMenu Главной формы приложения MDI указать имя меню, в конец которо­го должен помещаться список. Указывается именно имя меню, а не разделов выпа­дающего списка. Для приведенного примера должно быть указано имя элемента меню, соответствующего команде Окно.

Одним из безусловных требований, предъявляемых к меню приложений для Windows, является стандартизация меню и их разделов. Этому помогает команда Save As Template в контекстном меню, всплывающем при щелчке правой кнопкой мыши в окне Конструктора Меню. Эта команда вызывает диалог, в котором вы мо­жете указать описание (заголовок), под которым хотите сохранить ваше меню.

Впоследствии в любом вашем новом приложении вы можете загрузить этот шаб­лон в меню, выбирая из всплывающего меню в окне Конструктора Меню команду Insert From Template.

Основные свойства

; Свойство

Объявление / Описание

‘ AutoHotKeys

Enum TMenuIteinAutoFlag { ma Automatic, maManual, MaParent };

Typedef TMenuItemAutoFlag TMenuAutoFlag;

TMenuAutoFlag AutoHotkeys

Определяет, могут ли «горячие» клавиши элементов меню уста­навливаться автоматически

AutoLine

Reduction

Bool AutoLineReduction

Указывает, проверяет ли и исправляет ли C++Builder появле­ние в начале или конце подменю разделителей или двух разде­лителей подряд

AutoMerge

Bool AutoMerge

Определяет, объединятся ли главные меню вспомогательных форм с главным меню основной формы

Images

ImglistuTcustomIinageList* Images

Определяет список изображений, которые могут отображаться в разделах меню слева от надписи. Изображения конкретных разделов указываются свойством ImageIndex (индексом массива Images) разделов меню Items типа TMenuItem

Items

_____________

TMenuItem* Items

Список элементов (разделов) меню типа TMenuItem

Основные методы!

Свойство

Объявление / Описание

FindItem

Enum TFindItemKind {fkCommaπd, fkHandle, fkShortCut}; TMenuItem* Findltem(int Value, TFindltemKind Kind)

Ищет и возвращает раздел меню, индентифицируемый значением Value, которое равно: при Kind = fkCommand — идентификатору ID, используемому в сообщении Windows WM_COMMAND; При Kind = fkHandle — дескриптору всплывающего меню; при Kind = fkShortCut — коду «горячих» клавиш

IsShortCut

Bool IsShortCut(MessagesnTWMKey &Message)

Распознает «горячие» клавиши, связанные с разделом меню, и выполняет этот раздел меню

I

, Merge

Void MergetTMainMenu* Menu)

Объединяет данное меню с указанным меню Menu вспомогатель­ной формы

Unmerge

Void UnmergetTMainMenu* Menu)

Уничтожает объединение указанного меню Menu вспомогательной : формы с данным меню

События

Событие

Описание _ |

! OnChange

Наступает при изменении меню _

При работе с меню основные события связаны не с самим объектом меню, а с объектами его разделов типа TMenuItem, из которых главное OnClick. Насту­пающее при щелчке на разделе или при нажатии «горячих» клавиш или клавиш Быстрого доступа.

MaskEdit — окно редактирования с шаблонами_____________________

Окно редактирования для ввода пользователем текстов с возможностью ис­пользовать шаблоны.

Страница библиотеки Additional Класс TM а S k Edit

Иерархия TObfect TPersistЕпTTComjionerU TControI TWinControl ,^CwtomEdit TCustomMaskEdit

Модуль Buttons

Примеры изображения

Рис. 2.26

Примеры компонентов MaskEdit

Описание

Компонент MaskEdit Аналогичен по своим свойствам компоненту Edit, Позво­ляет редактировать в окне однострочные тексты без возможности их выравнива­ния и переноса на следующую строку. Компонент отличается от Edit Возможно­стью задавать строку маски (свойство EditMask), В каждой позиции которой запи­сываются условные символы, буквы или цифры, кодирующие возможности запи­си в этих позициях определенных знаков, например, только цифр или только букв. На рис. 2.26 вверху показано окно, в которое вводится по шаблону телефон с кодом страны, в середине — шаблон ввода паспорта, внизу — введенная по шаб­лону дата

Окно редактирования снабжено многими функциями, свойственными боль­шинству редакторов. Например, в нем предусмотрены типичные комбинации «го­рячих» клавиш: Ctrl-C — копирование выделенного текста в буфер обмена Clip­board (команда Copy), Ctrl-X — вырезание выделенного текста в буфер Clipboard (ко­манда Cut), — вставка текста из буфера Clipboard в позицию курсора (коман­

Да Paste), Ctrl-Z — отмена последней команды редактирования.

Основное свойство, отличающее компонент MaskEdit от Edit — Строка маски EditMask. Маска состоит из трех разделов, между которыми ставится точка с за­пятой (;). В первом разделе — шаблоне записываются специальным образом симво­лы, которые можно вводить в каждой позиции, и символы, добавляемые самой
маской; во втором разделе записывается 1 или 0 в зависимости от того, надо или нет, чтобы символы, добавляемые маской, включались в свойство Text компонен­та; в третьем разделе указывается символ, используемый для обозначения пози­ций, в которых еще не осуществлен ввод. Подробное описание формата маски см. в гл. 3, в разд. «EditMask и EditMaskPtr».

Прочитать результат ввода можно или в свойстве Text, которое в зависимости от вида второго раздела маски включает или не включает в себя символы маски, или в свойстве EditText, содержащем введенный текст вместе с символами маски.

Вводить маску можно непосредственно в свойство EditMask. Но удобнее поль­зоваться специальным редактором масок, вызываемым при нажатии кнопки с многоточием в строке свойства EditMask в Инспекторе Объектов. Окно редактора масок имеет вид, показанный на рис. 2.27.

Рис. 2.27

⅛amp∣e masks:extension social security short zip code long zip code date
long time short time
(4151555-121215450
555-55-5555
90504
90504-0000
06.27.94
09;05:15pm
13:45
input mesk editorinput mask∣∣l∖(999∖)000-0000:1;..∕∙ eΞco k | cancelkelp |

б),input mask editor,sample masks:
телефон ,555-12-12
,(7 ok,help,cancel
input mask:
g∣!∖(999∖) 000-00-00;0;_
'-∙"'∙ι с кодом v (095
почтовый индекс
паспорт
дата с указанием дня дата без указания дня время с секундами время без секунд 123456
v-il 123456
01.03.02
03.02
21:05:15
13:45
chatactef tot blanks:
p save i+eral chatactefs
(i
iw input:
m —
masks.= j

Окно редактора масок с загруженными файлами, стандартных масок: американским (а) и российским (б)

В редакторе масок окно Sample Masks содержит наименования стандартных ма­сок и примеры ввода с их помощью. В окно Input Mask надо ввести маску. Если вы выбираете одну из стандартных масок, то окно Input Mask автоматически заполня­ется и вы можете, если хотите, отредактировать эту маску.

Окно Character for Blanks определяет символ, используемый для обозначения позиций, в которых еще не осуществлен ввод (третий раздел маски). Индикатор Save Literal Characters определяет второй раздел маски: установлен, если второй раз­дел равен 1, и не установлен, если второй раздел равен 0.

Кнопка Masks позволяет выбрать и загрузить какой-либо другой файл стан­дартных масок. Среди файлов стандартных масок, поставляемых с C++Builder, от­сутствует маска, соответствующая российским стандартам. Но вы легко можете сами сделать себе такой файл стандартных масок. Он делается в обычном тексто­вом редакторе и должен сохраняться как «только текст» с расширением. dem. Что­бы редактор масок C++Builder видел этот файл, его надо сохранить в каталоге C++Builder BIN. Каждая строка файла состоит из трех частей, разделяемых симво­лом вертикальной черты. Первая часть состоит из пояснительного текста, появ­ляющегося в левой панели окна Sample Masks редактора масок. Вторая часть —

Пример, который появляется в правой панели окна Sample Masks редактора масок. А третья часть — сама маска. Пример подобного файла:

Телефон | 5551212 |

Телефон с кодом страны | 0955551212 | !\(999\) 000-00-00; 0; _

Почтовый индекс | 123456 I

Паспорт I VII123456 | !L-LL 999999;0;_

Дата с указанием дня | 270694 | !99/99/00;1

Дата без указания дня | 0694 | ; 99/00; 1:

Время с секундами I 210515 |

Время без секунд I 1345 I ‘ 90:00; 1;

На показанном выше рис. 2.27 б) вы можете видеть его загруженным в окно редак­тора, а на рис. 2.26 вы видите окна, использующие его шаблоны при вводе данных.

Основные свойства

Компонент имеет все свойства обычного окна редактирования, которые вы мо­жете посмотреть в описании компонента Edit, Плюс следующие свойства, связан­ные с масками:

`. Свойство

Объявление / Описание

L EditMask

Property EditMask: string;

Определяет маску, которая указывает допустимую форму записи текста для данного компонента (формат маски см. в гл. 3, в разд. «EditMask и EditMaskPtro)

EditText

Property EditText: string;

Текст в окне вместе с символами маски

IsMasked

Property IsMasked: Boolean;

Указывает, задана ли маска EditMask

Text

Type TCaption = string;

Property Text: TCaption;

Текст в окне редактирования с символами маски или без них в за­висимости от второго раздела маски

Основные методы

Компонент имеет все методы, указанные в разделе, описывающем Edit, Плюс следующий метод:

Метод

Объявление / Описание

ValidateEdit

Void ValidateEdit(Void)

Проверяет соответствие маске текста в окне. Если нет соответст­вия, генерируется исключение и курсор устанавливается на пер­вую позицию, не соответствующую маске

События

Все события см. в описании компонента Edit.

Иерархия — — —

TWinControlTCustomEditTCustomMemo

Модуль Stdctrls Пример изображения

Рис. 2.28

Текстовый редактор на основе Memo

Описание

Memo — многострочный текстовый редактор, позволяющий редактировать текст окна, в которое можно вводить в отличие от компонента Edit Не одну, а мно­жество строк. Выполняет функции большинства редакторов, имеет "горячие" кла­виши для быстрого редактирования. Формат всего текста одинаков и определяется свойством Font. В этом его отличие от многострочного окна редактирования RichEdit. Которое допускает раздельное форматирование отдельных фрагментов текста. Если вы сохраните в файле текст, введенный или отредактированный в Memo Пользователем, то будет создан текстовый файл, содержащий только сим­волы и не содержащий элементов форматирования. При последующем чтении это­го файла в Memo Формат будет определяться текущим состоянием свойства Font Компонента Memo, А не тем, в каком формате ранее вводился текст.

Изменять атрибуты шрифта можно во время проектирования или программ­но. Например, операторы

FontDialogl->Font->Assign(Memol->Font); if (FontDialogl-S-ExecuteO)

Memol->Font->Assign(FontDialogl->Font) ;

Загружают в диалог выбора шрифта FontDialogl Текущий шрифт Mcmol как зна­чение по умолчанию, вызывают диалог выбора шрифта и, если пользователь вы­брал в нем шрифт, копируют этот шрифт в окно Memol.

Свойство Lines, Доступное как во время проектирования, так и во время вы­полнения, имеет множество свойств и методов типа TStrings. которые обычно ис­пользуются для формирования и редактирования текста (см. в гл. 1). Весь текст содержится в свойстве Text. Имеются также свойства только времени выполнения SelLength, SelStart, SelText, Определяющие соответственно длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст. Если выделенного текста нет, то свойство SelStart Просто определяет теку­щее положение курсора.

Окно редактирования снабжено многими функциями, свойственными боль­шинству редакторов. Например, в нем предусмотрены типичные комбинации «го­рячих» клавиш: Cirl-C — копирование выделенного текста в буфер обмена Clip­board (команда Copy), Orl-X — вырезание выделенного текста в буфер Clipboard (ко­манда Cut), CiH-V — вставка текста из буфера Clipboard в позицию курсора (коман­да Paste), Ctrl-Z — отмена последней команды редактирования.

Свойство Modified, Доступное только во время выполнения, показывает, про­водилось ли редактирование текста в окне. Если вы хотите использовать это свой­ство, то в момент начала работы пользователя с текстом Modified Надо установить в False. Тогда при последующем обращении к этому свойству можно по его значе­нию (true или False) Установить, было или не было произведено редактирование.

Свойство Alignment Определяет выравнивание текста (влево, вправо, по цен­тру). Таким образом, например, выполнение команды выравнивания по центру (см. рис. 2.28) сводится к оператору

Memol->Alignment = taCenter;

Свойство Wordwrap, Равное True, Указывает на допустимость переноса длин­ных строк. Установка свойства ReadOnly в True Задает текст только для чтения. Свойство MaxLength Определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена (реально она все равно ограничена, но для снятия этого ограничения надо использовать сообщения Windows — см. в [3]). Свойства WantReturns и WantTab Определяют допустимость ввода пользо­вателем в текст символов перевода строки и табуляции.

Свойство ScrollBars определяет наличие полос прокрутки текста в окне. По умолчанию ScrollBars = SsNone, Что означает их отсутствие. Пользователь может в этом случае перемещаться по тексту только с помощью курсора. Можно задать свойству ScrollBars Значения SsHorizontal, SsVertical (это задано в примере на рис. 2.28) или SsBoth, Что будет соответственно означать наличие горизонтальной, вертикальной или обеих полос прокрутки.

Свойство CaretPos Указывает на запись, поле X которой содержит индекс сим­вола в строке, перед которым расположен курсор, а поле Y — индекс строки, в ко­торой находится курсор. Таким образом, учитывая, что индексы начинаются с О, значения Memol->CaretPos. Y+l И Memol->CaretPos. X+l Определяют соответст­венно номер строки и символа в ней, перед которым расположен курсор. В редак­торе на рис. 2.28 именно эти значения использованы, чтобы отображать в строке состояния StatusBar Позицию курсора.

Свойства Align и Anchors позволяют адаптировать размер окна Memo К разме­ру окна приложения, выбранного пользователем.

Основные свойства

I Свойство

Объявление / Описание

1 Align

Enum TAlign {alNone, alTop, alBottom, alLeft, aIRight, alClient, alCustom};

TAlign Align

Определяет способ выравнивания компонента в контейнере (ро­дительском компоненте)

Alignment

Enum T Alignment { taLeft Justify, taRight Justify, taCenter }; Classes: :TAlignment Alignment

Управляет выравниванием текста: TaLeftJustify — влево, Ta — RightJustify Вправо, TaCenter По центру. Значение по умолчанию — влево∣

Anchors

Enum TAnchorKind { akLeft, akTop, akRight, akBottom }; Typedef SetcTAnchorKind, akLeft, akBottom> TAnchors; TAnchors Anchors

Определяет привязку данного компонента к родительскому при изменении размеров последнего

Свойство

Объявление / Описание

CanUndo

Bool CanUndo

Указывает, содержит ли компонент изменения, которые можно отменить. Доступ только для чтения

CaretPos

TPoint CaretPos

Указывает строку и символ расположения курсора (см. в приве­денном ранее описании Memo). Доступ только для чтения

Font

Graphics: :TFont* Font

Определяет атрибуты шрифта

Lines

ClassesnTStrings* Lines

Строки текста — объект типа TStrings

MaxLength

Int MaxLength

Указывает максимальное количество символов, которое пользо­ватель может вводить в компонент. При значении 0 длина тек­ста неограничена

Modified

Bool Modified

Указывает, редактировался ли пользователем текст в компоненте

PopupMenu

MenusnTPopupMenu* PopupMenu

Определяет всплывающее меню, связанное с данным компонентом

Readonly

Bool ReadOnly

Указывает, может ли пользователь изменять текст в компоненте

SelLength

Int SelLength

Определяет количество выделенных символов в тексте

SelStart

Int SelStart

Указывает позицию первого выделенного символа в тексте или, если выделения нет, то позицию курсора

SelText

AnsiString SelText

Текст, выделенный в окне

Text

AnsiString Text

Текст окна в виде одной строки

WantReturns

Bool WantReturns

Указывает, можно ли вставить в текст символы возврата каретки

WantTabs

————————

Wordwrap

Bool WantTabs

Указывает, можно ли вставить, в текст символы_табуляции

Bool Wordwrap

Указывает, переносится ли текст на новую строку, если он пре­вышает ширину компонента

Основные методы

Метод

Объявление / Описание

‘ Clear

Void Clear(void)

Удаляет текст из окна

Метод

Объявление / Описание

! ClearSelection

Void ClearSelection(Void)

Удаляет текст, выделенный в окне

■ ClearUndo

Void ClearUndo(Void)

Очищает буфер отмены команд редактирования, так что ника­кие изменения в тексте после этого не могут быть отменены

■ СоруТо i Clipboard

Void CopyToClipboard(Void)

Копирует выделенный текст в компоненте редактирования в Clipboard в формате CF TEXT

, CutTo

Clipboard

Void CutToClipboard(Void)

Переносит выделенный текст в Clipboard в формате CF_TEXT и уничтожает его в окне

PasteFrom

Clipboard

Void PasteFromClipboard(void)

Переносит в окно в позицию SelStart текст из буфера Clipboard

Perform

Int Perform(unsigned Msg, int WParam, int LParam)

Передает окну сообщение Windows Msg с параметрами WPa- ram и LParam

1 SelectAll

Void SelectAll(Void)

Выделяет весь текст в окне редактирования

Undo

Void Undo(void)

Отменяет все изменения, хранившиеся в буфере отмены резуль­татов редактирования с момента последнего вызова ClearUndo

Основные события

Событие

Описание

‘OnChange

Наступает, когда текст в окне может быть изменился. Свойство Modified показывает, действительно ли произошло изменение

` OnKevDown

Событие наступает при нажатии пользователем любой клави­ши. В обработчике можно распознать нажатую клавишу

‘ OnKevPress

______________

Событие наступает при нажатии пользователем клавиши сим­вола. В обработчике можно распознать вводимый символ и при необходимости изменить его или запретить его ввод

1 OnKevUp

Событие наступает при отпускании пользователем любой кла­виши. В обработчике можно распознать отпускаемую клавишу

OpenDialog, OpenPictureDialog, SaveDialog, SavePictureDialog — диалоги работы с файлами

Невизуальные компоненты вызова стандартных диалогов Windows открытия и сохранения файлов.

Страница библиотеки Dialogs

Классы TOpenDialog, TOpenPictureDialog, TSaveDialog, TsavePictureDialog Иерархия TObiectTPersistentTComponent TCommonDialog Модуль Dialogs

Описание

Компоненты OpenDialog И SavcDialog вызывают стандартные диалоги Win­dows открытия и сохранения файлов, показанные на рис. 2.29 а) и б). Компоненты OpenPictureDialog и SavePictureDialog вызывают аналогичные стандартные диа­логи Windows открытия и сохранения файлов изображений, показанные на

Рис. 2.29 в) и г).

Отрытие соответствующего диалога осуществляется методом Execute. Если в диалоге пользователь нажмет кнопку Открыть (Сохранить), диалог закрывается, метод Execute Возвращает True И выбранный файл отображается в свойстве компо­нента-диалога FileName. Если же пользователь отказался от диалога (нажал кноп­ку Отмена или клавишу Esc), то метод Execute Возвращает False.

Значение свойства FileName Можно задать и перед обращением к диалогу. То­гда оно появится в диалоге как значение по умолчанию в окне Имя файла (см. рис. 2.29). Таким образом, например, выполнение команды Сохранить как, по кото­рой в файле с выбранным пользователем именем надо сохранить текст окна редак­тирования RichEditl, Может иметь вид:

SaveDialogl->FileName = FName; // Задание имени по умолчанию If (SaveDialogl->Execute())

1

FName = OpenDialogl->FileName;

RichEditl->Lines->SaveToFile(FName);

1

Рис. 2.29

б)

Диалоговые окна открытия файла (а), сохранения файла (б)

рис. 2.29
диалоговые окна открытия файла изображения (в), сохранения файла изображения (г)

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

Типы искомых файлов, появляющиеся в диалоге в выпадающем списке Тип файла (см. рис. 2.29), задаются свойством Filter. В процессе проектирования это свойство проще всего задать с помощью редактора фильтров, который вызывается нажатием кнопки с многоточием около имени этого свойства в Инспекторе Объек­тов. При этом открывается окно редактора, вид которого показан на рис. 2.30. В его левой панели Filter Name вы записываете тот текст, который увидит пользова­тель в выпадающем списке Тип файла диалога. А в правой панели Filter записывают­ся разделенные точками с запятой шаблоны фильтра. В примере на рисунке задано три фильтра: текстовых файлов с расширениями. txt и файлов документов с рас­ширениями doc и любых файлов с шаблоном *.*.

Рис. 2.30

Диалоговое окно задания фильтра

После выхода из окна редактирования фильтров заданные вами шаблоны поя­вятся в свойстве Filter В виде строки вида:

Текстовые файлы (*.txt; *.rtf) I *.txt;*.rtf I

Файлы документов (*.doc)∣*.doc∣Bce файльг|*.*

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

Свойство FilterIndex Определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога. Например, значение Filter — Index = 1 задает по умолчанию первый фильтр.

Свойство IiiitiaIlJir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при послед­нем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения.

Свойство DefaultExt Определяет значение расширения файла по умолчанию. Если значение этого свойства не задано, пользователь должен указать в диалоге полное имя файла с расширением. Если же задать значение DefaultExt (например, "txt"), то пользователь может писать в диалоге имя без расширения. В этом случае будет принято заданное расширение.

Свойство Title Позволяет вам задать заголовок диалогового окна. Если это свойство не задано, окно открывается с заголовком, определенным в системе. Но вы можете задать и свой заголовок, подсказывающий пользователю ожидаемые действия. Например, «Укажите имя открываемого Файла».

Свойство Options Определяет условия выбора файла. Множество опций, кото­рые вы можете установить программно или во время проектирования, включает:

OfAllowMultiSelect

Позволяет пользователю выбирать несколько файлов

OfCreatePrompt

В случае, если пользователь написал имя несуществую — | щего файла, появляется замечание и запрос, надо ли создать файл с заданным именем ]

OfEnableIncludeNotify

Посылает сообщение C. DN_INC.’LUDEITE каждому эле­менту открывающейся папки. Может использоваться для управления тем, какие элементы отображаются в папке. Начиная с Windows 2000

OfEnableSizing

Разрешает пользователю изменять размер диалогового окна

OfExtensionDifferent

Этот флаг, который можно прочитать после выполне­ния диалога, показывает, что расширение файла, вы­бранного пользователем, отличается от DefaultExt

! OfFileMustExist

В случае, если пользователь написал имя несуществую­щего файла, появляется сообщение об ошибке j

OfHideReadOnly

Удаляет Из Диалога индикатор Открыть только Для чтения I (выключена на рис. 2.29 а)

OfNoChangeDir

После щелчка пользователя на кнопке OK восстанавли- ∣ вает текущий каталог, независимо от того, какой ката — ∣. лог был открыть при поиске файла ∣

OfNoDereferenceLinlts

Запрещает переназначать клавиши быстрого доступа в диалоговом окне t

OfNoLongNames

Отображаются только не более 8 символов имени и трех символов расширения _______

OfNoNetworkButton.

Убирает из диалогового окна кнопку поиска в сети. Действует только если флаг ofOldStyleDialog включен

OfN OReadOnlyReturn

Если пользователь выбрал файл только для чтения, то генерируется сообщение об ошибке

OfN OTestFileCreate

Запрещает выбор в сети защищенных файлов и не до­ступных дисков при сохранении файла

OfNoValidate

Не позволяет писать в именах файлов неразрешенные символы, но не мешает выбирать файлы с неразрешен­ными символами

OfOldStyleDialog

Создает диалог выбора файла в старом стиле

OfOverwritePrompt

В случае, если при сохранении файла пользователь на­писал имя существующего файла, появляется замеча­ние, что файл с таким именем существует, и запраши­вается желание пользователя переписать существую­щий файл

OfPathMustExist

Генерирует сообщение об ошибке, если пользователь указал в имени файла несуществующий каталог

OfReadOnly

По умолчанию устанавливает индикатор Открыть только для чтения при открытии диалога

OfShareAware

Игнорирует ошибки нарушения условий коллективного доступа и разрешает, несмотря на них, производить выбор файла

OfShowHelp

Отображает в диалоговом окне кнопку Справка (вклю­чена на рис. 2.29 а) j

OfDontAddToRecent

Предотвращает включение файла в списрк недавно от­крывавшихся файлов j

OfShowHxdden

Делает невидимые файлы видимыми в диалоге

По умолчанию все перечисленные опции, кроме OfHideReadOnly , выключены. Но, как видно из их описания, многие из них полезно включить перед вызовом диалогов.

Имеется еще одно свойство — OptionsEx. Это расширенное множество опций, правда, содержащее пока только одну выключенную по умолчанию опцию:

OfExNoPlacesBar

Запрещает отображение панели быстрых кнопок Рабочий стол, Мои документы и др. (включена на рис. 2.29 б и выклю­чена на остальных)

Если вы разрешаете с помощью опции OfAllowMultiSelect Множественный выбор файлов, то список выбранных файлов можно прочитать в свойстве Files Типа TStrings.

Свойства компонентов OpenPictureDialog И SavePictureDialog Ничем не отли­чаются от свойств компонентов и SaveDialog. Единственное отли­

Чие — заданное значение по умолчанию свойства Filter В OpenPictureDialog И SavePictureDialog. В этих компонентах заданы следующие фильтры:

All (*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf)

*.ipg;*.ipeg;*.brop;*.ico;*.emf;*.wmf

JPEG Image File (*.jpg)

*jpg. I

JPEG Image File (*.⅛peg)

*∙jpeg

Bitmaps (*.bmp)

*.bmp

Icons (*.ico)

*.ico

Enhanced Metafiles (*.emf)

*.emf

Metafiles (*.wmf)

*.wmf [I

В этих фильтрах перечислены все типы графических файлов, с которыми мо­жет работать диалог. Так что вам остается удалить, если хотите, фильтры тех фай­лов, с которыми вы не хотите работать, добавить, может быть, фильтр "Все файлы (*. *)" и перевести на русский язык названия типов.

В компонентах диалогов открытия и сохранения файлов предусмотрена воз­можность обработки ряда событий. Такая обработка может потребоваться, если рас­смотренных опций, несмотря на их количество, не хватает, чтобы установить все диктуемые конкретным приложением ограничения на выбор файлов. Событие OnCanClose Возникает при нормальном закрытии пользователем диалогового окна после выбора файла. При отказе пользователя от диалога — нажатии кнопки Отме­на, клавиши Esc и т. д. событие OnCanClose Не наступает. В обработке события OnCanClose Вы можете произвести дополнительные проверки выбранного пользова­телем файла и, если по условиям вашей задачи этот выбор недопустим, вы можете известить об этом пользователя и задать значение False Передаваемому в обработчик параметру CanClose. Это не позволит пользователю закрыть диалоговое окно.

Можно также написать обработчики событий OnFolderChange — изменение каталога, OnSelectionChange — изменение имени файла, OnTypeChange — изме­нение типа файла. В этих обработчиках вы можете предусмотреть какие-то сооб­щения пользователю.

Основные свойства

Свойство

Объявление / Описание ∣

DefaultExt

AnsiString DefaultExt

Определяет заданное по умолчанию расширение файла

1 FileName

AnsiString FileName

Имя выбранного файла

Files

Classes::TStrings* Files

Список выбранных файлов, если пользователю разрешен множе­ственный выбор (включена опция of AllowMultiSelect)

Filter

AnsiString Filter

Определяет маски файла (фильтры), доступные в диалоге 1

FilterIndex

AnsiString InitialDir

Определяет индекс фильтра по умолчанию при открытии диалога

I InitiaIDir

AnsiString InitialDir

Определяет каталог при открытии диалога

I Свойство

Объявление / Описание

Options

Enum TOpenOption {ofReadOnly, OfOverwritePrompt,

OfHideReadOnly, OfNoChangeDir, OfShowHelp, OfNoValidate, OfAllowMultiSelect, OfExtensionDifferent, OfPathMustExist, OfFileMustExist, OfCreatePrompt, OfShareAware,

OfNoReadOnlyReturn, OfNoTestFileCreate, OfNoNetworkButton, OfNoLongNames, OfOldStyleDialog,

OfNoDereferenceLinks, OfEnableIncludeNotify, OfEnableSizing} ; Typedef Set<TOpenOption, ofReadOnly, 0fN0DereferenceLinks>

TOpenOptions;

TOpenOptions Options

Различные опции компонента (см. приведенное выше описание диалогов) ■

OptionsEx

Enum TOpenOptionEx { OfExNoPlacesBar }

Typedef Set<TOpenOptionEx, ofExNoPIacesBar, OfExNoPlacesBar> TOpenOptionsEx;

TOpenOptionsEx OptionsEx

Расширенное множество опций (см. приведенное выше описание диалогов)

Title

AnsiString Title

Заголовок диалогового окна [

Основные методы

Метод

Объявление / Описание

I Execute

Bool Execute(void)

Вызывает диалог, возвращает true, если пользователь произвел выбор в диалоге j

Остальные методы наследуются от классов-предшественников.

Основные события

Событие

Описание

OnCanCIose

Событие наступает при нормальном закрытии пользователем Диа­Логового окна после выбора файла

OnFolder

Change

Событие наступает при изменении пользователем каталога

OnInclude

Item

Событие наступает перед добавлением файла в список

■ OnSelection Change

Событие наступает перед изменением пользователем (любым Спо­Собом) списка отображаемых файлов

I OnType

I Change

Событие наступает перед изменением пользователем фильтра, за­Дающего типы файлов

OnCIose

Событие наступает при закрытии диалога

OnShow

Событие наступает при открытии диалога,

OpenPictureDialog — диалога открытия файла изображения__________

Невизуальный компонент вызова диалога открытия файла изображения.

См. раздел «OpenDialog, OpenPictureDialog, SaveDialog, SavePictureDialog —

Диалоги работы с файлами».

Panel — панель_________________________________________________

Панель — контейнер для группировки других компонентов. Может использо­ваться также как компонент отображения текста.

Страница библиотеки Standard

Класс TPanel

Иерархия TObiectTPersistent— T1Componen T TControl TWinControl TCustomPanel

■ ^lflj×j beveilnneiobvnone, bevelouleι=bvraised. boideistyieobsneneпанель panelМодуль Extctrls Примеры изображения Рис. 2.31

Примеры оформления панелей Panel

Bevellnneι-bvNone. BevelOuteiobvRaised, BoideiStyIeobsSingIe

|Bevellnnei=bvNone, BevelOuteι-bvRaised, BoιderStyle=bsNone j

!____ ,_______________________________ I

BeyeIInneiobvNone. BevelOuteι=bvRaised. BoideiStyIeobsNone

BeveIInneiobvNone. BevelOuteι=bvRaited, BoideiStyIeobsNone

■ . ■ ■ ■ .1 . ……………………… ………………….

Bevellnneι≈bvNone, BevelOuteι=bvRaised, BoideiStyIeobsNone

BeveUnneι=bvNone, BevelOuteι-bvNone. BotdeiStyIeobsNone

Описание

Компонент Panel Представляет собой панель, которая служит контейнером, объединяющим группу управляющих компонентов, компонентов ввода и отобра­жения информации, других, меньших контейнеров. Панель можно использовать также для построения полос состояния и инструментальных панелей.

Свойства BorderStyle, BevelInner, BevelOuter, BevelWidth, BorderWidth Оп­ределяют обрамление бордюр панели, предоставляя богатые возможности ее оформления (см. рис. 2.31). Свойства Aline (выравнивание компонента по всей верхней, левой, правой, нижней частям контейнера или по всей его клиентской об­ласти), Anchors (привязка сторон компонента к сторонам контейнера), Constraints (ограничения допустимых изменений размеров) определяют изменение размеров панели при изменении контейнера, в котором она размещена, например, при изме­нении пользователем размеров окна приложения.

Свойство Caption — текст, отображаемый в панели. Свойство Alignment Опре­деляет выравнивание этого текста.

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

Объединение панелью таких компонентов, как радиокнопок RadioButton, Обеспечивает их функционирование как единой группы: включение одной из та­ких радиокнопок выключает остальные.

Основные свойства

|С йств—————

I Свойство

Объявление / Описание

Align

Enum TAlign {alNone, alTop, alBottom, alLeft, alRight, alClient, alCustom};

TAlign Align

Определяет способ выравнивания компонента в контейнере (ро­дительском компоненте)

Alignment

Enum TAlignment { taLeft Justify, taRight Justify, taCenter }; Classes: :TAlignment Alignment

Определяет способ выравнивания текста внутри компонента — по левому краю, правому краю, центру. Значение по умолча­нию — TaCenter — по центру

____________

Anchors

Enum TAnchorKind { akLeft, akTop, akRight, akBottom }; Typedef Set< TAnchorKind, akLeft, akBottom> TAnchors;

TAnchors Anchors

Определяет привязку данного компонента к родительскому при изменении размеров последнего

! AutoSize

Bool AutoSize

Определяет, будут ли размеры панели автоматически подстраива­ться под размещенные в ней компоненты

J BevelInner

Enum TBevelCut {bvNone, bvLowered, bvRaised, bvSpace}; TBevelCut Bevellnner

Определяет выпуклый, утопленный или плоский вид внутренней части компонента

BevelOuter

Enum TBevelCut {bvNone, bvLowered, bvRaised, bvSpace}; TBevelCut BevelOuter

Определяет выпуклый, утопленный или плоский вид обрамления компонента

BevelWidth

Typedef int TBevelWidth;

TBevelWidth BevelWidth

Определяет ширину обрамления компонента в пикселах

‘ BorderStyle

Enum TFormBorderStyle { bsNone, bsSingle, bsSizeable,

BsDialog, bsToolWindow, bsSizeToolWin };

Typedef TFormBorderStyle TBorderStyle;

FormsaTBorderStyle BorderStyle

Указывает, ограничена ли клиентская область компонента оди­нарной бордюрной линией

Border ■ Width

TBorderWidth BorderWidth

Расстояние в пикселах между наружной и внутренней кромками обрамления

Свойство

Объявление / Описание

Brush

GraphicsoTBrnsh* Brush

Кисть, определяющая заполнение фона,

Caption

AnsiString Caption

Текст, отображаемый в панели

Font

GraphicsoTFont* Font

Определяет атрибуты шрифта

Constraints

TSizeConstraints* Constraints

Позволяет задавать ограничения размера (максимально допусти­мую ширину и высоту) компонента. Во избежание неопределенно — 1 сти нельзя устанавливать ограничения, конфликтующие со свой­ствами Align и Anchors. По умолчанию ограничения отсутствуют

TabOrder

Typedef short TTabOrder;

TTabOrder TabOrder

Указывает позицию компонента в списке табуляции. Определяет порядок переключения фокуса между компонентами окна при нажатии клавиши Tab. Изначально соответствует порядку добав­ления компонентов на форму

; TabStop

Bool TabStop

Определяет возможность доступа пользователя к кнопке с помо­щью клавиши Tab ‘

Основные методы

Никаких специальных методов в панели не объявлено. Методы наследуются от классов-предков TWinControl И TControl.

Основные события

Никаких специальных событий в панели не объявлено. События наследуются От классов-предков TWinControl И TControl.

PopUpMenu — всплывающее контекстное меню_____________________

Невизуальный компонент, позволяет создавать всплывающие контекстные меню, возникающие при нажатии пользователем правой кнопки мыши.

Страница библиотеки Standard

Класс TPopupMenu

Иерархия TObiect TPersistent TComponent TMenu

Модуль Menus

Описание

Компонент PopupMenu Определяет всплывающее контекстное меню, появ­ляющееся на экране при щелчке пользователя правой кнопкой мыши в поле ком­понента, который связан с данным меню своим свойством PopupMenu.

Проектирование меню производится с помощью конструктора меню точно так же, как описано для компонента главного меню MainMenu (см. соответствующий раздел). Обратите только внимание на возможность упрощения этой работы. По­скольку разделы контекстного меню обычно повторяют некоторые разделы уже сформированного главного меню, то можно обойтись копированием соответствую­щих разделов. Для этого, войдя в конструктор меню из компонента PopupMenu, Щелкните правой кнопкой мыши и из всплывшего меню выберите команду Select

Menu (выбрать меню). Вам будет предложено диалоговое окно, в котором вы може­те перейти в главное меню. В нем вы можете выделить нужный вам раздел или разделы (при нажатой клавише Shift выделяются разделы в заданном диапазоне, при нажатой клавише Ctrl можно выделить совокупность разделов, не являющихся соседними). Затем выполните копирование их в буфер обмена, нажав клавиши Ctrl-C. После этого опять щелкните правой кнопкой мыши, выберите команду Select Menu и вернитесь в контекстное меню. Укажите курсором место, в которое хотите вставить скопированные разделы, и нажмите клавиши чтения из буфера обмена — Ctrl-V. Разделы меню вместе со всеми их свойствами будут скопированы в создавае­мое вами контекстное меню.

В остальном работа с PopiipMenii не отличается от работы С MainMenu. Толь­ко не возникает вопросов объединения меню разных форм: контекстные меню не объединяются.

Основные свойства

Свойство

Объявление / Описание

Alignment

Enum TPopupAlignment { paLeft, paRight, paCenter }; TPopupAIignment Alignment

Определяет, какая точка меню появится под курсором мыши: PaLeft — левый верхний угол, PaRight — правый верхний угол, PaCenter — центр. Значение по умолчанию — PaLeft

AutoHotKeys

Enum TMenuItemAutoFlag { maAutomatic, maManual, maParent };

Typedef TMenuItemAutoFlag TMenuAutoFlag;

TMenuAutoFlag AutoHotkeys

Определяет, могут ли «горячие» клавиши элементов меню устанавливаться автоматически

: AutoLine! Reduction

Bool AutoLineReduction

Указывает, проверяет ли и исправляет ли C++Builder появле­ние в начале или конце подменю разделителей или двух раз­делителей подряд

AutoPopup

Bool AutoPopup

Определяет автоматическое появление меню при щелчке пра­вой кнопки мыши или определенной в Windows комбинации клавиш. Если AutoPopup Равно False, То для отображения меню надо использовать метод Popup

HelpContext

Typedef int THelpContext;

ClassesnTHelpContext HelpContext

Определяет идентификатор контекстной справки, связанной со всем меню в целом. Для задания контекстной справки от­дельным разделам меню надо использовать свойство HelpCon — text Объектов разделов TMenuItem

I Images

ImglistnTCustomImageList* Images

Определяет список изображений, которые могут отображать­ся в разделах меню слева от надписи. Изображения конкрет­ных разделов указываются свойством ImageIndex (индексом массива Images) разделов меню Items Типа TMenuItem

∙, Items

TMenuItem* Items

Список элементов (разделов) меню типа TMenuItem

Свойство

Объявление / Описание

MenuAnimation

Enum TMenuAnimations {maLeftToRight, maRightToLeft,

MaTopToBottom, maBottomToTop, MaNone};

Typedef Set<TMenuAnimations, maLeftToRight,

MaBottomToTop> TMenuAnimation;

TMenuAnimation MenuAnimation

Определяет способ появления меню на экране (только начи­ная с Windows 98 и NT 5.0): постепенное появление слева на­право (maLeftToRight), справа налево (maRightToLeft), сверху вниз (maTopToBottom), снизу вверх (maBottomToTop) или мгновенное появление (maNone)

Popup

Component

Classes::TComponent* PopupComponent

Определяет компонент, который последним вызвал данное меню. Используется в меню, с которым связано несколько компонентов, чтобы определить, из какого именно компонен­та поступил вызов

PopupPoint

TPoint* PopupPoint

Защищенное свойство. Указывает место появления всплываю­щего меню. Значение свойства устанавливается методом Popup

TrackButton

Enum TTrackButton { tbRightButton, tb LeftButton ); TTrackButton TrackButton

Указывает, какая кнопка мыши активизирует всплывающее меню, если оно связано С кнопкой панели инструментов

Основные методы

Метод

Объявление / Описание

DoPopup

Void DoPopup(TObject* Sender)

Генерирует событие OnPopup

FindItem

Enum TFindItemKind {fkCommand, fkHandle, fkShortCut}; TMenuItem* Findltem(int Value, TFindltemKind Kind)

Ищет и возвращает раздел меню, индентифицируемый значе­нием Value, которое равно: при Kind = fkCommand — иден­тификатору ID, используемому в сообщении Windows WM_COMMAND; при Kind = fkHandle — дескриптору всплывающего меню; при Kind = fkShortCut — коду «горя­чих» клавиш

Popup

Void Popupfint X, int Y)

Отображает всплывающее меню в указанной позиции экрана

События

Событие

Описание I

OnChange

Наступает при изменении меню

OnPopup

Событие происходит непосредственно перед появлением

Всплывающего меню I

При работе с меню основные события связаны не с самим объектом меню, а с объектами его разделов типа TMenuItem, Из которых главное — OnClick. Насту­пающее при щелчке на разделе или при нажатии «горячих» клавиш или клавиш

Быстрого доступа.

Query — набор данных, использующий SQL________________________

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

Страница библиотеки BDE, до C++Builder 6 — Data Access

Класс TQuery

Иерархия TObieCt — TPersistent — TComponentTDataSet — TBDEDataSetTDBDataSet

Модуль Dbtables

Описание

Компонент Query Может во многих случаях включаться в приложения вместо Table. Преимущества Query По сравнению с Table:

• Возможность формирования набора данных из полей нескольких таблиц базы

Данных

• Формирование запросов на языке SQL, что обеспечивает большую гибкость,

Чем в Table

• При работе в сети с удаленным сервером (Sybase, SQL Server, Oracle, Informix,

DB2, InterBase)

Query более эффективен, поскольку Table Создает на компьютере пользовате­ля временную копию серверной базы данных, что требует больших ресурсов и су­щественно загружает сеть. Query Размещает на компьютере пользователя только

Результат запроса.

Основное свойство компонента Query SQL, Имеющее тип TStrings. Это спи­сок строк, содержащих запросы SQL (справочные данные по SQL даны в [1]). В процессе проектирования приложения обычно необходимо сформировать в этом свойстве некоторый предварительный запрос SQL, который показал бы, с какой таблицей или таблицами будет проводиться работа. Но далее во время выполнения приложения свойство SQL может формироваться программно методами, обычны­ми для класса TStrings: Clear — очистка, Add — добавление строки и т. д.

Большинство свойств, методов и событий Query Наследует от классов-предше­ственников, сведения о которых приводятся в гл. 1.

Для связи Query С необходимой базой данных служит свойство Database — Name. В выпадающем списке этого свойства в Инспекторе Объектов вы можете ви­деть все доступные BDE псевдонимы баз данных и выбрать необходимый вам.

После того как указана база данных, можно устанавливать значение свойства SQL, содержащее запрос. Этот запрос обычно содержит оператор Select Со списком всех полей таблиц и необходим для настройки компонента. В дальнейшем он мо­жет изменяться во время выполнения.

Соединение с выбранной таблицей базы данных осуществляется свойством Active. По умолчанию оно равно False. Если установить его в True Во время проек­тирования или программно во время выполнения, то компонент соединится с ба­зой данных.

Объекты полей, экспонируемых компонентом Query, Могут создаваться авто­матически. Но тогда их характеристики (надписи, число отводимых под них сим­волов и т. п.) будут приняты по умолчанию и вряд ли устроят пользователя. Можно создавать и редактировать объесты полей с помощью специального Редактора По­лей. Вызвать его проще всего двойным щелчком на компоненте Query. См. о рабо­те с Редактором Полей в описании компонента Table.

Имеется множество свойств, методов и событий как объектов полей — наслед­ников TField. Так и базовых классов наборов данных, которым наследует Query: TDataSet. TBDEDataSet. TDBDataSet. Описание базовых классов вы найдете в гл. 1, а подробные описания свойств, методов, событий — в гл. 3, 4, 5. Но деталь­ное рассмотрение методики работы с базами данных далеко выходит за рамки этой книги. Вы можете найти эту методику в [1].

Основные свойства

Свойство

Объявление / Описание

Active

Bool Active

Определяет, открыта база данных, или нет

Constrained

Bool Constrained

Указывает совместимость ограничений в предложении

SELECT с операциями редактирования и вставки записей в таблицах Paradox и dBASE i

Constraints

TCheckConstraints* Constraints

Ограничения на допустимые значения параметров на уровне

Записи

Database

TDatabase Database

Указатель на связанный с базой данных компонент Database. Обеспечивает доступ к его свойствам и методам. Автоматиче­ски устанавливается при открытии базы данных, указанной свойством DatabaseName

DatabaseName

AnsiString DatabaseName

Определяет имя базы данных, связанной с набором данных

DataSource

DbuTDataSource* DataSource

Указывает компонент DataSource. Относящийся к другой, го­ловной таблице, из которой берется значение ключа, которому должны соответствовать записи данной таблицы

Local

Bool Local

Определяет, относится ли запрос к локальным таблицам Para­dox и dBASE, или к таблицам SQL и удаленного сервера. Уста­навливается автоматически при вызове Prepare

ParamCheck

Bool ParamCheck

Определяет, должно ли свойство Params автоматически обнов­ляться при изменении запроса в свойстве SQL во время выпол­нения

ParamCount

Word ParamCount

Число параметров в свойстве Params

Params

TParams* Params

Массив параметров запроса, содержащегося в SQL

Prepared

______________

Bool Prepared

Определяет, подготовлен ли запрос к выполнению. Установка в true вызывает метод Prepare, установка в false — Unprepa — ге. Но лучше вызывать Prepare и Unprepare Непосредственно

Свойство

Объявление / Описание

RequestLive

Bool RequestLive

Позволяет попытаться возвращать результат запроса как «жи­вой» набор данных, вместо таблицы только для чтения

RowsAffected

Int RowsAffected

Взращает число обновленных или удаленных записей в резуль­тате последнего запроса. Возвращает — 1, если запрос не уда­лось выполнить

‘sql

Classes::TStrrngs SQL

Основное свойство компонента, содержащее запрос SQL

SQLBinary

Char * SQLBinary

Используется внутри класса для указания на двоичный поток запроса SQL или результата запроса

StmtHandle

Bde::hDBIStmt StmtHandle

Идентификатор прямого запроса к Borland Database Engine (BDE)

Text

AnsiString Text

Текст запроса SQL, передаваемый в Borland Database Engine (BDE)

I^jniDirectional

Bool UniDirectional

Определяет доступность двунаправленного курсора Borland Da­tabase Engine (BDE)

Компонент наследует также много свойств классов TDataSet. TBDEDataSet. TDBDataSet.

Основные методы

I 1 , ,

; Метод

Объявление / Описание

Append

Void Append(void)

Добавляет новую пустую запись в конец набора данных

AppendRecord

Void AppendRecord(const System:: TVarRec * Values, const int Values_Size)

Добавляет в набор данных новую запись, заполняет ее и пере­сылает в базу данных

ApplvUpdates

Void ApplyUpdates(void)

Записывает кэшированные изменения в базу данных

Cancel

Void Cancel(void)

Отменяет результаты редактирования

CancelUDdates

Void CancelUpdates(Void)

Отменяет все кэшированные изменения и восстанавливает ис­ходное состояние набора данных

I Close

Void Close(void)

Закрывает набор данных

CloseDatabase

Void CIoseDatabase(TDatabase* Database)

Закрывает соединение с базой данных Database

Метод

Объявление / Описание

Commit

Updates

Void CommitUpdates(void)

Очищает буфер кэшированных изменений

Delete

Void Delete(void)

Удаляет активную запись и позиционирует курсор на следую­щую запись

Edit

Void Edit(void)

Переводит набор данных в режим редактирования

ExecSQL

Void ExecSQL(void)

Выполняет запрос, не связанный с SELECT (запросы INSERT, UPDATE, DELETE, CREATE TABLE). Для запроса SELECT используется метод Open

Fiel dBvName

TField* FieldByName(const AnsiString FieldName)

Находит поле по его имени FieldName. При неверном имени генерирует исключение

FindField

TField* FindField(const AnsiString FieldName)

Находит поле по его имени. При неверном имени возвращает

Nil

FindFirst

Bool FindFirst(void)

Перемещает курсор к первой записи и возвращает True В слу­чае успеха

FindLast

Bool FindLast(void)

Перемещает κypcop∙κ последней записи и возвращает True В случае успеха

FindNext

Bool FindNext(void)

Перемещает курсор к следующей записи и возвращает true в случае успеха

-FindPrior

Bool FindPrior(void)

Перемещает курсор к предыдущей записи и возвращает True В случае успеха

First

Void First(void)

Перемещает курсор к первой записи

GetFieldNames

Void GetFieldNamestciassesaTStrings* List)

Выдает список имен всех полей набора данных

Insert

HIDESBASE void Insert(void)

Вставляет новую пустую запись в набор данных

InsertRecord

Void InsertRecord(const SystemaTVarRec * Values, const int Values_Size)

Вставляет новую заполненную запись в набор данных

I Last

Void Last(void)

Перемещает курсор к последней записи

Метод

Объявление / Описание

Locate

Bool Locate(const AnsiString KevFields,

Const SystemaVariant &KeyValues,

TLocateOptions Options)

Осуществляет поиск записи в наборе данных

Lookup

SystemnVariant Lookup(const AnsiString KeyFields, const Variant &КеуValues, Const AnsiString ResultFields)

Осуществляет поиск записи в наборе данных и возвращает значения указанных полей этой записи

MoveBy

Int MoveBy(int Distance)

Перемещает курсор на заданное число записей

Next

Void Next(void)

Перемещает курсор к следующей записи

Open

Void Open(void)

Открывает соединение с базой данных и выполняет запрос SELECT, содержащийся в свойстве SQL. Для запросов иных типов используется метод ExecSQL

∣∣ OpenDatabase

TDatabase* OpenDatabase(void)

Открывает базу данных

ParamByN ame

TParam* ParamByName(const AnsiString Value)

Возвращает объект параметра запроса с указанным именем

Post

Void Post(void)

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

Prepare

Void Prepare(void)

Подготавливает BDE и удаленный сервер к выполнению за­проса. Подготовка ускоряет последующую обработку запроса

Prior

Void Prior(void)

Перемещает курсор к предыдущей записи

! RevertRecord

Void RevertRecord(void)

Отменяет исправления текущей записи

UnPrepare

Void UnPrepare(void)

Освобождает ресурсы, выделенные ранее при выполнении Pre­pare для подготовки к выполнению запроса

Основные события

I Событие

Описание j

I OnUpdateError

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

OnUpdateRecord

I________________

Наступает При Пересылке кэшированной записи в базу Дан­ных

Кроме того, наследуется множество событий класса TDataSet

RadioButton — радиокнопка

Радиокнопка — компонент, используемый в совокупности с другими радио­кнопками для выбора одной из взаимоисключающих альтернатив.

Страница библиотеки Standard Класс TRadioButton

Иерархия TObied TPersisten ι TCmnponeni TWinControl TButtonControl

Модуль Stdctrls Пример изображения

радиокнопки radioeutttподразделе»»’— 
c администрация о бухгалтерия
,' uex 1 r∙ цех 2. г цех 3
Рис. 2.32

Пример радиокнопок RadioButton

IaLefUushfy fi Г IaRjghUustify

Описание

Компонент RadioButton Используется, как правило, в группе других радио­кнопок для выбора одной из взаимоисключающих альтернатив. Из кнопок, объе­диненных в группу, включена может быть только одна. При включении одной кнопки группы остальные кнопки автоматически выключаются. Объединение ра­диокнопок в группу осуществляется обычно панелями: GroupBox (см. верхнюю часть рис. 2.23), Panel И др. Радиокнопки, размещенные непосредственно на фор­ме (внизу на рис. 2.32), тоже образуют группу. Имеется также компонент группы радиокнопок RadioGroup. В который не надо переносить кнопки — они присутст­вуют там изначально и располагаются регулярными рядами. Отдельные компонен­ты RadioButton, Объединенные контейнерами, имеет смысл использовать только при необходимости нерегулярного размещения кнопок (сравните рис. 2.32 с анало­гичной группой радиокнопок, показанной в описании компонента RadioGroup).

Свойство Caption Компонента RadioButton Содержит надпись, появляющуюся около кнопки. Как и в других кнопках, надпись может содержать символ ампер­санда вызывающий подчеркивание следующего символа, соответствующего

Клавише быстрого доступа (см. на рис. 2.32 верхнюю группу радиокнопок). Значе­ние свойства Alignment Определяет, с какой стороны от кнопки появится надпись (см. нижние радиокнопки на рис. 2.32): TaLeftJustify — слева, TaRightJustify — справа (это значение принято по умолчанию). Свойство Checked Определяет, вы­брана ли данная кнопка пользователем, или нет. Поскольку в начале выполнения приложения обычно надо, чтобы одна из кнопок группы была выбрана по умолча­нию, ее свойство Checked Надо установить в True В процессе проектирования.

Основные свойства

Свойство

Объявление / Описание

Action

ClassesnTBasicAction* Action

Определяет действие, связанное с данной кнопкой

Свойство

Объявление / Описание

Alignment

Enum TAlignment { TaLeft Justify, taRight Justify, TaCenter }; typedef TAlignment TLeftRight;

Classes: :TLeftRight Alignment

Определяет положение надписи (справа или слева), относящейся к радиокнопке

Caption

AnsiString Caption

Property Caption: TCaption;

Надпись на кнопке

Checked

Bool Checked

Указывает, выбрана ли радиокнопка

TabOrder

Typedef short TTabOrder;

TTabOrder TabOrder

Указывает позицию компонента в списке табуляции. Определяет порядок переключения фокуса между компонентами окна при нажатии клавиши Tab. Изначально соответствует порядку добав­ления компонентов на форму

TabStop

Bool TabStop

Определяет возможность доступа пользователя к кнопке с помо­щью клавиши Tab

Основные методы

Метод

Объявление / Описание

ExecuteAction

Bool ExecuteAction(TBasicAction* Action)

Вызывает указанное действие Action, Связанное с данной кнопкой

Hide

Void Hide(void)

Делает кнопку невидимой

SetFocus

Void SetFocus(Void)

Передает фокус элементу, активизирует его

Show

——— — —————————————————————— —

Void SetFocus(void)

Делает видимой невидимую кнопку

Основные события

Событие

Описание

OnClick

Наступает при щелчке на компоненте. В обработчике этого события можно анализировать свойств Checked, которое уже приняло новое значение

OnContextPopup

Наступает при вызове пользователем контекстного меню, связанного с компонентом (щелчком правой кнопкой мыши или иным способом)

RadioGroup — группа радиокнопок

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

Страница библиотеки Standard Класс TRadioGroup

Иерархия TObiect -TPersistent TComponent TContГоI-

TWincontro T— TCustomContro T— TcustomGroupBox — TcustomRadioGroup

Модуль Extctrls Примеры изображения Рис. 2.33

Примеры групп радиокнопок RadioGroup

Описание

Компонент RadioGroup — это панель, которая содержит радиокнопки, регу­лярно расположенные столбцами и строками. Из радиокнопок группы может быть включена только одна. При включении какой-то кнопки все остальные выключа­ются. Надпись в левом верхнем углу панели определяется свойством Caption. Над­писи кнопок и их количество определяются свойством Items, Имеющим тип TStrings. Во время проектирования задание свойства Items Осуществляется вызы­ваемым из Инспектора Объектов редактором списков строк. Сколько строчек вы запишете в нем, столько и будет кнопок. Во время выполнения формировать спи­сок Items можно, используя методы и свойства класса TStrings. Как и в других управляющих компонентах (см., например, Button), Надпись каждой кнопки мо­жет содержать символ амперсанда "&", вызывающий подчеркивание следующего символа, соответствующего клавише быстрого доступа. На рис. 2.33 вы можете это видеть в нижней граппе радиокнопок.

Кнопки можно разместить в несколько столбцов (не более 17), задав свойство Columns. По умолчанию Columns = 1, т. е. кнопки размещаются друг под другом. На рис. 2.33 в левой верхней группе Columns = 1, в остальных — Columns = 2.

Определить, какую из кнопок выбрал пользователь, можно по свойству ItemIndex, Которое показывает индекс выбранной кнопки (начинаются с 0). По умолчанию Itemlndex = -1, что означает отсутствие выбранной кнопки. Если вы хотите, чтобы в момент начала выполнения приложения какая-то из кнопок была выбрана (это практически всегда необходимо), то надо установить соответствую­щее значение Itemlndex Во время проектирования. Если вы используете радио­кнопки не для ввода, а для отображения данных, устанавливать значение Item — Index Можно программно во время выполнения приложения.

Определенным недостатком RadioGroup Является регулярное расположение кнопок, причем при расположении их в несколько столбцов расстояния между столбцами ориенируются на наиболее длинную надпись кнопки. Поэтому в ряде случаев (см. нижнюю группу на рис. 2.33) размещение кнопок получается неком­пактным и некрасивым (сравните с аналогичной группой радиокнопок, показан­ной в описании компонента RadioButton). При необходимости нерегулярного рас­положения кнопок надо использовать компоненты RadioButton И GroupBox.

Основные свойства

Свойство

Объявление / Описание

Caption

AnsiString Caption

Надпись в левом верхнем углу панели кнопке

Columns

Int Columns

Определяет количество столбцов кнопок в радиогруппе

__________

ItemIndex

Int Itemlndex

Указывает, какая из радиокнопок выбрана в данный момент

Items

Classes: :TStrings* Items

Список радиокнопок группы

Основные методы

Никаких специальных методов в компоненте не объявлено. Методы наследу­ются от TWinContГо! и TControl.

События

Событие

Описание

OnClick

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

Itemlndex

Остальные события наследуются от TWinControl и TControl.

RichEdit — многострочное окно редактирования

В обогащенном формате___________________________________________________

Многострочное окно редактирования текстов в обогащенном формате. rtf, по­зволяющее производить выбор цвета, шрифта, поиск текста и т. д.

Страница библиотеки Win32 Класс TRichEdit

Иерархия TObiect TPersistent — TComponent TControl

TWinControl TCusTomEdit TCustomMemo TCustomRichEdit

Модуль Stdctrls Пример изображения

рис. 2.34
текстовый редактор на основе richedit
текстовый редактор rnhtdit,3>айл qpaera Φop(jβτ,|г.’,jtiql×l,d∣a⅜∣hj #111 ⅝∣¾lfr] mjuj a] f⅛ ⅝∣⅞jj≡,это,введенныи в компонент
richedit
в первом абзаце:
• se∕attributes->size= 12
• paragraρh->atignment÷ taɛenter
в слове richedit semtinbuies-zstyfe= [fsbold]
в строках а и 5 pefegzapa-jmsmbebng^nsbuuel

1: 10 iM0⅛tφ. PMieicpwoeaHwrsrcTS

Описание

Компонент RichEdit Представляет собой средство редактирования текстов, по­зволяющее работать с обогащенным форматом .rtf, Т. е. выбирать различные атри­буты форматирования для разных фрагментов текста. В этом основное отличие RichEdit от более простого компонента Memo, В котором атрибуты форматирова­ния одинаковы для всего текста.

Окно редактирования снабжено многими функциями, свойственными боль­шинству редакторов. Например, в нем предусмотрены типичные комбинации «го­рячих» клавиш: — копирование выделенного текста в буфер обмена Clip­

Board (команда Copy), Orl-X — вырезание выделенного текста в буфер Clipboard (ко­манда Cut), — вставка текста из буфера Clipboard в позицию курсора (коман­

Да Paste), Ctrl-Z — отмена последней команды редактирования.

Свойство Lines, Доступное как во время проектирования, так и во время вы­полнения, имеет множество свойств и методов типа TStrings, Которые обычно ис­пользуются для формирования и редактирования текста (см. в гл. 1). Весь текст содержится в свойстве Text. Имеются также свойства только времени выполнения SelLength, SelStart, SelText, Определяющие соответственно длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст. Если выделенного текста нет, то свойство SelStart Просто определяет теку­щее положение курсора.

При желании изменить атрибуты вновь вводимого фрагмента текста вы може­те задать свойство SeIAttributes. Это свойство типа TTextAttributes, которое в свою очередь имеет подсвойства: Color (цвет), Name (имя шрифта), Size (размер), Style (стиль) и ряд других. Объекты SelAttributes И Font Совместимы по типу. Так что значения объектов этих типов можно присваивать друг другу. Например, если приложение имеет компонент RichEdit И диалог выбора шрифта FontDialogl, То следующий код позволит пользователю менять атрибуты вновь вводимого или вы­деленного текста:

FontDialogl->Font->Assign(RichEditl->SelAttributes); if (FontDialogl->Execute())

RichEditl->SelAttributes->Assign(FontDialogl->Font);

Первый оператор заносит атрибуты, соответствующие текущей позиции кур­сора, как начальные значения в диалог выбора шрифта. А второй оператор заносит указанные пользователем атрибуты в свойство SelAttributes Окна RichEditL

В компоненте имеется также свойство Def Attributes, Содержащее атрибуты по умолчанию. Эти атрибуты действуют до того момента, когда изменяются атрибуты в свойстве SelAttributes. Но значения атрибутов в Def Attributes Сохраняются и в любой момент эти значения могут быть методом Assign Присвоены атрибутам свойства SelAttributes, Чтобы вернуться к прежнему стилю.

За выравнивание, отступы и т. д. в пределах текущего абзаца отвечает свойст­во Paragraph Типа TParaAttributes. Этот тип в свою очередь имеет ряд свойств:

1 Alignment

Определяет выравнивание текста

FirstIndent

Число пикселов отступа красной строки

Numbering

Управляет вставкой маркеров, как в списках

T LeftIndent

Отступ в пикселах от левого поля

RightIndent

Отступ в пикселах от правого поля

‘ TabCount

Количество позиций табуляции

∣Tab ~

Значения позиций табуляции в пикселах _

Значения подсвойств свойства Paragraph Можно задавать только в процессе выполнения приложения, например, в событии создания формы или при нажатии какой-нибудь кнопки. Значения подсвойств свойства Paragraph Относятся к тому абзацу, в котором находится курсор. Например, каждый из следующих операторов осуществит соответственное выравнивание текущего абзаца:

RichEditl-AParagraph-AAiignment = taLeftJustify; // Влево

RichEditl-AParagraph-AAlignment = taCenter; // По центру

RichEditl-AParagraph-AAlignment = taRightJustify; // Вправо

Следующий оператор приведет к тому, что текущий абзац будет отображаться как список, т. е. с маркерами (см. рис. 2.34):

RichEditl-AParagraph-ANumbering = nsBullet;

Уничтожение списка в текущем абзаце осуществляется оператором

RichEditl->Paragraph->Numbering = nsNone;

Свойство Modified, Доступное только во время выполнения, показывает, про­водилось ли редактирование текста в окне. Если вы хотите использовать это свой­ство, то в момент начала работы пользователя с текстом Modified Надо установить в False. Тогда при последующем обращении к этому свойству можно по его значе­нию (true или false) установить, было или не было произведено редактирование.

Свойство WortiWrap, равное True, Указывает на допустимость переноса длин­ных строк. Установка свойства ReadOnIy В True Задает текст только для чтения. Свойство MaxLength Определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. Свойства WantReturns И WantTab Определяют допустимость ввода пользователем в текст символов перевода строки и табуляции.

Свойство ScrollBars Определяет наличие полос прокрутки текста в окне. По умолчанию ScrollBars = SsNone, Что означает их отсутствие. Пользователь может в этом случае перемещаться по тексту только с помощью курсора. Можно задать свойству ScrollBars Значения SsHorizontal, SsVertical Или SsBoth, Что будет соответ­ственно означать наличие горизонтальной, вертикальной или обеих полос прокрутки.

Свойство CaretPos Указывает на запись, поле X которой содержит индекс сим­вола в строке, перед которым расположен курсор, а поле Y — индекс строки, в ко­торой находится курсор. Таким образом, учитывая, что индексы начинаются с О, значения Meniol-CaretPos. Y+1 И Mcmol-CaretPos. Х+1 определяют соответствен­но номер строки и символа в ней, перед которым расположен курсор. В редакторе на приведенном выше рисунке именно эти значения использованы, чтобы отобра­жать в строке состояния StatusBar Позицию курсора.

Свойства Align И Anchors Позволяют адаптировать размер окна RichEdit К размеру окна приложения, выбранного пользователем.

Основные свойства

Свойство

Объявление / Описание

Align

Enum TAlign {alNone, alTop, alBottom, alLeft, alRight, alCIient, alCustom};

TAlign Align

Определяет способ выравнивания компонента в контейнере (ро­дительском компоненте)

Alignment

Enum TAlignment { t, aLeft Justify, taRight Justify, taCenter }; ClassesaTAlignment Alignment

Управляет выравниванием текста: TaLeftJustify — влево, Ta­RightJustify Вправо, TaCenter По центру. Значение по умолчанию — влево

Свойство

Объявление / Описание

Anchors

Enum TAnchorKind { akLeft, akTop, akRight, AkBottom } ; Typedef Set<T Anchor Kind, akLeft, akBottom> TAnchors; TAnchors Anchors

Определяет привязку данного компонента к родительскому при изменении размеров последнего

CanUndo

Bool CanUndo

Указывает, содержит ли компонент изменения, которые можно отменить. Доступ только для чтения

CaretPos

TPoint CaretPos

Указывает строку и символ расположения курсора (см. в приве­денном ранее описании компонента). Доступ только для чтения

_____________

DefAttributes

TTextAttributes* DefAttributes

Атрибуты форматирования, используемые по умолчанию

Default

Converter

Class PACKAGE TMetaClass; typedef TMetaClass* TClass;

TMetaClass* DefaultConverter

Определяет класс объекта TConversion, который используется для преобразования исходного формата файла во внутренний формат компонента при работе с файлами, не имеющими заре­гистрированного расширения

Font

GraphicsnTFont* Font

Определяет атрибуты шрифта

HideScroll

Bars

Bool HideScrollBars

Определяет, должны ли полосы прокрутки делаться невидимы­ми, когда в них нет необходимости, т. е. когда весь текст и без них виден в окне (по умолчанию true)

HideSelection

Bool HideSelection

Определяет, сохраняется ли выделение текста видимым при пе­реходе фокуса к другому компоненту

Lines

ClassesnTStrings* Lines

Строки текста — объект типа TStrings

MaxLength

Int MaxLength

Указывает максимальное количество символов, которое пользо­ватель может вводить в компонент. При значении 0 длина тек­ста неограничена

Modified

Bool Modified

Указывает, редактировался ли пользователем текст в компоненте

PageRect

Property PageRect: TRect;

Определяет в твипсах (твипс — 1/20 пункта, пункт — 1/72 дюй­ма) размеры логической страницы при печати содержимого ком­понента.

, Paragraph

TParaAttributes* Paragraph

Объект, определяющий форматирование текущего абзаца

Свойство

Объявление / Описание 1

PlainText

Bool PlainText

При обмене с файлом определяет, является ли текст простым, или соответствует формату. rtf

I PopupMenu

MeniisnTPopupMenu* PopupMenu

Определяет всплывающее меню, связанное с данным компонен — j том I

Readonly

Bool ReadOnly

Указывает, может ли пользователь изменять текст в компоненте

SelAttributes

TTextAttributes* SelAttributes

Описывает характеристики выделенного текста

SelLength

Int SelLength

Определяет количество выделенных символов в тексте

SelStart

Int SelStart

Указывает позицию первого выделенного символа в тексте или, если выделения нет, то позицию курсора

SelText

AnsiString SelText

Текст, выделенный в окне

Text

AnsiString Text

Текст окна в виде одной строки

WantReturns

Bool WantReturns

Указывает, можно ли вставить в текст символы возврата каретки

WantTabs

Bool WantTabs

Указывает, можно ли вставить в текст символы табуляции

WordWrap

Bool Wordwrap

Указывает, переносится ли текст на новую строку, если он пре­вышает ширину компонента

Основные методы

Метод

Объявление / Описание

Clear

Void Clear(void)

Удаляет текст из окна

Clear

Void ClearSelection(Void)

Selection

Удаляет текст, выделенный в окне

ClearUndo

Void ClearUndo(Void)

Очищает буфер отмены команд редактирования, так что ника­кие изменения в тексте после этого не могут быть отменены

СоруТо

VoidCopyToClipboard(void)

Clipboard

Копирует выделенный текст в компоненте редактирования в Clipboard в формате CFTEXT

Метод

Объявление / Описание

CutTo

Clipboard

Void CutToClipboard(Void)

Переносит выделенный текст в Clipboard В формате CF_TEXT И уничтожает его в окне

FindText

Enum TSearchType { StWholeWord, StMatchCase };

Typedef Set<TSearchType, StWholeWord, stMatchCase> TSearchTypes;

Int FindTeXt(const AnsiString SearchStr, int StartPos, int Length, TSearchTypes Options)

Ищет в тексте заданный фрагмент SearchStr, Начиная с пози­ции StartPos На протяжении Length Символов. Может искать фрагмент как целое слово (опция StWholeWord) И с учетом (оп­ция StMatchCase) Или без учета регистра

PasteFrom

Clipboard

Void PasteFromClipboard(Void)

Переносит в окно в позицию SelStart Текст из буфера Clipboard

Perform

Int Perform(unsigned Msg, int WParam, int LParam)

Передает окну сообщение Windows Msg С параметрами WParam И LParam

Print

Void Print(const AnsiString Caption)

Форматирует и печатает текст компонента с заголовком Caption

SelectAll

Void SelectAll(Void)

Выделяет весь текст в окне редактирования

Undo

Void Undo(void)

Отменяет все изменения, хранившиеся в буфере отмены резуль­татов редактирования с момента последнего вызова ClearUndo

Основные события

Событие

Описание

OnChange

Наступает, когда текст в окне может быть изменился. Свойство Modified показывает, действительно ли произош­ло изменение

OnKeyDown

Событие наступает при нажатии пользователем любой кла­виши. В обработчике можно распознать нажатую клавишу

OnKeyPress

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

OnKevUp

Событие наступает при отпускании пользователем любой клавиши. В обработчике можно распознать отпускаемую клавишу

OnProtectChange

Событие происходит при попытке пользователя изменить текст, маркированный как защищенный

OnResizeRequest

Событие происходит, когда текст становится либо меньше, либо больше размеров окна компонентов

1 Событие

Описание

OnSaveClipboard

Событие происходит при намерении ликвидировать окно компонента в условиях, когда компонент копирует текст в Clipboard

I OnSelectionChange

Событие происходит при изменении выделенного текста

SaveDialog —_ диалог сохранения файла__________________________

Невизуальный компонент вызова диалога сохранения файла.

См. раздел «OpenDialog, OpenPictureDialog, SaveDialog, SavePictureDialog — Диалоги работы с файлами».

SavePictureDialog — диалог сохранения файла изображения_________

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

См. раздел «OpenDialog, OpenPictureDialog, SaveDialog, SavePictureDialog — Диалоги работы с

Session Сеанс Связи с базами данных_____________________________

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

Страница библиотеки Data Access

Класс TSession

Иерархия TO⅜ ⅛С TTPersistentTComponent

Модуль Dbtables

Описание

Компонент Session Осуществляют общее управление связыванием приложе­ния с базами данных. Обычно пользователю не приходится заботиться о компонен­те Session, поскольку C++Builder автоматически генерирует объект Session В каж­дом приложении, работающем с базами данных. На этот объект можно ссылаться через глобальную переменную Session.

Компонент Session Имеет много полезных методов и позволяет легко работать с BDE. Например, метод Get AiiasNames Позволяет получить список всех псевдо­нимов баз данных, зарегистрированных в BDE. Так что оператор

Session->GetAliasNames(ComboBoxl->Items);

Заполнит выпадающий список ComboBoxl перечнем псевдонимов баз данных, за­регистрированных в BDE. Пользователь может затем выбрать любую базу данных из этого списка. В списке ComboBoxl Можно включить в обработчик события OnC — Hange Оператор

Session->GetTableNames(ComboBoxl->Text,, true, false,

ComboBox2->Items) ;

Тогда при выборе пользователем базы данных в списке ComboBoxl Список ComboBox2 Загрузится перечнем таблиц базы данных, выбранной в ComboBoxl. Это делается методом GetTableNames. В результате пользователь сможет, произ­водя соответствующий выбор в ComboBoxl И ComboBox2, Соединяться с любой таблицей любой базы данных.

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

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

При явном вводе компонента Session в приложение следует установить его свойство SessionName — имя сеанса сетевого соединения, задав в нем произволь­ный идентификатор. После этого в выпадающих списках свойств SessionName компонентов типа Database, Table, Query и т. п. появится введенное вами имя. Вы­бор соответствующего имени сеанса сетевого соединения из этих списков свяжет эти компоненты с соответствующим компонентом Session.

Основные свойства

Свойство

Объявление / Описание

Active

Bool Active

Определяет, активен сеанс сетевого соединения, или нет

I AutoSession

Name

Bool AutoSessionName

Указывает, является ли компонент автоматически сгенери­рованным с уникальным именем

ConfigMode

Еп Um TConfigModes {cfmVirtual, cfmPersistent, cfmSession}; I TConfigMode ConfigMode

Указывает, как BDE должна управлять псевдонимами

DatabaseCount

Int DatabaseCount

Число компонентов баз данных Database, связанных с дан­ным сеансом и содержащихся в Databases

Databases

TDatabase* Databases [int Index]

Индексированный массив компонентов баз данных Databa­se, связанных с данным сеансом

Handle

BdezhDBISes Handle

Дескриптор BDE данного сеанса

KeepConnections

Bool KeepConnections

Указывает, должны ли поддерживаться соединения даже при неактивных наборах данных

Locale

Void * Locale

Идентификатор локализации BDE сеанса J

NetFileDir

AnsiString NetFileDir

Определяет каталог, содержащий файл управления сетью

BDE — PDOXUSRS. NET

PrivateDir

AnsiString PrivateDir

Определяет каталог временных файлов, генерируемых BDE для компонентов баз данных Database, связанных с данным компонентом

SessionName

AnsiString SessionName

Имя сеанса, используемое связанными с Session компонен­тами. Если AutoSessionName = true, то SessionName явно задаваться не может

I Свойство

Объявление / Описание

SQLHourGlass

Bool SQLHourGlass

Определяет, должен ли курсор приобретать вид песочных часов SQL во время операций BDE

TraceFlags

Enum TTraceFlag {tfQPrepare, tfQExecute, tfError, tfStmt, tfConnect, tfTransact, tfBlob, tfMisc, tfVendor, tfDataln, tfDataOut};

Typedef Set<TTraceFlag, tfQPrepare, tfDataOut>

TTraceFlags;

TTraceFlags TraceFlags

Определяет операции с базой данных, отображаемые во вре­мя выполнения в SQL Monitor

Основные методы

Метод

Объявление / Описание

AddAlias

Void AddAlias(const AnsiString Name,

Const AnsiString Driver, Classes-TStrings* List)

Добавляет указанный псевдоним BDE Name с драйвером Driver и параметрами List в сеанс работы с сервером SQL

AddDriver

Void AddDriver(const AnsiString Name,

Classes-TStrings* List)

Добавляет указанный драйвер BDE Name с параметрами

List в сеанс работы с сервером SQL

AddPassword

Void AddPassword(const AnsiString Password)

Добавляет в текущий сеанс пароль доступа к таблицам Para­dox

AddStandard

Alias

Void AddStandardAlias(const AnsiStrine Name,

Const AnsiString Path, const AnsiString DefaultDriver)

Добавляет в сеанс псевдоним типа Standard для связи с таб­лицами Paradox, dBASE, ASCII

Close

Void Close(void)

Закрывает соединения всех баз данных и закрывает сеанс

CloseDatabase

Void CloseDatabase(TDatabase* Database)

Закрывает соединения всех баз данных

DeleteAlias

Void DeleteAlias(const AnsiString Name)

Удаляет указанный псевдоним BDE из сеанса

DeleteDriver

Void DeleteDriver(const AnsiString Name)

Удаляет указанный драйвер BDE из сеанса

DropConnections

________________

Void DropConnec tions(void)

Уничтожает все неактивные временные компоненты баз дан­ных Database, связанные с сеансом

FindDatabase

1________________ ;

TDatabase* FindDatabase(const AnsiString DatabaseName)

Возвращает компонент Database, связанный с указанной ба­зой данных

Метод

Объявление / Описание

GetAliasDriver

Name

AnsiString GetAliasDriverNamelconst AnsiString AliasName)

Возвращает имя драйвера, используемого указанным псевдо­нимом BDE

GetAliasNames

Void GetAliasNames(Classes::TStrings* List)

Возвращает список всех псевдонимов баз данных, зарегист­рированных в BDE

GetAliasParams

Void GetAliasParamslconst AnsiString AliasName,

Classes: :TStrings* List)

Обеспечивает доступ к параметрам, связанным с указанным псевдонимом BDE

GetConfig

Params

Void GetConfigParams(const AnsiString Path,

Const AnsiString Section, Classes: :TStrings* List)

Обеспечивает доступ к параметрам конфигурации BDE

GetDatabase

Names

Void GetDatabaseNamestciassesi=TStrings* List)

Возвращает список всех псевдонимов баз данных, зарегист­рированных в BDE, и всех компонентов баз данных сеанса

GetDriverN ames

Void GetDriverNamestciassesiiTStrings* List)

Возвращает список всех доступных драйверов BDE

GetDriverParams

Void GetDriverParamstconst AnsiString DriverName, Classes::TStrings* List)

Возвращает список параметров указанного драйвера BDE

GetPassword

Bool GetPassword(Void)

Генерирует событие OnPassword — запрос пароля

GetStoredProc

Names

Void GetStoredProcNames(const AnsiString DatabaseName, Classes: .-TStrings* List)

Возвращает список имен всех хранимых на SQL сервере про­цедур, связанных с указанным компонентом базы данных Database

________________

GetTableNames

Void GetTableNames(const AnsiString DatabaseName,

Const AnsiString Pattern, bool Extensions, bool SystemTables, Classes::TStrings* List)

Возвращает список имен всех таблиц, связанных с указан­ным компонентом базы данных Database

IsAlias

Bool IsAlias(const AnsiString Name)

Определяет, является ли указанная строка псевдонимом BDE

Void ModiNAliastAnsiString Name, Classes::TStrings* List) Добавляет или изменяет параметры List псевдонима Name BDE

ModifyDriver

Void ModifvDrivertAnsiString Name, ClassesiiTStrings* List) Добавляет или изменяет параметры List драйвера Name BDE

Open

Void Open(void)

Открывает сеанс и делает его текущим

Метод

Объявление / Описание

OpenDatabase

TDatabase* OpenDatabasefconst AnsiString DatabaseName)

Открывает существующую базу данных, создает для нее вре­менный компонент Database и открывает его

RemoveAll

Passwords

Void RemoveAllPasswords(void)

Удаляет все ранее добавленные в текущий сеанс пароли до­ступа к таблицам Paradox

RemovePassword

Void RemovePassword(const AnsiString Password)

Удаляет добавленный в текущем сеансе пароль доступа к таблицам Paradox

SaveConfigFile

Void SaveConfigFile(Void)

Переписывает текущую информацию BDE из памяти и со­храняет ее в файле конфигурации BDE

События

Событие

Описание J

OnUpdateData

Наступает, когда намечается обновление текущей записи |

OnPassword

Наступает при первой попытке приложения открыть табли — ∣i цу Paradox, если BDE фиксирует отсутствие соответствую­щих прав доступа

! OnStartup

Наступает в момент активизации сеанса |

SpeedButton — кнопка с пиктограммой и фиксацией__________________________

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

Страница библиотеки Additional Класс TSpeedButton

Иерархия TObiect TPersistent TComponent TControI TGraphicControl

H32Σ3ZL Ini *∣
J≥l Г5

⅜>ιeτ⅛ I

———- . .

Модуль Buttons Примеры изображения Рис. 2.35

Примеры кнопок SpeedButton

Описание

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

У кнопок SpeedButton, Как и у других кнопок, имеется свойство Caption Надпись, но в этих кнопках оно обычно оставляется пустым, так как вместо надпи­си используется пиктограмма. Изображение на кнопке задается свойством Glyph Точно так же, как для кнопок BitBtn. И точно так же свойство NumGlyphs Опреде­ляет число используемых пиктограмм, свойства Layout И Margin Определяют рас­положение изображения, а свойство Spacing — расстояние между изображением и надписью (если, конечно, вы все-таки хотите использовать надпись на кнопке).

Особенностью кнопок SpeedButton Являются свойства GroupIndex (индекс группы), AllowAliUp (разрешение отжатого состояния всех кнопок группы) и Down (исходное состояние — нажатое). Если Grouplndex = 0, то кнопка ведет себя так же, как Button И BitBtn. При нажатии пользователем кнопки она погружается, а при отпускании возвращается в нормальное состояние. В этом случае свойства Allow — AHUp И Down Не влияют на поведение кнопки.

Если Grouplndex > 0 И AllowAHUp = true, То кнопка при щелчке пользовате­ля на ней погружается и остается в нажатом состоянии. При повторном щелчке пользователя на кнопке она освобождается и переходит в нормальное состояние (именно для того, чтобы освобождение кнопки состоялось, необходимо задать AllowAHUp = true). Если свойство Down Во время проектирования установлено равным True, То исходное состояние кнопки — нажатое.

Если есть несколько кнопок, имеющих одинаковое ненулевое значение Group — Index, То они образуют группу взаимосвязанных кнопок, из которых нажатой мо­жет быть только одна. Если одна кнопка находится в нажатом состоянии и пользо­ватель щелкает на другой, то первая кнопка освобождается, а вторая фиксируется в нажатом состоянии. Поведение нажатой кнопки при щелчке на ней зависти от значения свойства Если оно равно True, То кнопка освободится, по­

Скольку в этом случае возможно состояние, когда все кнопки группы отжаты. Если же AllowAHUp Равно False, То щелчок на нажатой кнопке не приведет к из­менению вида кнопки. Впрочем, и в этом случае, как и при любом щелчке на кноп­ке, возникает событие OnCIick, Которое может быть обработано.

Состояние кнопки во время выполнения можно определить по значению свой­ства Down: если значение равно true, то кнопка нажата. Во время события OnCIick Значение Down Уже равно тому состоянию, которое примет кнопка в результате щелчка на ней.

Основные свойства

Свойство

Объявление / Описание

Action

Classes: :TBasic Action* Action

Определяет действие, связанное с данной кнопкой

AllowAHUp

Bool AllowAHUp

Определяет, могут ли все кнопки с одинаковым значением Grou — plndex быть одновременно отжатыми

Caption

AnsiString Caption

Надпись на кнопке I

Down

Bool Down

Указывает, нажата кнопка или отжата

Glyph

GraphicsaTBitmap* Glyph

Определяет битовую матрицу, которая появляется на кнопке

I Свойство

Объявление / Описание ,

GroupIndex

Int Grouplndex

Определяет произвольный заданный номер группы кнопок. По­зволяет кнопке работать в составе группы

, Layout

Enum TButtonLayout {blGlyphLeft, IalGlyphRight, blGlyphTop, MGlyphBottom };

TButtonLayout Layout

Определяет, к какому краю кнопки смещается изображение

I Margin

Int Margin

Определяет количество пикселов между краем изображения и краем кнопки, указанным свойством Layout. При -1 изобра­жение и надпись размещаются в центре кнопки

I NumGIiphs

Typedef Shortint TNumGlyphs;

TNumGlyphs NumGlyphs

Указывает количество изображений в свойстве Glyph

Spacing

Int Spacing

Число пикселов, разделяющих изображение и надпись на поверх­ности кнопки j

Основные методы

Метод

Объявление / Описание

Click

Void Click(void)

Имитирует щелчок мышью, как если бы пользователь щелкнул на кнопке

Execute

Action

Hool ExecuteAction(TBasicAction* Action)

Вызывает указанное действие Action, связанное с данной кнопкой

События

I Событие

Описание

OnClick

Соответствует щелчку мыши на кнопке или нажатию клавиш быстрого доступа

OnDblClick

Наступает при двойном щелчке

OnMouseDown

Событие при нажатии кнопки мыши над кнопкой

OnMouseMove

Событие при перемещении указателя мыши над кнопкой

‘ OnMouseUD

Событие при отпускании нажатой кнопки мыши над кнопкой

модуль stdctrls примеры изображения
рис. 2.36
примеры stattext. надписи в метках поясняют установленные в них значения свойств
i ■! metkmmattetekt ■■к -iqi ×ι
 
boideistyie - sbsnone autosize ■ false. aiignmeni *iacentei. boideistyie « sbssunken
jq°f*tefsb,te ° tb*s⅛⅛te∣ 
boideistyie - sbssunken

Описание

StaticText — Оконный компонент, отображающий однострочный текст на форме, не подлежащий редактированию. StaticText Функционирует подобно мет­ке Label, за исключением того, что он потомок TWinControl и поэтому имеет вид и многие свойства окна, включая возможность оформления более красивого обрам­ления надписи, чем в Label.

Текст метки задается свойством Caption. Шрифт надписи определяется свой­ством Font, Цвет фона — свойством Color, А цвет надписи — подсвойством Color Свойства Font. Размер меток StaticText Определяется свойством AutoSize. Если это свойство установлено в True, То вертикальный и горизонтальный размеры ком­понента определяются размером надписи. Если же AutoSize Равно False, То вырав­нивание текста внутри компонента определяется свойством Alignment, Которое позволяет выравнивать текст по левому краю, правому краю или центру клиент­ской области метки.

В метке StaticText Автоматически осуществляется перенос длинного текста по словам, если значение AutoSize Установлено в False И размер компонента достаточен для размещения нескольких строк (см. рис. 2.36). Для того чтобы в StaticText Осуще­ствлялся перенос при изменении пользователем размеров окна, надо осуществлять перерисовку компонента методом Repaint В обработчике события формы OnResize.

StaticText имеет свойство BorderStyle, определяющее рамку текста — бордюр (см. рис. 2.36). При стиле BorderStyle = SbsNone Метка StaticText По виду не от­личается от метки Label. Вероятно, если уж использовать бордюр, то наиболее приятный стиль BorderStyle = sbsSunken.

Метки могут обеспечить клавишами ускоренного доступа элементы, в кото­рых такие клавиши не предусмотрены, например, окна редактирования Edit. Ком­понент, на который должен переключаться фокус при нажатии клавиш ускорен­ного доступа, задается свойством FocusControl. Чтобы доступ осуществлялся, надо установить в True Свойство ShowAccelChar. В надписи Caption Перед соответст­вующим символом надо поставить символ амперсанда — Следующий за ам­

Персандом символ будет отображаться в надписи подчеркнутым и будет являться символом быстрого доступа: при выполнении приложения нажатие клавиши Alt + клавиши данного символа будет эквивалентно переключению фокуса на компо­нент, указанный свойством FocusControl.

Основные свойства

Свойство

Объявление / Описание

Alignment

Enum TAlignment {taLeft Justify, taRight Justify, taCenter } ; (

ClassesnTAlignment Alignment

Управляет горизонтальным выравниванием текста в пределах Метки, если свойство AutoSize Установлено в False: taLeft Jus­tify — влево, TaRightJustify — вправо, TaCenter — по центру

Свойство

Объявление / Описание

AutoSize

Bool AutoSize

Если это свойство установлено в True, То вертикальный и го­ризонтальный размеры компонента определяются размером надписи. Если же AutoSize равно false, то выравнивание тек­ста внутри компонента определяется свойством Alignment

BorderStyle

Enum TStaticBorderStyle { sbsNone, sbsSingle, sbsSunken }; TStaticBorderStyle BorderStyle

Определяет стиль бордюра надписи (см. рис. 2.36)

I Brush

Granhics::TBrush* Brush

Кисть — определяет цвет и стиль заполнения фона окна.

Свойство только для чтения

I Caption

AnsiString Caption

Строка текста, отображаемая меткой. Может содержать сим­вол ускоренного доступа к элементу, указанному свойством

FocusControI

Color

GraDhicsnTColor Color

Определяет цвет фона метки

FocusControl

ControlsnTWinControl* FocusControI

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

Font

GraphicsnTFont* Font

Определяет атрибуты шрифта

ParentColor

Bool ParentColor

Определяет (при значении true), что для фона метки будет за­имствован цвет родительского компонента. В этом случае фон метки не заметен и видна только ее надпись — Caption

I. ShowAecelChar

Bool ShowAccelChar

Определяет, как амперсанд отображается в тексте метки (см. пояснения выше в описании StaticText)

Основные методы

Никаких специальных методов в компоненте не объявлено. Метка наследует множество методов от своих предшественников, в основном, от базового класса

TControl.

Основные события

Никаких специальных событий в компоненте не объявлено. Метка наследует множество событий от класса TContRol.

Иерархия TObiect TPersistent ‘ΓCυniiwnent TControl TWinControl Модуль Comctrls Пример изображения

□ ив] a] ⅛j⅜∣i⅜j 1
это текст в окне|
Пример приложения с двумя полосами состояния: верхняя Файл Формат

Секционирована, нижняя — простая

ɪ: IS i ∙.’.∙.< I i’.t∙. j

[ Редакядаванне текста

Описание

Компонент StatusBar Размещается обычно внизу окна и представляет собой по­лосу состояния из одной или нескольких панелей. В этих панелях пользователю со­общается какая-то текущая информация о режиме работы, даются подсказки и т. п.

Свойство SimplePanel Компонента StatusBar Определяет, включает ли полоса состояния одну или множество панелей. Если SimplePanel = true, То вся полоса состояния представляет собой единственную панель, текст которой задается свой­ством SimpleText (на рис. 2.37 такой стиль имеет нижняя полоса). Если же SimplePanel = false, То полоса состояния является набором панелей, задаваемых свойством Panels.

Каждая панель полосы состояния является объектом типа StatusPanels. Свойства панелей вы можете задавать специальным редактором наборов, который можно вызвать тремя способами: из Инспектора Объектов кнопкой с многоточием около свойства Panels, Двойным щелчком на компоненте StatusBar Или из контек­стного меню, выбрав команду Panels Editor. В окне редактора вы можете переме­щаться по панелям, добавлять новые или уничтожать существующие. При переме­щении по панелям в окне Инспектора Объектов вы будете видеть их свойства.

Основное свойство каждой панели — Text, В который заносится отображае­мый в панели текст. Другое существенное свойство панели — Width (ширина). Свойство Style Определяет стиль панели: PsText — Текстовая, PsOwnerDraw -­Предназначена для изображений на канве.

Программный доступ к текстам отдельных панелей можно осуществлять через свойство Panels И его индексированное подсвойство Items. Например, оператор:

StatusBarl->Panels->Items[0]->Text = "текст 1";

Напечатает текст "текст 1" в первой панели.

Количество панелей полосы состояния можно определить из подсвойства Count Свойства Panels. Например, следующий оператор очищает тексты всех панелей:

For (int i = O; i < StatusBarl->Panels->Count; i+ + )

1

StatusBarl->Panels->Items[i]->Text =

}

Свойство SizeGrip Определяет наличие в нижнем правом углу полосы состоя­ния захвата, позволяющего пользователю изменять размер полосы. Если при этом полоса выровнена по нижнему краю формы (Align = alBottom), То одновременно

Будет изменяться и размер окна приложения (на рис. 2.37 в верхней полосе SizeGrip = false, А в нижней — true).

Свойство AutuHint обеспечивает автоматическое отображение в строке состоя­ния подсказок — вторых частей свойства Hint Тех компонентов, над которыми пе­ремещается курсор мыши (строка "Редактирование текста" на рис. 2.37). Если в панели SimpleText = true, То подсказки отобразятся в единственной секции па­нели. Если же вы используете многосекционную панель состояния, то свойство AutoHint Обеспечит отображение подсказок только в первой секции. Для отобра­жения подсказок в другой секции надо перенести на форму компонент Applica — tionEvents И в обработчик его события OnHint Компонента вставить оператор

StatusBarl->Panels->Items[I]->Text = Application->Hint; где I — индекс секции.

Основные свойства

Свойство

Объявление / Описание |

Align

Enum TAlign {alNone, alTop, alBottom, alLeft, alRight, alCIient, alCustom};

TAlign Align

Определяет способ выравнивания полосы состояния на форме.

По умолчанию alBottom

AutoHint

Bool AutoHint

Определяет автоматическое отображение в первой панели полосы состояния вторых частей подсказок Hint тех компонентов, над которыми перемещается курсор мыши

: Canvas

Graphics: :TCanvas* Canvas

Канва, позволяющая рисовать на панели в обработчике события

OnDrawPanel

Panels

____________

TStatusPanels* Panels

Собрание панелей — объектов типа TStatusPanel

: SiniplePanel

Bool SimplePanel

Определяет, отображает ли полоса состояния одну (при значении true) или несколько панелей

SimpleText

AnsiString SimpleText

Содержит строку, которая отображается в полосе состояния при

SimplePanel=true

SizeGrip

Bool SizeGrip

Определяет наличие в нижнем правом углу полосы состояния за­хвата, позволяющего пользователю изменять размер полосы, а при Align = alBottom — и размер формы

UseSystem

Font

____________

Bool UseSystemFont

Определяет, используется ли в полосе состояния системный

Шрифт

Основные методы

Никаких специальных методов в компоненте не объявлено. Компонент насле­дует множество методов от класса TWinControl.

Основные события

Событие

Описание

—————— 1

OnDrawPanel

Событие происходит при необходимости перерисовать панель со­стояния, например при изменении пользователем ее размеров. Наступает только если стиль панели PsOwnerDraw

I OnHint

Наступает перед тем, как в полосе состояния должна отображать­ся подсказка. Обработчик отменяет действие свойства AutoHint И должен сам обеспечивать отображение подсказки

Table — набор данных, связанный с одной таблицей_________________

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

Страница библиотеки BDE, в версиях, младше C++Builder 6 — Data Access

Класс TTable

Иерархия TObZect TPersistent TComvonent TDataSet

TBDEDAtaSet TDBDataSet

Модуль Dbtables

Описание

Компонент Table Обеспечивает прямой доступ к каждой записи и полю в одной указанной таблице базы данных. Компонент может также работать с подмножест­вом записей внутри таблицы базы данных. Во время проектирования вы можете создавать, удалять, модифицировать, или переименовывать таблицу базы данных, связанную с Table.

Большинство свойств, методов и событий Table Наследует от классов-предше­ственников, сведения о которых приводятся в гл. 1.

Для связи Table С необходимой таблицей базы данных служат два свойствае: DatabaseName и TableName. Прежде всего, надо установить свойство Database — Name. В выпадающем списке этого свойства в Инспекторе Объектов вы можете ви­деть все доступные BDE псевдонимы баз данных.

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

Соединение с выбранной таблицей базы данных осуществляется свойством Active. По умолчанию оно равно False. Если установить его в True Во время проек­тирования или программно во время выполнения, то компонент соединится с ба­зой данных.

Свойство Exclusive Компонента Table Определяет доступ к используемой таб­лице при одновременном обращении к ней нескольких приложений (например, при работе в сети или в многозадачном режиме). Если задать значение этого свой­ства true, то таблица будет закрыта для других приложений. Свойство можно из­менять только при Active = false.

Свойства IndexName и IndexFieldName Позволяют управлять упорядочивани­ем записей в наборе. Свойство IndexName Упорядочивает представление записей в соответствии с имеющимися в базе данных индексами. Выпадающий список ин­дексов можно открыть, нажав в Инспекторе Объектов кнопку с многоточием ря­дом со свойством IndexName. Альтернативный вариант индексации предоставляет свойство IndexFieldName. В его выпадающем списке просто перечислены преду­смотренные в индексах комбинации полей, и вы можете выбрать необходимую, если забыли, что обозначают имена индексов.

Объекты полей, экспонируемых компонентом Table, Могут создаваться авто­матически. Но тогда их характеристики (надписи, число отводимых под них сим­волов и т. п.) будут приняты по умолчанию и вряд ли устроят пользователя. Можно создавать и редактировать объесты полей с помощью специального Редактора По­лей. Вызвать его проще всего двойным щелчком на компоненте Table. Вы увидите поле этого редактора (см. рис. 2.38) сначала пустое. Щелкните на нем правой кнопкой мыши и из всплывающего меню выберите раздел Add fields (добавить поля). Вы увидите окно, в котором содержится список всех полей таблицы. Выбе­рите из него курсором мыши интересующие вас поля, щелкните на ОК и вы верне­тесь к основному окну Редактору Полей, но в нем уже будет содержаться список добавленных полей. Имейте в виду, что только к тем полям, которые вы добавите, вы сможете в дальнейшем обращаться.

forml->tablcr-r iРис. 2.38

Окно Редактора Полей набора данных

№и_

Dep

Fam

Nam

Par

Year_b

Sex

Charact

Photo

Выделив в списке окна Редактора Полей какое-то поле, вы можете увидеть его свойства в Инспекторе Объектов. Каждое поле является объектом класса, производ­ного от Wield — базового класса полей (см. подробнее в гл. 1) и обладает множеством свойств. Рассмотрим основные из них, которые чаще всего необходимо задавать.

Свойство Alignment определяет выравнивание отображаемого текста внутри колонки таблицы: влево, вправо или по центру.

Свойство DisplayLabel Соответствует заголовку столбца данного поля. Заголо­вок можно писать по-русски. Свойство DisplayWidth определяет ширину колон­ки — число символов, отводимых под заголовок.

Свойства EditMask Для строк и EditFormat Для чисел определяют форматы отображения данных.

Для логических полей очень важным является свойство Display Values. Это свойство определяет, какие значения должны отображаться, если поле имеет зна­чение True Или False. Отображаемые значения разделяются точкой с запятой. Пер­вым пишется значение, соответствующее True. Например, если вы имеете булево поле Sex (пол) то в свойстве DisplayValues Можете написать: "м;ж" или "муж­ской ;женский".

Свойство Readonly, Установленное в True, Запрещает пользователю вводить в данное поле значения. Свойство Visible Определяет, будет ли видно пользователю соответствующее поле.

Имеется еще множество свойств, методов и событий как объектов полей — на­следников так и базовых классов наборов данных, которым наследует

Table: TDataSet. TBDEDataSet. TDBDataSet. Вы найдете описания базовых клас­сов в гл. 1, а подробные описания свойств, методов и событий — в гл. 3, 4, 5. Но де­тальное рассмотрение методики работы с базами данных далеко выходит за рамки этой книги (см. источники [1] и [3]).

Основные свойства

Свойство

Объявление / Описание

Active

Bool Active

Определяет, открыта база данных, или нет

Database

Name

AnsiString DatabaseName

Указывает имя базы данных, с которой связан набор данных

Exclusive

Bool Exclusive

Указывает, открывается ли таблица с блокировкой доступа со стороны других приложений

Exists

Bool Exists

Показывает, имеется ли таблица данных, связанная с Table

IndexDefs

Db::TIndexDefs* IndexDefs

Содержит информацию об индексах таблицы

IndexField

Names

SvstemriAnsiString IndexFieldNames

Список полей, используемых для индексации таблицы

IndexFields

DbiiTField* IndexFields [int Index]

Индексированный список объектов полей текущего индекса

IndexFiles

ClasseszTStrmgs* IndexFiles

Список индексных файлов таблицы dBASE

IndexName

AnsiString IndexName

Имя используемого вторичного индекса таблицы

MasterFields

AnsiString MasterFields

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

MasterSource

DbzTDataSource* MasterSource

Во вспомогательной таблице определяет источник данных голов­ной таблицы

Readonly

Bool Readonly

Устанавливает данные только для чтения (при значении true)

TableName

AnsiString TableName

Указывает имя таблицы базы данных

Имеется также множество наследуемых Свойств, Переопределенных в Table.

Основные

Методы

Метод

AddIndex

Объявление / Описание

Enum TIndexOption { ixPrimary, ixUnique, ixDescending,

IxCaselnsensitive, ixExpression, ixNonMaintained };

TypedefSet<TIndexOption, ixPrimary, ixNonMaintained>

TIndexOptions;

Void Addlndex(const AnsiString Name, const AnsiString Fields, DbiiTIndexOptions Options, const AnsiString DescFields = "”)

Создает новый индекс таблицы

Метод

Объявление / Описание

Append

Void Append(void)

Добавляет новую пустую запись в конец набора данных

Append

Record

Void AppendRecord(const SystemnTVarRec * Values, const int Values_Size)

Добавляет в набор данных новую запись, заполняет ее и пере­сылает в базу данных

ApplyRange

Void ApplyRange(void)

Применяет диапазон значений, установленный методами Set — RangeStart и SetRangeEnd

AppIvUpdates

Void ApplyUpdates(void)

Записывает Кэшированные Изменения в базу данных

BatchMove

Enum TBatchMode {batAppend, batUpdate, batAppendUpdate, batDelete, batCopy};

Int BatchMovetTBDEDataSet* ASource, TBatchMode AMode)

Перемещает записи из набора данных Asource в таблицу данно­го компонента. Параметр AMode типа TBatchMode определяет режим перемещения: добавление, замена, копирование. Метод возвращает число записей, с которыми проводилась работа.

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

Cancel

Void Cancel(void)

Отменяет результаты редактирования

CancelRange

Void CancelRange(Void)

Снимает ограничения диапазона, введенные методами SetRan — geStart, SetRangeEnd, SetRange

Cancel

Updates

Void CancelUpdates(void)

Отменяет все кэшированные изменения и восстанавливает ис­ходное состояние набора данных

Close

Void Close(void)

Закрывает набор данных

Close.

, Database

Void CloseDatabase(TDatabase* Database)

Закрывает соединение с базой данных Database

Commit

Updates

Void CommitUpdates(void)

Очищает буфер кэшированных изменений

CreateTable

Void CreateTable(void)

Создает новую таблицу базы данных

Delete

Void Delete(void)

Удаляет активную запись и позиционирует курсор на следую­щую запись

DeleteTable

Void DeleteTable(void)

Удаляет таблицу базы данных

Edit

Void Edit(void)

Переводит набор данных в режим редактирования

Метод

Объявление / Описание

EditKey

Void EditKey(void)

Переводит набор данных в режим поиска с частичным измене­нием ключей

EditRange

End

Void EditRangeEnd(Void)

Подготавливает изменение верхней границы вводимого значения

EditRange

Start

Void EditRangeStart(Void)

Подготавливает изменение нижней границы вводимого значения

FieldBvName

TField* FieldByName(const AnsiString FieldName)

Находит поле по его имени FieldName. При неверном имени ге­нерирует исключение

FindField

TField* FindFieldtconst AnsiString FieldName)

Находит поле по его имени. При неверном имени возвращает nil

FindFirst

Bool FindFirst(void)

Перемещает курсор к первой записи и возвращает true в случае успеха

EindKey

Bool FindKey(const System::TVarRec * KeyValues, const int KeyValues_Size)

Ищет запись по заданным ключам KeyValues

FindLast

Bool FindLast(void)

Перемещает курсор к последней записи и возвращает true в случае успеха

FindNearest

Void FindNearest(const System: :ТVarRec * KeyValues, const int KeyValues_Size)

Перемещает курсор на запись, ближайшую к заданным ключам

FindNext

Bool FindNext(void)

Перемещает курсор к следующей записи и возвращает true в случае успеха

FindPrior

Bool FindPrior(void)

Перемещает курсор к предыдущей записи и возвращает true в случае успеха

First

Void First(void)

Перемещает курсор к первой записи

FlushBuffers

Void FlushBuflers(Void)

Пересылает в базу данных все изменения, сохраненные в буфере

GetDetail

DataSets

Void GetDetailDataSets(Classes::TList* List)

Заполняет список данными о вспомогательном наборе данных, находящемся с данным набором в соотношении master/detail

GetDetail

LinkFields

Void GetDetailLinkFieldstciassesuTList* MasterFields,

Classes: :TList* DetailFields)

Во вспомогательном наборе выдает списки ключевых полей это­го и головного наборов данных _ _

Метод

Объявление / Описание

GetField

Names

Void GetFieldNaroestciassesnTStrings* List)

Выдает список имен всех полей набора данных

GotoCurrent

Void GotoCurrent(TTable* Table)

Синхронизирует текущую запись таблицы с текущей записью другого набора данных

GotoKev

Bool GotoKey(void) —

Перемещает курсор на запись, найденную с помощью методов SetKey и EditKey

GotoNearest

Void GotoNearest(void)

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

Insert

Hidesbase void Insert(void)

Вставляет новую пустую запись в набор данных

InsertRecord

Void InsertRecord(const SystemnTVarRec * Values, const int Values_Size)

Вставляет новую заполненную запись в набор данных

Last

Void Last(void)

Перемещает курсор к последней записи

Locate

Bool Locate(const AnsiString KeyFields,

Const SystemnVariant &KeyValues,

TLocateOptions Options)

Осуществляет поиск записи в наборе данных

Lookup

SystemnVariant Lookup( const AnsiString KeyFields, const Variant &KeyValups, Const AnsiString ResultFields)

Осуществляет поиск записи в наборе данных и возвращает зна­чения указанных полей этой записи ~

MoveBy

Int MoveBy(int Distance)

Перемещает курсор на заданное число записей

Next

Void Next(void)

Перемещает курсор к следующей записи

Open

Void Open(void)

Открывает набор данных

OpenDatabase

TDatabase* OpenDatabase(void)

Открывает базу данных

∣ Post

Void Post(void)

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

Prior

Void Prior(void)

Перемещает курсор к предыдущей записи

RevertRecord

_____________

Void RevertRecord(void)

Отменяет исправления текущей записи

Метод

Объявление / Описание

SetFields

Void SetFields(const SystemnTVarRec * Values, const int Values_Size)

Устанавливает значения всех полей записи

SetKey

Void SetKey(void)

Переводит набор данных в режим поиска по ключам

SetRange

Void SetRange(const System: VarRec * Start Values, const int StartValues_Size, const SystemaTVarRec * EndValues, const int EndValues_Size)

Устанавливает диапазон допустимых значений

SetRangeEnd

_____________

Void SetRangeEnd(void)

Устанавливает верхнюю границу диапазона допустимых значений

SetRange

Start

Void SetRangeStart(void)

Устанавливает нижнюю границу диапазона допустимых значений

Основные события

‘ Событие

Описание

OnUpdateError

Наступает при генерации исключения в процессе пересылки в базу данных измененной записи.

OnUpdateRecord

Наступает при пересылке кэшированной записи в базу данных.

Кроме того наследуется множество событий класса TDataSet.

Timer — таймер_________________________________________________

Невизуальный компонент, позволяющий задавать в приложении интервалы времени.

Страница библиотеки System

Класс TTimer

Иерархия TObiect TPersistent — TComponent

Модуль Extctrls

Описание

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

Таймер имеет два свойства, позволяющие им управлять: Interval — интервал времени в миллисекундах и Enabled — доступность. Свойство Interval Задает пе­риод срабатывания таймера. Через заданный интервал времени после предыдуще­го срабатывания, или после программной установки свойства Interval, Или после запуска приложения, если значение Interval Установлено во время проектирова­ния, таймер срабатывает, вызывая событие OnTimer. В Обработчике этого события записываются необходимые операции.

Если задать Interval = 0 или Enabled = false, То таймер перестает работать. Чтобы запустить отсчет времени надо или задать Enabled = true, Если установлено положительное значение Interval, Или задать положительное значение Interval, Если Enabled = false.

Например, если требуется, чтобы через 5 секунд после запуска приложения закрылась форма-заставка, отображающая логотип приложения, на ней надо раз­местить таймер, задать в нем интервал Interval = 5000, а в обработчик события OnTimer Вставить оператор Close, Закрывающий окно формы.

Если необходимо в некоторой процедуре запустить таймер, который отсчитал бы заданный интервал, например, 5 секунд, после чего надо выполнить некоторые операции и отключить таймер, это можно сделать следующим образом. При проек­тировании таймер делается доступным (Enabled = True), Но свойство Interval Зада­ется равным 0. Таймер не будет работать, пока в момент, когда нужно запустить таймер, не выполнится оператор

Timerl->Interval = 5000;

Через 5 секунд после этого наступит событие OnTimer. В его обработчике надо задать оператор

Timerl->Interval = 0;

Который отключит таймер, после чего можно выполнять требуемые операции.

Другой эквивалентный способ решения задачи — использование свойства Enabled. Во время проектирования задается значение Interval = 5000 и значение Enabled = false. В момент, когда надо запустить таймер выполняется оператор

Timerl->Enabled = true;

В обработчик события OnTimer, Которое наступит через 5 секунд после запус­ка таймера, можно вставить оператор

Timerl->Enabled = false; который отключит таймер.

Таймер точно выдерживает заданные интервалы Interval, Если они достаточно велики — сотни и тысячи миллисекунд. Если же задавать интервалы длительно­стью десятки или единицы миллисекунд, то реальные интервалы времени оказы­ваются заметно больше вследствие различных накладных расходов, связанных с вызовами функций и иными вычислительными аспектами.

Основные свойства

Свойство

Объявление / Описание

Enabled

Bool Enabled

Определяет способность таймера отмерять отрезки времени

Interval

Cardinal Interval

Интервал времени в миллисекундах, отмеряемый таймером. При значении 0 таймер не реагирует на время

Основные методы

Никаких специальных методов в компоненте не объявлено. Компонент насле­дует множество методов от класса TComponent.

Событие

Событие Описание

OnTimer Событие происходит, когда истек очередной отрезок времени Inter­

Val

D∣a⅜>B∣

WaJIF*

¾le⅜l Mi*; ∣

—- ɪ

toolbar — инструментальная панель 
инструментальная панель для быстрого доступа к часто используемым функциям приложения с помощью инструментальных быстрых кнопок.
страница библиотеки win32 класс ttoolbar
иерархия tobiect— tpersistent— tcomponent — tcontrol —
twincontrol — tcustomstatictext
модуль comctrls пример изображения рис. 2.39
пример приложения с инструментальной панелью toolbar
,текстовый рсдак тор r,файл,формат сервис
настройка
параметры
горячие клавиши

1: 4 НолиФ настройка параметре»

Описание

Компонент ToolBar Является инструментальной панелью и управляет компо­новкой инструментальных быстрых кнопок и других компонентов. Размещаемые на панели компоненты автоматически располагаются рядами и упорядочиваются

По размерам.

Для занесения на панель ToolBar Кнопок надо щелкнуть на ToolBar Правой кнопкой мыши и выбрать из всплывшего меню команду New Button. На форме поя­вится очередная кнопка — объект типа ToolButton. Это не совсем обычная кноп­ка, так как ее вид и поведение определяется ее свойством Style, которое по умолча­нию равно TbsButton — кнопка. Кнопка этого стиля похожа на кнопку Speed- Button. Изображение на кнопке определяется свойством ImageIndex. Оно задает индекс изображения, хранящегося во внешнем компоненте ImageList. Указание на этот компонент может задаваться такими свойствами компонента ToolBar, как Images, DisabIedImages (указывает на список изображений кнопок в недоступном состоянии) и (указывает на список изображений кнопок в моменты, ко­

Гда над ними перемещается курсор мыши).

Свойство MenuItem Позволяет задать раздел главного или контекстного меню, который дублируется данной кнопкой. При установке этого свойства, если в соот­ветствующем разделе меню было задано изображение и установлен текст подска­зок (свойство Hint), То это же изображение появится на кнопке и тот же текст поя­вится в свойстве Hint Кнопки. Передадутся из раздела меню в кнопку также значе­ния свойств Enabled и Visible. Свойство Wrap, Установленное в True, Приводит к тому, что после этой кнопки ряд кнопок на панели прерывается и следующие кнопки размещаются в следующем ряду. Надо только установить в ToolBar Свой­ство AutoSize раным False, Чтобы высота панели не подстраивалась автоматически под размер кнопок, и установить высоту панели достаточную для размещения двух рядов кнопок. На рис. 2.39 Wrap = true Задано в кнопке Заменить — послед­ней в верхнем ряду.

Свойство Wrap = true Действует только в случае, если свойство Wrapable Ком­понента ToolBar Установлено в False. Это свойство (если оно установлено в true) обеспечивает автоматический перенос кнопок в следующий ряд панели во время вы­полнения, если они не помещаются в предыдущем ряду. Так что при Wrapable = true Прерывать ряд Свойством Wrap не имеет смысла.

Теперь вернемся к свойству Style, Задающему стиль кнопки. Значение Style = TbsCheck Определяет, что после щелчка пользователя на кнопке она остается в на­жатом состоянии. Повторный щелчок на кнопке возвращает ее в отжатое состоя­ние. Поведение такой кнопки подобно кнопкам SpeedButton И определяется ана­логичными свойствами AllowAllUp И Down. Если при этом в нескольких кнопках установлено свойство Grouped = То эти кнопки образуют группу, из которой

Только одна кнопка может находиться в нажатом состоянии. На рис. 2.39 такой стиль установлен в кнопках выравнивания (3-5 слева в нижнем ряду).

Значение Style = TbsDropDown Соответствует кнопке в виде выпадающего спи­ска. Этот стиль удобен для воспроизведения выпадающего меню. Если для подоб­ной кнопки задать в качестве свойства Menultem Головной раздел меню, то в выпа­дающем списке автоматически будут появляться разделы выпадающего меню. Можно вместо свойства Menultem Задать свойство DropDownMenu, Определяющее контекстное меню (компонент TPopupMenu), Которое будет отображаться в выпа­дающем списке. На рис. 2.39 стиль TbsDropDown Использован в левой кнопке в нижнем ряду.

Значение Style = tbsSeparator Приводит к появлению разделителя, позволяю­щего отделить друг от друга кнопки разных функциональных групп. Значение Style tbsDivider Приводит к появлению разделителя другого типа — в виде вер­тикальной линии. На рис. 2.39 стиль TbsSeparator Установлен у разделителей в верхнем ряду, а стиль TbsDivider — у разделителей в нижнем ряду.

Свойство кнопки Indeterminate Задает ее третье состояние — не нажатая и не отпущенная. Это свойство можно устанавливать в True Во время выполнения, если в данном режиме кнопка не доступна.

Свойство Marked Выделяет кнопку.

Мы рассмотрели занесение на панель кнопок. Но в инструментальных пане­лях нередко используются и выпадающие списки. Например, для задания размера шрифта. Не представляет труда перенести на панель ToolBar Такие компоненты, как ComboBox (см. рис. 2.39), CSpinEdit и др.

Из общих свойств компонента ToolBar Следует отметить ButtonHeight И But­Ton Width — высота и ширина кнопок в пикселах.

Свойства, определяющие вид панели: Border Width — ширина бордюра, Edge — Inner И EdgeOuter Стиль изображения внутренней и внешней части панели (уто­пленный или выступающий), EdgeBorders — определяет изображение отдельных сторон панели (левой, правой, верхней, нижней).

Основные свойства

Свойство

Объявление / Описание

J Align

Enum TAlign {alNone, alTop, alBottom, alLeft, alRight, alClient, alCustom};

TAlign Align

Определяет способ выравнивания панели (по умолчанию AlTop)

ButtonCount

Int ButtonCount

Указывает количество кнопок, в компоненте

ButtonHeight

Int ButtonHeight

Высота кнопок

Buttons

TToolButton* Buttons[int Index]

Индексированный список объектов кнопок типа TToolButton

Свойство

Объявление / Описание

ButtonWidth

Int ButtonWidth

Ширина кнопок

Canvas

TCanvas Canvas

Канва, используемая для нестандартного изображения панели в обработчиках событий OnCustomDraw и OnCustomDrawItem

Disabled

Images

TCustomImageList* DisabledImages

Список изображений ImageList, используемых для недоступ­ных кнопок

EdgeBorders

Enum TEdgeBorder {ebLeft, ebTop, ebRight, ebBottom}; typedef SeteTEdgeBorder, EbLeft, EbBottom> TEdgeBorders; TEdgeBorders EdgeBorders

Определяет изображение отдельных сторон панели (левой, пра­вой, верхней, нижней)

EdgeInner

Enum TEdgeStyle {esNone, esRaised, esLowered};

TEdgeStyle Edgelnner

Стиль изображения внутренней части панели (плоский, высту­пающий или утопленный)

EdgeOuter

Enum TEdgeStyle {esNone, EsRaised, EsLowered};

TEdgeStyle EdgeOuter

Стиль изображения внешней части панели (плоский, выступаю­щий или утопленный)

Flat

Bool Flat

Определяет плоский (true) или объемный вид кнопо к

HotImages

T CustomlmageList* Hotlmages

Список изображений ImageList, используемых для кнопок в моменты, когда над ними перемещается курсор мыши

Images

TCustomlmageList* Images

Список изображений ImageList, используемыхдля кнопок

Indent

Int Indent

Определяет поле, отделяющее левый край компонента от распо­ложенных в нем кнопок

List

Bool List

При значении True Выравнивает надписи (если они видимы)

V

Вправо, а изображения влево. При значении false — г — выравни­вание по центру

RowCount

Int RowCount

Определяет количество рядов кнопок на инструментальной па­нели. Свойство только дл я чтения

ShowCaptions

Bool ShowCaptions

Включает или отключает отображение надписей на кнопках

Wrapable

Bool Wrapable

Определяет возможность автоматического образования новых рядов инструментальных кнопок, если они не помещаются на компоненте в_ один ряд

Основные методы

Никаких специальных методов, кроме защищенных, предназначенных для построения классов-наследников, в компоненте не объявлено. Компонент наследу­ет множество методов от класса TWinControl.

Основные события

Событие

Описание

OnAdvancedCustom

I Draw

Событие происходит перед прорисовкой панели. Обработ­чик может использоваться для нестандартного изображе­ния фона панели на канве. Нестандартная прорисовка от­дельных кнопок осуществляется в обработчиках OnCus — tomDrawButton или OnAdvancedcustomDrawButton. От­личается от OnCustomDraw организацией прорисовки

OnAdvancedCustom

DrawButton

Событие происходит перед прорисовкой кнопок панели. Обработчик может использоваться для нестандартного изображения кнопок. Отличается от OnCustomDrawBut — Ton организацией прорисовки

OnCustomDraw

Событие происходит перед прорисовкой панели. Обработ­чик может использоваться для нестандартного изображе­ния фона панели на канве. Нестандартная прорисовка от­дельных кнопок осуществляется в обработчиках OnCus — TomDrawButton Или OnAdvancedCustomDrawButton. От­личается от OnAdvancedCustomDraw организацией про­рисовки

OnCustomDraw

Button

Событие происходит перед прорисовкой кнопок панели. Обработчик может использоваться для нестандартного изображения кнопок. Отличается от OnAdvancedCustom — DrawButton организацией прорисовки

TreeViEW — иерархиЧеские данные в виде дерева

Служит для отображения иерархических данных в виде дерева, в котором пользователь может выбрать нужный ему узел или узлы.

Страница библиотеки Win32

Класс TTreeView

Иерархия TObiect — TPersistentTComDonent TControl-

TWinConTrolTCustomTreeView

Модуль Comctrls Пример изображения

Рис. 2.40

Пример компонента TreeView

Описание

Компонент Tree View Представляет собой окно для отображения иерархиче­ских данных в виде дерева, в котором пользователь может выбрать нужный ему узел или узлы. Иерархическая информация может быть самой разной: структура некоторого предприятия, структура документации учреждения, структура отчета и т. п. С каждым узлом дерева могут быть связаны некоторые данные.

Основным свойством TreeView, Содержащим информацию об узлах дерева, яв­ляется индексированный список узлов Items. Каждый узел является объектом типа TTreeNodes, Обладающим своими свойствами и методами.

Во время проектирования формирование дерева осуществляется в окне редак­тора узлов дерева (см. рис. 2.41), которое вызывается двойным щелчком на компо­ненте TreeView Или нажатием кнопки с многоточием около свойства Items В окне Инспектора Объектов.

Рис. 2.41

Окно редактора узлов дерева

Кнопка New Item (новый узел) позволяет добавить в дерево новый узел. Он бу­дет расположен на том же уровне, на котором расположен узел, выделенный кур­сором в момент щелчка на кнопке New Item.

Кнопка New Subltem (новый дочерний узел) позволяет добавить в дерево дочер­ний узел. Он будет расположен на уровень ниже уровня того узла, который выде­лен курсором в момент щелчка на кнопке New Subltem.

Кнопка Delete (удалить) удаляет выделенный узел дерева. Кнопка Load позво­ляет загрузить структуру дерева из файла. Файл, хранящий структуру дерева — это обычный текстовый файл, содержащий тексты узлов. Уровни узлов обознача­ются отступами. Например, файл дерева, изображенного на приведенных рисун­ках, может иметь вид:

Производство

Цех 1 цех 2

Цех 3

Управление

Администрация

Бухгалтерия

Для каждого нового узла дерева можно указать ряд свойств: Text — надпись, появляющаяся в дереве около данного узла, ImageIndex И SeIectedIndex — индек­сы пиктограмм, отображаемых для узла, который соответственно не выделен и вы­делен пользователем в данный момент. Эти индексы соответствуют списку изобра­жений, хранящихся в отдельном компоненте ImageList, На который указывает свойство Images Компонента TreeView. Свойство узла — StateIndex позволяет до­бавить вторую пиктограмму в данный узел, не зависящую от состояния узла. По­добная пиктограмма может просто служить дополнительной характеристикой узла. Индекс, указываемый как Statelndex, Соответствует списку изображений, хранящихся в отдельном компоненте ImageList, Указанном в свойстве State — Images Компонента TreeView.

Множество методов объектов типа TTreeNodes Позволяет перестраивать дере­во во время выполнения приложения. Следующие методы позволяют вставлять в дерево новые узлы:

∣ TTreeNode* AddtTTreeNode*" Node, const AnsiStrine S)

Добавляет новый узел с текстом S как последний узел уровня, на котором рас — J Положен Node

TTreeNode* AddFirst(TTreeNode* Node, const AnsiString S)

Вставляет новый узел с текстом S как первый из узлов уровня, на котором на­ходится Node. Индексы последующих узлов увеличиваются на 1 TTreeNode* AddChiIdtTTreeNode* Node, const AnsiString S)

Добавляет узел с текстом S как последний дочерний узла Node TTreeNode* AddChildFirsttTTreeNode* Node, const AnsiString S)

Вставляет новый узел с текстом S как первый из дочерних узлов узла Node. Индексы последующих узлов увеличиваются на 1

TTreeNode* Insert(TTreeNode* Node, const AnsiString S)

Вставляет новый узел с текстом S сразу после узла Node На то же уровень. Ин­дексы последующих узлов увеличиваются на 1

Каждый из этих методов возвращает вставленный узел. В качестве примера их применения ниже приведен код, формирующий то же дерево, которое вы може­те видеть на рис. 2.40 и 2.41.

TreeViewl->Items->Clear () ; // Очистка списка

// Добавление корневого узла "производство" (индекс 0)

TreeViewl->Items->Add(NULL, "производство");

/* Добавление дочених узлов "цех 1" — "цех 3"

(индексы 1 — 3) */

TreeViewl->Items->AddChild(TreeViewl->Items->Item[0],"цех 1");

TreeViewl->Iterns->AddChiId(TreeViewl->Items->Item[0] , "цех 2");

TreeViewl->Items->AddChild(TreeViewl->Items->Item[0],"цех 3");

/* добавление Корневого узла "управление" после узла "производство" (индекс 4) */

TreeViewl->Items->Add(TreeViewl->Items->Item[0], "управление");

/ добавление дочених узлов "администрация" и "бухгалтерия’‘ узла "управление?"*/

TreeViewl->Items->AddChild(

TreeViewl->Items->Item[4],"администрация");

TreeViewl->Items->AddChild(

TreeViewl->Items->Item[4],"бухгалтерия");

Дерево может быть сколь угодно разветвленным. Например, следующие опе­раторы добавляют дочерние узлы "бригада 1" и "бригада 2" в сформированный ра­нее узел "цех 1":

TreeViewl->Items->AddChild(TreeViewl->Iterns->Item[1],

"бригада 1”);

TreeViewl->Items->AddChild(TreeViewl->Items->Item[1],

"бригада 2");

Текст, связанный с некоторым узлом, можно найти с помощью его свойства Text. Например, TreeViewl->Items->Item[l]->Text Это надпись "цех 1".

С каждым узлом может быть связан некоторый объект. Добавление таких уз­лов осуществляется методами AddObject, AddObjectFirst, InsertObject, AddChild — Object, AddChildObjectFirst, Аналогичными приведенным выше, но содержащими в качестве параметра еще указатель на объект:

[

TreeNode* AddObject(TTreeNode* Node, const AnsiString S, void * Ptr)

Збавляет новый узел с текстом S и объектом Ptr Как последний узел уровня,

I котором расположен Node

TreeNode* AddChildObjectFirstfrTreeNode* Node,

Const AnsiString S, void * Ptr)

Ставляет новый узел с текстом S и объектом Ptr Как первый из узлов уровня,

I котором находится Node. Индексы последующих узлов увеличиваются на 1 TreeNode* AddChildObject(TTreeNode* Node, const AnsiString S, void * Ptr) Обавляет узел с текстом S и объектом Ptr Как последний дочерний узла Node

TreeNode* AddChildObjectFirst(TTreeNode* Node,

Const AnsiString S, void * Ptr)

Вставляет новый узел с текстом S и объектом Ptr Как первый из дочерних уз­лов узла Node. Индексы последующих узлов увеличиваются на 1 TTreeNode* InsertObject(TTreeNode* Node, const AnsiString S, void * Ptr)

Вставляет новый узел с текстом S и объектом Ptr Сразу после узла Node На то же уровень. Индексы последующих узлов увеличиваются на 1

Объект, связанный с некоторым узлом, можно найти с помощью его свойства Data. Например, TreeViewl. Items. Item[lj. Data.

Для удаления узлов имеется два метода: Clear, Очищающий все дерево, и Delete(Node: TTreeNode), Удаляющий указанный узел Node И все его узлы — по­томки. Например, оператор

TreeViewl. Items. Clear;

Объект, связанный с некоторым узлом, можно найти с помощью его свойства Data. Например, TreeViewl->Items->Item[l]->Data.

Для удаления узлов имеется два метода: Clear(void), Очищающий все дерево, и Delete(TTreeNode* Node), Удаляющий указанный узел Node И все его узлы — потомки. Например, оператор

TreeViewl->Items->Clear (); удалит все узлы, а оператор

TrееViewl->Iterns->DeIete(TreeViewl->Iterns->Item[1]);

Удалит узел "цех 1" и его дочерние узлы (если они имеются).

При удалении узлов, связанных с объектами, сами эти объекты не удаляются.

Реорганизация дерева, связанная с созданием или удалением многих узлов, может вызывать неприятное мерцание изображения. Избежать этого можно с по­мощью методов BeginUpdate И EndUpdate. Первый из них запрещает перерисовку дерева, а второй — разрешает. Таким образом, изменение структуры дерева может осуществляться по следующей схеме:

TreeViewl->Items->BeginUpdate() ;

<операторы изменения дерева>

TreeViewl->Items->EndUpdate();

Если метод BeginUpdate Применен подряд несколько раз, то перерисовка дере­ва произойдет только после того, как столько же раз будет применен метод

EndUpdate.

Среди свойств узлов следует отметить Count — число узлов, управляемых дан­ным, т. е. дочерних узлов, их дочерних узлов и т. п. Если значение Count Узла рав­но нулю, значит у него нет дочерних узлов, т. е. он является листом дерева.

Вернемся к свойствам компонента TreeView. Важным свойством компонента TreeView Является Selected. Это свойство указывает узел, который выделен поль­зователем. Пользуясь этим свойством можно запрограммировать операции, кото­рые надо выполнить для выбранного пользователем узла. Если ни один узел не вы­бран, значение Selected Равно NULL, При выделении пользователем нового узла происходят события OnChanging (перед изменением выделения) и OnChanged — после выделения. В обработчик события OnChanging Передаются параметры TTreeNode *Node — узел, который выделен в данный момент, и Bool AAllow — Change — разрешение на перенос выделения. Если в обработчике задать Allow- Change = false, То переключение выделения не произойдет. В обработчик события OnChanged Передается только параметр TTreeNode *Node Выделенный узел. В этом обработчике можно предусмотреть действия, которые должны производит­ся при выделении узла.

У компонента TreeView Имеется свойство RightClickSelect, Разрешающее (при значении равном true) выделение узла щелчком как левой, так и правой кнопкой мыши. Но и в этом случае событие OnChanged Наступает только при вы­делении узла левой кнопкой мыши.

Ряд событий компонента TreeView Связан с развертыванием и свертыванием узлов. При развертывании узла происходят события OnExpanding (перед развер­тыванием) и OnExpanded (после развертывания). В обработчики обоих событий пе­редается параметр TTreeNode *Node — развертываемый узел. Кроме того в обра­ботчик OnExpanding Передается параметр Bool AAllowExpansion, Который можно задать равным False, Если желательно запретить развертывание. При свертывании узла происходят события OnCollapsing (перед свертыванием) и OnCollapsed (после Свертывания). Так же, как и в событиях, связанных с развертыванием, в обработ­чики передается параметр TTreeNode *Node — свертываемый узел, а в обработчик OnCollapsing Дополнительно передается параметр Bool &AllowCollapse, Разре­шающий или запрещающий свертывание.

Свойство ReadOnly Компонента TreeView Позволяет запретить пользователю редактировать отображаемые данные. Если редактирование разрешено, то при ре­дактировании возникают события OnEditing и OnEdited, Аналогичные рассмот­ренным ранее (в обработчике OnEditing Параметр Bool &AllowEdit Позволяет за­претить редактирование).

Ряд свойств компонента TreeView: ShowButtons, ShowLines, ShowRoot Отве­чают за изображение дерева и позволяют отображать или убирать из него кнопки, показывающие раскрытия узла, линии, связывающие узлы, и корневой узел. По­экспериментируйте с этими свойствами и увидите, как они влияют на изображение.

Свойство SortType Позволяет автоматически сортировать ветви и узлы дерева. По умолчанию это свойство равно StNone, Что означает, что дерево не сортируется. Если установить SortType Равным StText, То узлы будут автоматически сортиро­ваться по алфавиту. Возможно также проводить сортировку по связанным с узла­ми объектам Data (значение SortType Равно StData), Одновременно по тексту и объектам Data (значение SortType равно StBoth) Или любым иным способом. Для использования этих возможностей сортировки надо написать обработчик со­бытия OnCompare, В который передаются, в частности, параметры TTreeNode *Nodel И TTreeNode *Node2 Сравниваемые узлы, и параметр Int ACompare, В который надо заносить результат сравнения: отрицательное число, если узел Nodel должен располагаться ранее Node2, 0, Если эти узлы считаются эквивалент­ными, и положительное число, если узел Nodel Должен располагаться в дереве по­сле Node2. Например, следующий оператор в обработчике события OnCompare Обеспечивает обратный алфавитный порядок расположения узлов:

Compare = — AnsiStrIComp(Nodel->Text. c_str(), Node2->Text. с_Str());

События OnComparo Наступают после задания любого значения SortType, От­личного от StNone, И при изменении пользователем свойств узла (например, при редактировании им надписи узла), если значение SortType Не равно StNone. После сортировки первоначальная последовательность узлов в дереве теряется. Поэтому последующее задание SortType = stNone Не восстанавливает начальное располо­жение узлов, но исключает дальнейшую генерацию событий OnCompare, Т. е. авто­матическую перестановку узлов, например, при редактировании их надписей. Если же требуется изменить характер сортировки или провести сортировку с уче­том новых созданных узлов, то надо сначала задать значение SortType = StNone, А затем задать любое значение SortType, Отличное от StNone. При этом будут сге­нерированы новые обращения к обработчику событий OnCompare.

Имеются и другие возможности сортировки. Например, метод AlphaSort(vo — Id) Обеспечивает алфавитную последовательность узлов независимо от значения SortType, Но при отсутствии обработчика событий OnCompare (если обработчик есть, то при выполнении метода AlphaSort происходит обращение к этому обра­ботчику). Отличие метода AlphaSort От задания значения SortType = stText За­ключается в том, что изменение надписей узлов приводит к автоматической пере­сортировке дерева только при SortType = stText.

Основные свойства

Свойство

■ — ■ —— . I —.

Объявление / Описание

AutoExpand

Bool AutoExpand

Определяет, раскрываются ли и свертываются ли узлы автома­тически в зависимости от выбора в просматриваемом дереве

Canvas

Graphics: :TCanvas* Canvas

Канва дерева. Ее свойства и метода можно исрользовать в обра­ботчиках событий OnCustomDraw и OnCustomDrawItem для рисования собственных изображений

ChangeDelay

Int ChangeDelay

Определяет задержку между моментом выбора узла и моментом события OnChange

DropTarget

TTreeNode* DropTarget

Определяет, какой элемент дерева появляется в результате опе­рации перетаскивания Drag&Drop

HotTrack

Bool HotTrack

Определяет, выделяются ли цветом элементы, над которыми проходит курсор мыши

Images

ImglistaTCustomImageList* Images

Определяет, какой список изображений ImageList, связан с де­ревом

Indent

Int Indent

Определяет отступ, в пикселах, отделяющий родительские узлы от дочерних при раскрытии списка дочерних узлов

Items

I

TTreeNodes* Items

Индекисрованный список узлов дерева

Свойство

Объявление / Описание

Readonly

Bool ReadOnly

Указывает, может ли пользователь изменять текст надписей уз­лов дерева

RightClick

Select

Bool RightClickSelect

Определяет, возвращает ли свойство Selected узлы, выбранные с помощью правой кнопки мыши

RowSelect

Bool RowSelect

Определяет, выделяется ли цветом ряд выделенного элемента

Selected

TTreeNode* Selected ‘

Выбранный узел дерева

SliowButtons

Bool ShowButtons

Определяет, отображаются ли кнопки со знаками "+" (раскрыть узел) и ” ” (свернуть узел) с левой стороны каждого родитель­ского элемента

ShowLines

Bool ShowLines

Определяет, видны ли линии, связывающие дочерние узлы с со­ответствующими родительскими узлами

ShowRoot

Bool ShowRoot

Определяет, отображаются ли линии, соединяющие узлы верх­него уровня дерева с его корнем

SortType

Enum TSortType { stNone, stData, stText, stBoth };

TSortType SortType

Позволяет автоматически сортировать ветви и узлы дерева: stNo — пе — дерево не сортируется, stText — сортировка по алфавиту, stData — сортировка по связанным с узлами объектам Data, stBoth — сортировка одновременно по тексту и объектам Data или любым иным способом. Для использования этих возможно­стей сортировки надо написать обработчик события ОпСотраге

StateImages

ImglistnTCustomImageList* StateImages

Список изображений ImageList, используемый для добавления вторых пиктограмм в узлы. Подобные пиктограммы могут слу­жить дополнительной характеристикой отдельных узлов

ToolTips

Bool ToolTips

Определяет, снабжены ли элементы дерева подсказками. Сами тексты подсказок надо задавать в обработчике события OnHint, используя свойство Hint

TopItem

TTreeNode* Topltem

Определяет самый верхний видимый узел

Основные методы!

Метод

Объявление / Описание

AlphaSort

Bool AlphaSort(bool ARecurse = true)

Обеспечивает алфавитную последовательность узлов независимо от значения SortType, Но при отсутствии обработчика событий OnCompare (если обработчик есть, то при выполнении метода AlphaSort происходит обращение к этому обработчику). Отли­чие метода от задания значения SortType = stText заключается в том, что изменение надписей узлов приводит к автоматиче­ской пересортировке дерева только при SortType = stText

CustomSort

LPARAM lParam2, LPARAM IParamSort); Bool CustomSort(PFNTVCOMPARE SortProc, int Data;

Bool ARecurse = true)

Сортирует узлы в последовательности, определяемой указанной функцией SortProc

FullCollapse

Void FullCollapse(Void)

Свертывает все узлы дерева

FullExpand

Void FullExpand(void)

Раскрывает все узлы дерева

GetNodeAt

TTreeNode* GetNodeAt(int X, int Y)

Возвращает узел, найденный в указанной позиции

IsEditing

Bool IsEditing(void)

Указывает, редактируется ли в данный момент пользователем надпись узла

LoadFrom

File

Void LoadFromFile(const AnsiString FileName)

Считывает указанный и загружает данные в дерево

LoadFrom

Stream

Void LoadFromStream(Classes::TStream* Stream)

Загружает в дерево данные из потока

SaveToFile

Void SaveToFile(const AnsiString FileName)

Сохраняет дерево в файле с указанным именем

SaveTo

Stream

Void SaveToStream(Classes"TStream* Stream)

Записывает данные дерева в поток

Основные события

Событие

Описание

OnAdvanced

Событие происходит в процессе прорисовки дерева. Обработ-

CustomDraw Чик может использоваться для нестандартного рисования на

Канве

OnAdvanced

CustomDraw

Item

Событие происходит в процессе рисования узлов дерева. Обра­ботчик может использоваться для нестандартного рисования узлов на канве

Событие

Описание

OnChange

Событие происходит после перемещения выделения на другой узел?

OnChanging

Событие происходит перед перемещением выделения на дру­гой узел. Обработчик позволяет запретить перемещение

OnColIapsed

Событие происходит после свертывания узла

OnCollapsing

Событие происходит перед свертыванием узла. Обработчик позволяет запретить перемещение

) OnCompare

Событие происходит во время сравнения двух узлов в процес­се сортировки узлов дерева. Обработчик должен сообщить, ка­кой из двух переданных в него узлов должен быть располо­жен выше другого

OnCustomDraw

Событие происходит перед прорисовкой дерева. Обработчик может использоваться для нестандартного изображения дере­ва на канве

∣∣ OnCustomDraw Item

Событие происходит перед прорисовкой узла. Обработчик мо­жет использоваться для нестандартного изображения узла на канве

J OnDeletion

Событие происходит при удалении узла из дерева

J OnEdited

Событие происходит после редактирования пользователем надписи узла

OnEditing

Событие происходит, когда пользователь начинает редактиро­вать надпись узла. Обработчик позволяет запретить редакти­рование

OnExpanded

Событие происходит после раскрытия узла

‘ OnExpanding

Событие происходит перед раскрытием узла. Обработчик по­зволяет запретить раскрытие

OnGetImage

Index

Событие происходит, когда отыскивается индекс изображения узла перед тем, как его нарисовать. Обработчик может испо­льзоваться для изменения изображения

. OnGetSelected Index

Событие происходит, когда отыскивается индекс изображения выбранного узла перед тем, как его нарисовать. Обработчик может использоваться для изменения изображения

Глава 3

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *