Методы компонентов И классов C++Builder

В этой главе приведены развернутые описания около 200 методов компонен­тов и классов C++Builder. Для многих методов даются примеры их применения. Конечно, это далеко не все методы. Для многих других методов вы можете найти краткие описания в главах 1 и 2.

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

Значительно большее количество описаний различных методов вы можете

Найти в источнике [3].

Навигация по наборам данных___________________________________

Методы перемещают курсор набора данных.

определения
void fast call
void fastcall
void fastcall
void fastcall
int fastcall
bool fastcall
bool fastcall
bool fastcall
bool fastcall
Классы TDatASet

First(void);

Last(void);

Next(void);

Prior(void);

MoveBy(int Distance) FindFirst(Void); FindLast(void); FindNext(void); FindPrior(void);

Описание

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

Процедуры First, Last, Next, Prior Перемещают курсор набора данных соот­ветственно к первой, последней, следующей и предыдущей записям. Процедура First Устанавливает в True Свойство Bof — первая запись. Процедура Prior Тоже ус­танавливает Bof В True, Если текущая запись уже была первой. Процедура Last Ус­танавливает в true свойство Eof — последняя запись. Процедура Next тоже уста­навливает Eof В True, Если текущая запись уже была последней.

Функция MoveBy Перемещает курсор на Distance Записей и возвращает число записей, на которые переместился курсор. При положительном значении Distance Перемещение происходит по направлению к последней записи, при отрицатель­ном — по направлению к первой записи. Если значение Distance Требует выхода за пределы набора данных, то курсор останавливается на крайней (последней или первой) записи и свойство Eof или Bof Устанавливается в True. При этом возвра­щенное функцией значение окажется меньше, чем модуль Distance.

Функции FindFirst, FindLast, FindNext, FindPrior Перемещают курсор так же, как процедуры First, Last, Next, Prior. При этом они возвращают true при ус­пешном перемещении. Свойства Eof и Bof не устанавливаются.

Примеры

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

Следующим кодом:

CBdep->Clear() ;

Tablel-Xirst() ;

While (! Tablel->Eof)

{ .

CBdep->Items->Add (Tablel->FieldByNaπιe("Dep")->AsString);

Tablel->Next ();

}

Первый оператор кода очищает список CBdep. Второй — устанавливает кур­сор таблицы на первую запись. Далее следует цикл по всем записям, пока не дос­тигнута последняя, что проверяется выражением Tablet — >Eof. Для каждой запи­си в список заносится значение поля Dep, после чего методом Next курсор переме­щается к следующей записи.

Вместо метода FieldByName Можно применить метод FindField:

CBdeρ->Items->Add(Tablel->FindField(‘,Dep")->AsString);

Отличие проявится только в случае, если поля Dep в наборе данных не ока­жется. Тогда метод FieldByName Сгенерирует исключение, а метод FindField Вер­нет NULL.

Ниже приведен аналогичный пример, но просматривающий записи в направ­лении от последней к первой.

CBdep-Xlear () ; .

Tablel->Last () ;

While (! Tablel->Bof)

CBdep->Items->Add(Tablel-XieldByName("Dep")->AsString) Tablel->Prior () ;

В приведенных примерах вместо методов First, Next, Last И Prior Можно ис­пользовать методы FindFirst, FindNext, FindLast И FindPrior, Осуществляющие навигацию и возвращающие True При ее успешном завершении. Например:

CBdep-Xlear () ;

Tablel-XindFirst О ; do

CBdep->Items->Add(Tablel-XindField("Dep")->AsΞtring); while (Tablel-XindNextO);

Описание

Метод Add Создает новый объект TCoHectionIteni и добавляет его в конец мас­сива Items. Возвращает созданный объект.

Пример

См. пример в разделе « BeginUpdate ».

Add — метод TFieldDefs__________________________________________

Создает новый объект описания поля и добавляет его в свойство Items Объекта TFieldDefs

Класс -TFieldDefs

Определение

HIDESBASE void fastcall Add(const AnsiString Name,

TFieldType DataType, int Size, bool Required) ;

Описание

Метод Add Оставлен только для обратной совместимости. В новых приложени­ях следует использовать метод AddFieldDef.

Метод создает новый объект описания поля и добавляет его в свойство Items объекта TFieldDefs. Параметры Name, DataType, Size, Required Передаются в значения соответствующих свойств объекта описания поля. Если описание поля с тем же именем уже существует, то генерируется исключение EDatabaseError.

Пример

См. пример в разделе «CreateTableo.

Add — метод списков____________________________________________

Функция добавляет новый элемент в список.

Классы TLisT, TStrinsLisT, TStrinss

Определения

Для TList:

Int____ fastcall Add(void * Item);

Для TStrings и TStringList:

Virtual int__________ fastcall Add(const System: :AnsiStrinc S) ;

Описание

Функция Add Добавляет новый элемент в список. Если список не сортирован­ный, то элемент добавляется в конец списка. Если же список сортированный, то новый элемент добавляется в позицию, которая определяется сортировкой. Функ­ция возвращает индекс добавленного элемента (индекс первого элемента — 0). Увеличивает значение свойства Count На 1. Если значение Count Равно значению Capacity (емкости массива), то увеличивается значение Capacity (с запасом) и пе­рераспределяется память под новые элементы.

Для сортированного списка TStringList При выполнении Add Генерируется исключение EListError, если строка S уже имеется в списке и свойство Duplicates Установлено в DupError.

Примеры

См. в гл. 1 примеры в разд. «TList — класс» и «TStrings — класс».

AddFieldDef — метод TFieldDefs____________________________________

Создает новый объект описания поля и добавляет его в свойство Items объекта TFieldDefs.

Класс TFieldDefs

Определение

TFieldDef* fastcall AddFieldDef (void) ;

Описание

Метод AddFieldDef Создает новый объект описания поля типа TFieldDef И до­бавляет его в свойство Items Объекта TFieldDefs. Возвращается созданный объект описания. После вызова AddFieldDef Можно задать свойства созданного описания Name, DataType, Size, Required.

Метод AddFieldDef Применяется только для последующего создания новой таблицы методами CreateTable или CreateDataSet. Для добавления поля в уже су­ществующую таблицу метод использовать нельзя.

Пример

См. пример в разделе «CreateTable ».

AddIndex — метод TcustomClientDataSet____________________________

Создает и добавляет новый индекс в клиентский набор данных.

Класс _ TcustomClientDataSet

Объявление

Void fastcall AddIndextconst AnsiString Name,

Const AnsiString Fields,

Dbr—TIndexOptions Options, const AnsiString DescFields = "", const AnsiString CaseInsFields = "", const int GroupingLevel = O) ;

Описание

Метод Addlndex Создает и добавляет в клиентский набор данных новый ин­декс. Параметр Name Задает имя создаваемого индекса. Параметр Fields задает список полей, по которым проводится индексация. Имена полей отделяются друг от друга точками с запятой. Параметр Options Задает множество опций сортиров­ки, которое может включать значения IxCaselnsensitive — нечувствительность к регистру при сортировке строковых полей, и ixDescending — сортировка в по­рядке убывания значений полей. По умолчанию обе опции отсутствуют.

Параметры DescFields И CaselnsFields Дают альтернативный вариант задания опций сортировки. Параметр DescFields Может содержать строку, в которой пере­числяются через точку с запятой те поля, по которым сортировка должна прово­дится в порядке убывания значений. А параметр CaselnsFields Может содержать строку, в которой перечисляются через точку с запятой те строковые поля, по ко­торым при сортировке не должен учитываться регистр. Таким образом, параметры DescFields И CaselnsFields, В отличие от параметра Options, Позволяют задать раз­ные опции сортировки по разным полям.

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

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

Примеры

Пусть в приложении имеется клиентский набор данных ClientDataSetl И вы­падающий список ComboBoxI.. Мы хотим заполнить ComboBoxl Именами полей набора данных и предоставить пользователю возможность, выбрав в списке нуж­ное поле, обеспечить индексацию данных по этому полю.

Для решения этой задачи в обработчик события формы OnCreate Надо вста­вить операторы:

ComboBoxl->Items->Assign(ClientDataΞetl->FieldList);

ComboBoxl->ItemIndex = 0;

Первый из этих операторов заносит в ComboBoxl Список полей, предоставляе­мый свойством FieldList.

Для обеспечения индексации по выбранному пользователем полю в обработ­чик события OnChange компонента ComboBoxl Можно вставить оператор, задаю­щий значение IndexFieldNames:

ClientDataSetl->IndexFieldNames = ComboBoxl->Text;

То же самое можно сделать, используя метод AddIndex:

ClientDataSetl->AddIndex(ComboBoxl->Text + "Index",

ComboBoxl->Text,

TIndexOptions() « ixCaselnsensitive,

H Il II H О ) •

ClientDataSetl->IndexName = ComboBoxl->Text + "Index";

Первый оператор формирует индекс с именем "<имя πojιa>Index". В список индекса заносится имя выбранного поля и задается опция, обеспечивающая нечув­ствительность сортировки к регистру. Второй оператор индексирует набор по сформированному индексу.

В приведенном примере сортировка всегда осуществляется в направлении уве­личения значения выбранного пользователем поля. Добавим в приложение группу радиокнопок KadioGroupl, Которая позволит пользователю выбирать направление сортировки: нарастание или убывание. Тогда приведенный выше обработчик собы­тия OnChange Компонента ComboBoxl, Использующий Addlndex, Можно изме­нить так:

AnsiString SDesc =

// Формирование строки параметра DescFields

If (RadioGroupl->ItemIndex == 1)

SDesc = ComboBoxl->Text;

ClientDataSetl->AddIndex(ComboBoxl->Text + SDesc,

ComboBoxl->Text,

TlndexOptionsO << ixCaselnsensitive, SDesc, "",O) ;

ClientDataSetl->IndexName = ComboBoxl->Text + SDesc;

На этот же обработчик надо сослаться в событии OnChange Компонента RadioGroupl. В Приведенном коде несколько изменено имя индекса, но главное отличие от предыдущего варианта — задание направления сортировки не опция­ми, а параметром DescFields, В который заносится строка SDesc: Пустая или с име­нем поля в зависимости от выбранной пользователем радиокнопки в компоненте RadioGroupl.

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

При использовании свойства IndexFieldNames Общий обработчик событий

Всех списков может иметь вид:

ClientDataSetl->IndexFieldNames = ComboBoxl->Text +

+ ComboBox2->Text;

Но в этом варианте нельзя выбирать направление сортировки. Это можно сде­лать методом AddIndex. В этом случае общий обработчик событий всех списков и радиокнопок может иметь вид:

AnsiString SDesc ≈ "", SName = ComboBoxl->Text if (RadioGroupl-J-ItemIndex == 1)

// формирование Имени и строки параметра DescFields SDesc = ComboBoxl-J-Text +

SName +=

}

If (ComboBox2-J>Text == ComboBoxl-J-Text)

/ / Если ключи одинаковы, второй Юиоч. Игнорируется

RadioGroup2->ItemIndex = RadioGroupl-J-ItemIndex; RadioGroup2-J-Enabled = false;

}

Else

{

// Формирование имени и строки параметра DescFields SName += ComboBox2-J-Text;

RadioGrouρ2->Enabled = true; if (RadioGroup2-J∙ItemIndex == 1)

SDesc += ComboBox2->Text;

SName += "_Desc";

}

)

ClientDataSetl->AddIndex(SName, ComboBoxl->Text + +

ComboBox2->Text, TlndexOptionsO « ixCaselnsensitive,

SDesc, "",O) ;

ClientDataSetl->IndexName — SName;

Приведенные примеры можно дополнить выпадающим списком, содержащим все индексы, определенные пользователем в данном сеанса. С его помощью пользо­ватель может легко переключаться между разными индексами. Введя такой спи­сок (назовем его CBIndex), Надо добавить в конце обработчика события OnChange Компонента ComboBoxl Операторы:

ClientDataSetl->GetIndexNames(CBIndex->Items);

CBIndex-J-ItemIndex =

CBIndex->Iterns->IndexOf(ClientDataSetl->IndexName);

В них используется метод GetIndexNames Для получения списка индексов. В обработчик события OnChange Компонента CBIndex Надо вставить оператор:

ClientDataSetl-J-IndexName = CBIndex->Text;

Который заменяет текущий индекс тем, который выбрал пользователь.

Append И AppendRecord — метОды TDataSet

Добавляют новую запись в набор данных.

Класс TDataSet Определения

Void _ fastcall Append (void) ;

Void _fastcall AppendRecord(const System::TVarRec * Values, const int Values Size) ;

Описание

Метод Append Добавляет новую пустую запись в конец набора данных и делает ее активной. После этого можно вводить данные в ее поля и пересылать эти данные в базу данных методами Post или ApplvUpdates (если производится кэширование).

Метод AppendRccord добавляет в набор данных новую запись, заполняет ее поля значениями, перечисленными в параметре Values, и пересылает в базу дан­ных. Новая запись делается активной. В массиве Values заносимые значения пере­числяются в той последовательности, в которой расположены поля таблицы. На месте значений тех полей, в которые данные не заносятся, пишется NULL. После записи последнего ненулевого значения список Values Можно прервать, т. е. не указывать в нем NULL Для остальных не заполняемых полей (см. примеры).

Если в записи имеются поля, являющиеся немодифицируемым, например, ав­томатически нарастающими (AutoIiierement), то вместо значения такого поля надо указывать NULL.

Место новой записи в базе данных определяется следующими правилами:

• Для индексированных таблиц Paradox и dBASE запись вставляется в пози­цию, соответствующую индексу

• Для неиндексированных таблиц Paradox и dBASE запись вставляется в конец

Набора данных

• Для баз данных SQL место расположения новой записи зависит от реализации базы данных. Для индексированных таблиц индекс обновляется с учетом но­вой записи

Имеется еще два метода внесения новой записи в набор данных — методы Insert и InsertRecord. Они отличаются от рассмотренных только позицией разме­щения записи в физической базе данных.

Примеры

Следующие операторы создают новую запись, заполняют ее поля Fam, Nam, Par (Фамилия, Имя, Отчество) значениями, введенными в окна редактирования Edit!, Edit2, Edit3 и пересылают запись в базу данных.

Tablel->Append() ;

Tablel->FieldValues["Fam"] = Editl->Text;

Tablel->FieldValues["Nam"] = Edit2->Text;

‘ Tablel->FieldValues["Par"] = Edit3->Text;

Tablel->Post();

Tablel. Post;

В приведенном примере метод Append Можно было бы заменить методом Insert. Никакой разницы в результатах не было бы, кроме, возможно, несколько иного размещения новой записи в базе данных.

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

Tablel-AAppendRecord(ARRAYOFCONST(

(18, NULL, Editl->Text, Edit2->Text, Edit3->Text)));

Этот оператор нельзя применить, например, если первое поле (номер записи) является автоматически нарастающим (Autolncrement), т. е. не модифицируемым.

В приведенном примере метод AppendRecord Можно было бы заменить мето­дом InsertRecord. Никакой разницы в результатах не было бы, кроме, возможно, несколько иного размещения новой записи в базе данных.

ApplyUpdates — метод TBDEDataSet _

Записывает Кэшированные Изменения в базу данных.

Класс TBDEDataSet Объявление

Void _ fastcall ApplyUpdates (void) ;

Описание

Метод ApplyUpdates Записывает кэшированные изменения в базу данных. Данные передаются в базу данных на хранение, но не фиксируются там. Для их фиксации в случае успешной пересылки в базу данных надо вызвать явным обра­зом метод Commit. Если же обнаруживается, что фиксация не требуется, то можно отменить все изменения методом Rollback.

После успешной фиксации изменений в базе данных следует вызвать метод CommitUpdates. чтобы очистить буфер изменений.

Для записи и фиксации изменений в базе данных желательно использовать методы компонента базы данных TDatabase.

Примеры

В приведенном ниже обработчике события формы OnCloseQuery Предполага­ется, что приложение содержит компонент Queryl И изменения в этом наборе дан­ных кэшируются. Обработчик выполняет следующие функции. При наличии не сохраненных изменений пользователю задается вопрос «Сохранить изменения в базе данных?». При положительном ответе изменения сохраняются методом ApplyUpdates. При отрицательном — — изменения отменяются методом Cancel — Updates. Если при получении запроса пользователь нажал кнопку Отмена, то при­ложение не закрывается (CanClose Задается равным F s

Void _fastcall TForml: :FormCloseQuery(TObject *Sender, bool SCanClose)

{

If (Queryl-J-CachedUpdates)

{

Switch (Application-JMessageBoxf"Сохранить изменения в базе данных?", "Подтвердите сохранение изменений", MB_YESNOCANCEL+MB_ICONQUESTION))

{

Case IDYES: Queryl->ApplyUpdates() ;

Break;

Case IDCANCEL:CanClose = false;

Break;

Case IDNO: Queryl->CancelUpdates() ;

1

)

)

См. также пример в гл. 5, в разд. «AfterClose и BeforeClose».

ApplyUpdates, Reconcile — методы TcustomClientDataSet

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

Класс TcustomClientDataSet

Объявления

Virtual int _ fastcall ApplyUpdates (int MaxErrors) ;

Bool _fastcall Reconcile(const System: : OleVariant SResults) ;

Описание

Метод ApplyUpdates вызывается для того, чтобы занести все изменения, вставки и удаления записей, сделанные в клиентском наборе данных, в базу дан­ных или в источник данных. Параметр MaxErrors определяет максимальное число ошибок, после которого попытка изменения базы данных прерывается. Значение -1 указывает, что выполнение ApplyUpdates Не прервется при любом числе оши­бок. Метод возвращает число ошибок, возникших при обновлении базы данных.

При выполнении ApplyUpdates Производятся следующие операции:

1. Генерируется событие BeforeApplyUpdates.

2. Происходит передача провайдеру значения Delta, содержащего все измене­ния. Те изменения, которые при попытке записи их в базу данных вызывают ошибки, запоминаются.

3. Генерируется событие AfterApplyUpdates.

4. Вызывается метод Reconcile. Он очищает те кэшированные изменения клиен­тского набора, которые успешно передались в базу данных, и возвращает за­писи, вызвавшие ошибки и запомненные на шаге 2.

При вызове метода Reconcile Записи, не внесенные в базу данных, вместе с со­общениями об ошибках возвращаются в параметр Results. Для каждой записи, со­держащейся в Results, генерируется событие OnReeoneileError, в обработчике ко­торого можно принять решение, что делать с ошибочной записью. В результате все ошибочные записи с учетом действий, предпринятых в обработчике событий OnReconcileError, Помещаются в свойство Delta Клиентского набора данных. Ме­тод возвращает true, если ошибок не возникало или они устранены.

См. в гл. 5 разд. «On Reconcile Error, OnUpdateError — события TCustomClient — DataSet >>.

Assign — Метод TCollection________________________________________

Копирует содержимое собрания объектов в другой контейнер.

Класс TCollecTion

Объявление

Virtual void fastcall Assign(TPersistent* Source);

Описание

Метод Assign Копирует содержимое собрания объектов, указанного парамет­ром Source, В то собрание, к которому применен метод. При этом в данном собра­нии удаляются все имеющиеся объекты в свойстве Items И для каждого элемента массива Items Источника Source Создается его копия в массиве Items Данной кол­Лекции.

Assign — метод TField____________________________________________

Копирует в свойство Value Значение другого поля или другого объекта.

Класс TField

Объявление

Virtual void_______ fastcall Assign(Classes::TPersistent* Source);

Описание

Метод Assign копирует в свойство Value Значение другого поля Source Или другого объекта. При копировании значений полей они должны быть совместимых типов. Если Source — другой объект поля, то Assign вызывает метод Assign Value, Используя Source Как значение Value Поля. Если Source = NULL, То значение поля очищается.

Если Source — объект, отличный от поля, то вызывается метод AssignTo. По­зволяющий присваивание данного значения объекту TField.

Примеры

Следующий оператор копирует графическое поле в поле BLOB: BlobFieldl->Assign(GraphicFieldl) ;

Следующий оператор копирует строки из компонента Memo В поле ТМето — Field:

MemoFieldl->Assign(Memol->Lines) ;

Assign — метод TFieldDef_________________________________________

Копирует одно описание поля в другое.

Класс TFieldDef

Объявление

Virtual void fastcall Assign(Classes::TPersistent* Source);

Описание

Метод Assign Копирует описание поля Source В данное описание типа TField — Def. Копируются такие свойства, как Name, DataType. Size. Precision. Internal — CalcFielD. Значение свойства FiEldNO Не изменяется.

Если Source Не является описанием поля, то Assign Вызывает наследуемые методы копирования, объявленные как копирование описания поля в их методах AssignTo.

Assign — метод графических объектов______________________________

Копирует изображение одного графического объекта в другой.

Классы TCrapfetc. TBttMap. TIcon, TMetaFile Объявление

Virtual void________ fastcall Assign(Classes::TPersistent * Source);

Описание

Метод Assign Копирует изображение, содержащееся в объекте Source, В Дан­ный объект. Типы объектов источника и приемника должны быть одинаковыми. Исключение составляет свойство Graphic Объекта TPieture. Graphic Может участ­вовать в обменах изображениями с объектами типов TBitMap. TIcon. TMetaFile.

Объектом копирования для классов TBitMap. TIcon. TMetaFile Может быть также буфер обмена — объект Clipboard. При этом надо не забыть включить в опе­ратор Uses Приложения ссылку на модуль Clipbrd. Свойство Graphic Объекта TPicture Может участвовать только в копировании в буфер обмена, но не в копиро­вании из буфера.

Примеры

1. Все шесть приведенных ниже операторов делают одно и то же: копируют изоб­ражение из компонента Image2 В компонент Imagel. Но последний из них вы­полняется успешно только в том случае, если тип графического объекта в Ima-

Ge2 TBitMap.

imagel->picture- imagel->picture- imagel->picture- iπɪagel->picture- imagel->picture- imagel->picture->Bitmap->Assign(Image2->Picture->Bitmap); >Graphic->Assign(Image2->Picture->Bitmap); >Graphic->Assign(Image2->Picture->Icon); >Graphic->Assign (Image2->Pictur, e->MetaFile) ; >Graphic->Assign(Image2->Picture->Graphic); >Bitmap->Assign(Image2->Picture->Graphic);

2. Каждый из приведенных ниже операторов копирует изображение из компо­нента Imagel В буфер обмена Clipboard.

♦include <vcl∖Clipbrd. hpp>

Clipboard()->Assign(Imagel->Picture->Bitmap);

Clipboard()->Assign(Imagel->Picture->Graphic);

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

Imagel->Picture->Bitmap->Assign(Clipboard());

Assign — методкопирования объектов

Копирует один объект в другой, создавая копию всех данных объекта.

Класс TPersistenT

Объявление

Virtual void__________ fastcall Assign (TPersistent* Source);

Описание

Метод Assign Копирует данные одного объекта в другой. Объявлен в классе

TPersistent И перегружен в классах, производных от него. Некоторое число клас­сов C+t Builder поддерживает присваивание объектов разных типов. Для большин­ства же классов, производных от TPersistent, Применение Assign к несовпадаю­щим типам объектов источника и назначения ведет к генерации исключения EConvertError.

Метод Assign отличается по результатам от операции присваивания <объект-назначение> := <объект-источник>;

При присваивании указатель на <объект-назначение> начинает указывать на

<объект-источник>. А метод Assign Создает новую копию объекта. После применения Assign Имеется два объекта с одинаковыми данными.

Если объекты разного типа, то при вызове D-Assign(S) тип D Должен «знать», как скопировать в него тип S (тип S может ничего не знать о преобразовании ти­пов). Если метод Assign Не может осуществить преобразование типов, то он вызы­вает защищенный метод AssignTO. объявленный в классе TPersistent И перегру­женный в классах, производных от него. Вызов имеет вид S-AssignTo(D). Если и метод AssignTo Не может осуществить преобразование или если он не перегру­жен, то вызывается AssignTo Класса TPersistent И генерируется исключение.

Примеры

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

If (FontDialogOExecute () )

Font->Assign(FontDialogl->Font) ;

2. В программе объявлено и заполнено два списка SL1 и SL2 типа TStringList. На Форме имеется компонент ComboBoxl, В котором надо отображать один из списков SL1 Или SL2 в зависимости от того, какая кнопка с флажком нажата в группе радиокнопок RadioGroupl. Тогда в событие OnClick Этой группы ра­диокнопок надо вставить обработчик, показанный ниже. Последний оператор ComboBoxl-MtemIndex = 0 Необходим, чтобы изменение списка сразу ото­бразилось на экране.

If (RadioGroupl->ItemIndex == 0)

ComboBoxl->Items->Assign(SLl) ;

Else ComboBoxl->Items->Assign(SL2);

ComboBoxl->ItemIndex ≈ 0;

3. Метод Assign Позволяет проводить обмен данными между совершенно разно­родными компонентами, например, компонентом буфера обмена TClipboard И графическим объектом TBitmap. Записать изображение в буфер можно опе­ратором

(!include <vcl∖Clipbrd. hpp>

Clipboard()->Assign(Bitmap); а прочитать из него изображение можно оператором

Bitmap->Assign(Clipboard()) ;

AssignTo_______________________________________________________

Копирует один объект в другой, создавая копию всех данных объекта, являет­ся защищенным вариантом метода Assign.

Класс TContjxiL

Объявление

Virtual void fastcall AssignTotciassesziTPersistent* Dest);

Где Dest — объект, в который производится копирование.

Пояснения см. в разделе Assign.

BeginDrag______________________________________________________

Начало процесса перетаскивания компонента.

Класс TControl

Объявление

Void___ fastcall BeginDrag(bool Immediate, int Threshold);

Описание

Метод BeginDrag вызывается, когда начинается процесс перетаскивания (drag­ging) компонента. Его необходимо вызывать, только если значение свойства Drag­Mode Компонента равно (ImManual. В Противном случае процесс перетаскивания производится автоматически.

Вызов метода BeginDrag Целесообразно вставлять в обработчик события On — MouseDown. Параметр Immediate (немедленно) определяет, сразу ли после нажа­тия кнопки мыши ее указатель изменит вид на тот, который задан свойством DragCursor. и сразу ли начнется процесс перетаскивания. Если параметр Imme­diate Задан равным False, То указатель мыши не изменяет свой вид и процесс пере­таскивания не начинается, пока пользователь не сместит указатель на небольшое расстояние в 5 пикселов. Это позволяет компоненту воспринимать щелчок мыши, не начиная операцию перетаскивания.

Пример

Пример применения метода см. в разд. «OnDragDrop» гл. 5.

BeginUpdate______________________________________

Предотвращает перерисовку до выполнения метода EndUpdate. Класс

Объявление

Void______ fastcall BeginUpdate (void) ;

Описание

Метод BeginUpdate Предотвращает перерисовку экрана вплоть до выполнения метода EndUpdate. Метод имеет смысл применять перед началом изменения объ­ектов, входящих в собрание некоторого визуального компонента. Тем самым уско­ряется изменение перечня объектов собрания и предотвращается неприятное мер­цание изображения в процессе изменения перечня объектов.

Пример

Следующий пример создает в компоненте CoolBarl три новых полосы и дает им заголовки с номерами полос. Применение методов BeginUpdate И EndUpdate Предотвращает мерцание изображения в процессе создания новых полос.

CoolBarl->Bands->BeginUpdate(); for (int i=l; i <= 3; i + + )

(

CoolBarl->Bands->Add();

CoolBarl->Bands->Items[CoolBarl->Bands->Count-l]->Text =

"Полоса " + IntToStr (CoolBarl->Bands->Count);

}

CoolBarl->Bands->EndUpdate ();

BookmarkValid, CompareBookmarks, GetBookmark,

GotoBookmark, FreeBookmark_____________________________________

Обеспечивают работу с закладками наборов данных.

Классы TDataSet, TBDEDataSet Определения

__ property AnsiString Bookmark

Virtual bool_______ fastcall BookmarkValid(void * Bookmark);

Virtual int fastcall CompareBookmarks(void * Bookmarkl,

Void * Bookmark2);

Virtual void * fastcall GetBookmark(void);

Void____ fastcall GotoBookmark(void * Bookmark);

Virtual void_______ fastcall FreeBookmark (void * Bookmark) ;

Описание

Закладка — это метка, которой можно пометить запись набора данных, чтобы впоследствии быстро переходить на нее (см. в гл. 3 свойство Bookmark). Закладки позволяют пометить одну или несколько записей набора данных и затем при необ­ходимости быстро переходить на них. Свойство Bookmark — текущая закладка (ею становится каждая новая закладка) и методы работы с закладками Book — MarkValid, CompareBookmarks, GetBookmark, GotoBookmark, FreeBookmark Объявлены в классе TDataSet И переопределены в классе TBDEDataSet.

Чтобы создать новую закладку в приложении, надо объявить переменную типа TBookniark и присвоить ей функцией GetBookmark Значение, соответствую­щее текущей записи. Процедура GotoBookmark Позволяет в дальнейшем в любой момент перейти на запись, к которой относится введенная вами закладка. Метод FreeBookmark Освобождает память, выделенную под закладку. Этот метод необхо­димо вызывать перед тем, как присвоить вашей переменной типа TBookmark Но­вое значение.

Перед переходом на закладку можно проверить, доступна ли она, методом BookmarkValid. Он вернет True, Если указанная в его параметре закладка сущест­вует. Метод CompareBookmarks Позволяет сравнить две закладки Bookmarkl

И Bookmark2, В частности, установить, не указывают ли они на одну и ту же за­пись. Этот метод возвращает -1, если Bookmarkl < Bookmark2, Возвращает 1,

Если Bookmarkl > Bookmark2, И возвращает 0, если закладки идентичны или рав­ны NULL.

Пример

Пример работы с закладками см. в гл. 3, в разд. «Bookmark».

BringToFront___________________________________________________

Перенос компонента наверх Z-последовательности.

Класс TControI Объявление

Void_____ fastcall BringToFront(void);

Описание

Метод BringToFront Позволяет изменять последовательность перекрытия ком­понентов на форме и тем самым управлять видимостью компонентов.

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

Это справедливо по отношению к неоконным объектам, таким, как кнопки, метки, изображения и т. д., а также и к оконным компонентам, таким, как Memo, ComboBox и др. Но все неоконные компоненты всегда расположены в Z-последова­тельности ниже оконных и метод BringToFront Не может изменить это правило. Например, попытка перенести наверх методом BringToFront Метку, размещенную под оконным компонентом, ни к чему не приведет.

Примеры

1. Пусть вы хотите, чтобы в каком-то месте формы размещалась кнопка, которая в зависимости от текущего режима работы имела бы два различных набора свойств и выполняла бы различные функции. Вы можете разместить в нуж­ном месте две кнопки друг на друге (пусть они имеют имена Buttonl И But — Ton2), задать каждой нужные свойства и для каждой описать соответствую­щие обработчики событий. Тогда для смены этих кнопок вы в соответствую­щих местах кода программы пишете операторы

Buttonl->BringToFront();

ИЛИ

Button2->BringToFront ();

И пользователь будет видеть то одну, то другую из этих кнопок.

2. Пусть в приложении в одном и том же месте формы друг на друге расположе­ны две панели: Panell и на Ней Рапе12, Содержащие какие-то управляющие компоненты для разных режимов работы. Рапе12 Расположена на Panell, ко­торая является, таким образом, ее родителем. В обработчик события формы OnCreate Можно вставить операторы:

Panel2->Parent = Forml;

Panei2->BoundsRect = Panell->BoundsRect;

Panell->BringToFront () ;

Первый оператор делает родительским компонентом панели Рапе12 форму Forml. Второй оператор задает панели Рапе12 То же местоположение и размеры, которые имеет панель Panell. Последнее необходимо, поскольку при проектирова­нии ее координаты соответствовали координатному пространству контейнера — клиентской области панели Panell. А теперь ее родитель сменился на форму, и надо ее расположить в том же месте формы, котором расположена PaneIl. Тре­тий оператор перемещает наверх форму Panell.

Приведенный код можно сократить, и убрать из него первый оператор, если в процессе проектирования размещать панель Рапе12 не на панели Panell, А в ка­ком-то другом месте непосредственно на форме. Тогда в обработчике события фор­мы OnCreate Достаточно двух операторов:

Panel2->BoundsRect = Panell->BoundsRect;

Panell->BrIngToFront() ; 1

Изменяющих положение Рапе12 И перемещающих наверх форму Panell.

В результате работы приведенных операторов в момент создания формы на ней будет видна панель Panell. В момент, когда ее надо заменить на Рапе12, Мож­но выполнить оператор:

Panel2->BringToFront() ;

Выносящий наверх вторую панель. Когда надо вернуть на экран изображение Pa — nell, Можно выполнить операторы:

Panell->BringToFront() ;

Аналогичный пример приведен в разделе Visible, Но использование метода BringToFront Делает его более компактным.

BrushCopy_______________________________________________________________

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

Класс TCanvas

Объявление

Void__ fastcall BrushCopy(const Windows::TRect SDest, TBitmap* Bitmap,

Const Windows::TReet SSource, TColor Color);

Описание

Метод BrushCopy Сохраняется в C++Builder в основном для обратной совмести­мости с ранними версиями. Вместо BrushCopy Лучше использовать класс TImageList.

Метод копирует часть изображения битовой матрицы компонента Bitmap На данную канву, заменяя указанный цвет Color В изображении на значение, уста­новленное для кисти канвы Brush. Параметр Source Указывает копируемую пря­моугольную область в источнике изображения Bitmap. Параметр Dest указывает прямоугольную область на канве, в которую производится копирование.

Замена цвета делает изображение как бы частично прозрачным, если в пара­метре Color Указать цвет фона изображения, а в параметре Color Кисти Brush Кан­вы указать цвет фона канвы.

Пример

Оператор

Forml->Canvas->BrushCopy(Rect(10,10,100,100),Bitmapl,

Rect(10,10,100,100),ClBlaek);

Копирует прямоугольную область с координатами углов (10, 10) и (100, 100) из компонента Bitmapl В аналогичную область канвы формы Forml И заменяет в изображении черный цвет на цвет, установленный в свойстве Forml. Can — vas. Brush. Color.

Cancel И другие методы отмены исправлений в наборах данных_______

Отменяют результаты редактирования.

Классы TDataSet , TBDEDataSet, TCustomClientDataSet, TCustomADODataSet

Объявления

Все классы:

Virtual void__ fastcall Cancel (void) ;

Void__ fastcall CancelUpdates(VOid) ;

TBDEDataSet и TCustomClientDataSet:

Void__ fastcall RevertRecord(Void);

TCustomClientDatafet :

Bool______ fastcall UndoLastChange(bool FollowChange)

TCustomADODataSet:

Enum TAffectRecords (arCurrent, arFiltered, arAll, arAllChapters); void fastcall CancelBatch(TAffectRecords AffectRecords = arAll);

Описание

Метод CancelUpdates Отменяет все исправления, еще не зафиксированные в базе данных.

В классе TBDEDataSet Применение метода CancelUpdates Приводит к удале­нию всех кэшированных изменений и восстановлению состояния набора, соответ­ствующего моменту открытия набора или моменту после последней фиксации из­менений в базе данных. При закрытии набора данных или при установке свойства CachedUpdates в False Метод CancelUpdates Вызывается автоматически. Так что все не зафиксированные результаты редактирования пропадают.

В классе TCustomClientDataSet Применение метода CancelUpdates Приводит к полной очистке свойства Delta. В этом классе и в классе TBDEDataSet Определен также метод RevertRecord, Который удаляет результаты редактирования только текущей записи, если они еще не занесены в базу данных или не присоединены к Data (в клиентском наборе).

Метод Cancel Так же, Как и RevertRecord, Отменяет результаты редактирова­ния текущей записи, но только до тех пор, пока не был выполнен метод Post. По­этому его целесообразно использовать перед выполнением Post (см. пример).

Метод UndoLastChange Класса TCustomClientDataSet ликвидирует результа­ты последней операции редактирования. Это может быть операция изменения дан­ных, или вставка новой записи, или удаление записи. Параметр FollowChange Указывает положение курсора после восстановления записи. Если FollowChange = True, курсор перемещается на восстановленную запись. А если FollowChange false, То курсор остается на текущей записи.

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

В классе TCustomADODataSet Применение метода CancelUpdates Приводит к удалению всех кэшированных изменений и восстановлению прежнего состояния набора данных. В классе имеется еще один метод удаления результатов редактиро­вания — CancelBatch. Он применим, если набор данных открыт в режиме пакетно­го обновления (свойство CursorType Равно CtKeySet или CtStatic, Свойство Lock — Type равно ItBatchOptimistic, Команда является запросом SELECT).

Параметр AffectsRecords Указывает, исправления чего именно удаляются. Значение агAll (принято по умолчанию) указывает на отмену исправлений всех за­писей, так что CaneelBatch(arAll) эквивалентно CancelUpdates. Значение ArCur­rent Отменяет редактирование только текущей записи. Значение ArFiltered Отме-

Няет изменения всех записей, соответствующих текущему фильтру. Значение ar AHChapters действует на все разделы ADO.

Если набор данных ADO открыт в режиме немедленного обновления, то вызов CancclBatch со значением AffectsRecords, Отличным от arCurrent, приводит к ге­нерации исключения.

Примеры

Оператор

Tablel->CancelUpdates();

Отменит все кэшированные результаты редактирования набора данных Tablel (для кэширования в нем должно быть установлено в True Свойство CachedUpda — tes). А оператор

Tablel-J-RevertRecordO ;

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

См. также примеры в разд. «Ар ply Updates» и «Post».

CancelBatch_____________________________________________________

Удаляет все кэшированные изменения и восстанавливает прежнее состояние набора данных.

См. разд. «Cancel и другие методы отмены исправлений в наборах данных».

CancelUpdates___________________________________________________

Отменяет все кэшированные изменения и восстанавливает исходное состояние набора данных.

См. разд. «Cancel и другие методы отмены исправлений в наборах данных».

CanFocus_______________________________________________________

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

Класс TWinControl

Объявление

Bool fastcall CanFocus(void);

Описание

Метод CanFocus Определяет, может ли компонент получать сообщения пользо­вателя, т. е. может ли он получать фокус. Функция возвращает true, если у компо­нента и всех его родителей свойства Visible И Enabled установлены в True. В про­Тивном случае возвращается False.

ChangeScale______________________________________________________________

Изменяет масштаб компонента и его дочерних компонентов.

Классы TControl, TCustomForm, TscrollingWinControl, TWinControl

Объявление

DYNAMIC void___ fastcall ChangeScale tint M, irɪt D) ;

Описание

Метод ChangeScale Используется для изменения масштаба компонента. Мас­штабируются такие свойства компонента, как Тор И Left, определяющие его ме­стоположение, а также Width И HEigh t. определяющие его размер. В классах, про­изводных от TControl, В частности, в TWiriControl, масштабируются также все компоненты, принадлежащие данному компоненту, и их шрифты.

Параметры М and D определяют соответственно множитель и делитель мас­штаба. Например, чтобы уменьшить размеры до 75% начального значения, можно задать М равным 75, a D равным 100 (75/100). То же самое можно сделать, задав М=3 и D=4 (3/4). Если вы хотите увеличить размер на 1/3, то можно задать М=133 И D=100 (133/100) Или М=4 и D=3 (4/3).

CheckOpen_____________________________________________________

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

Класс TDBDataSeT

Объявление

Bool._____ fastcall CheckOpen (Word Status);

Описание

Метод CheckOpen Проверяет, не вернула ли BDE ошибку при попытке доступа к данным. Тип DBIResult — Это объявленный в модуле BDE. int тип ошибок BDE.

CheckOpen Возвращает True, Если доступ к данным получен. Если Status ука­зывает на ограничения прав доступа к таблицам Paradox или dBASE, CheckOpen Вызывает метод GetPassword Компонента Session, т. е. запрашивает пароль пользо­вателя. Если пользователь введет правильный пароль, то CheckOpen Вернет True.

Если попытка доступа к данным завершилась неудачей, CheckOpen Возвраща­Ет False.

Chord___________________________________________________________________

Рисует заполненную замкнутую фигуру, ограниченную дугой окружности или Эллипса и хордой.

Класс TCanvas

Объявление

Void___ fastcall Chord (int XI, int Yl, int X2, int Y2,

Int X3, Int Y3, int X4, int Y4) ;

Описание

Метод Chord Рисует замкнутую фигуру: дугу окружности или эллипса, замк­нутую хордой, с помощью текущих параметров пера Реп. Фигура заполняется те­кущим значением Brush. Точки (XI, Y1) и (Х2, Y2) определяют прямоугольник, описывающий эллипс. Начальная точка дуги определяется пересечением эллипса С прямой, проходящей через его центр и точку (ХЗ, Y3). Конечная точка дуги опре­деляется пересечением эллипса с прямой, проходящей через его центр и точку (Х4, Y4). Дуга рисуется против часовой стрелки от начальной до конечной точки. Хорда соединяет точки (ХЗ, Y3) и (X4, Y4).

В Windows 95 суммы Xl + Х2, Y1 + Y2 и Xl + Х2 + Y1 + Y2 не должны пре­

Вышать 32768.

В Windows NT направление рисования дуги можно изменить на направление по часовой стрелке вызовом функции SetArcDirection.

Примеры

Операторы

Imagel->Canvas->Chord(0, О, 200,200, 200,0, 0,0);

Image2->Canvas->Chord(О, О, 200,200, 0,0, 200,0); дают результат, показанный на рис. 4.1.

рис. 4.1
примеры применения метода chord

ClassName

Возвращает имя типа объекта.

Класс TObiect

Объявление

Static ShortString______________ fastcall ClassName(TClass cis);

Описание

Метод ClassName Возвращает имя действительного типа объекта. Например, переменная типа класса-предка может ссылаться на экземпляр любого типа-по­томка. В этом случае ClassName Возвращает имя реального типа объекта, а не того, ‘которое было объявлено для этой ссылки. Например, оператор

Catch(Exception & Е)

{

ShowMessage("Возникло исключение ■" + E. ClassName());

}

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

Catch(Exception & Е)

{

ShowMessage ("Возникло исключение " + E-Message);

}

Который отобразит пользователю не класс исключения, а сообщение этого класса.

Clear — метод списков___________________________________________

Очистка списков.

Классы TClipboard, TList, TStrinsList. TStrinss, TComboBox. TDBComboBox, TDBEdit, TDBListBox, TDBMemo. TDirectoryListBox, TDriveComboBox. TEdit, TFileListBox. TListBox. TMaskEdit, TMemo. TOutline и ряд других

Объявление

DYNAMIC void_ fastcall clear (void);

Описание

Для перечисленных выше объектов и компонентов процедура Clear удаляет все элементы списков или весь текст. Для некоторых других объектов аналогич­ная процедура действует несколько иначе.

Для объекта Clipboard Процедура Clear Удаляет все содержимое буфера Clipboard. Впрочем, то же самое происходит автоматически при каждом обновле­нии содержимого буфера (при выполнении операций вырезать и копировать — Cut И Сору).

ClearFields______________________________________________________

Очищает содержимое всех полей активной записи набора данных.

Класс TDatASet

Объявление

Void____ fastcall ClearFields(void);

Описание

Метод ClearFields Очищает содержимое всех полей активной записи набора данных. Если в это время набор находится в состоянии State, отличном от DsEdit Или HsInsert, генерируется исключение. Пересчитываются все вычисляемые поля и генерируется событие OnDAtaCLiange источника данных, связанного с данным набором данных (все это происходит, если в данный момент не выполняются опе­Рации SetKeyk

ClientToParent__________________________________________________

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

Класс TControl

Объявление

Struct TPoint // Полное определение см. в гл. 6

{

Int х; int у;

1;

TPoint__ fastcall ClientToParent(const TPoint Point,

TWinControl *AParent = (TWinControl*) NULL);

Описание

Метод ClientToParent (введен в C++Builder 6) преобразует координаты точки Point Данного компонента в систему координат родительского компонента АРа — Rent. Компонент AParent Может быть непосредственным родителем — контейне­ром, содержащим данных компонент. А может быть одним из его предшественни­ков — компонентом, который можно найти по цепочке ссылок свойств Parent.

Если параметр AParent Равен NULL Или просто не задан, подразумевается не­посредственный родитель данного компонента.

Если параметр AParent Не соответствует родительскому компоненту или если свойство Parent Данного компонента равно NULL, Генерируется исключение EInvalidOpera t ion.

Пример

Пусть в вашем приложении имеется панель Panell, Размещенная непосредст­венно на форме Forral Или на какой-то другой панели. И пусть на панели Panell Размещена панель Рапе12. Вы хотите, чтобы при щелчке на некоторой кнопке па­нель Рапе12 Размещалась непосредственно на форме Forml, Не изменяя при этом своего положения. Это может потребоваться, например, чтобы Рапе12 Не сдвига­лась при перетаскивании панели Panell.

Задача решается следующим кодом:

Void__ fastcall TForml::ButtonlClick(TObject *Sender)

{

TPoint Coord = Panell-XlientToParent (

Point(Panel2->BoundsRect. Left, Panel2->BoundsRect. Top), Forml); Panel2->SetBounds(Coord. х, Coord. у,

Panel2->Width, Panel2->Height);

Panel2->Parent = Forml;

)

Первый оператор переводит координаты левого верхнего угла панели Рапе12, Которые заданы в системе координат контейнера Panel 1, В систему координат фор­мы Forml И запоминает эти координаты в переменной Coord. Следующий опера­тор изменяет координаты левого верхнего угла панели Рапе12. А последний опера­тор размещает панель Рапе12 Непосредственно на форме Forml.

Если панель Panell Размещается непосредственно на форме, то второй пара­метр (Forml) В вызове ClientToParent Можно вообще не указывать или задать рав­Ным Null.

ClientToScreen _

Преобразует координаты клиентской области в координаты экрана. Класс TControL

Объявление

Struct TPoint // Полное определение см. в гл. 6 {

Int х; int у;

);

Windows: : TPoint__fastcall

ClientToScreen(ConstWindows : :TPoint SPoint) ;

Описание

Метод ClientToScreen Преобразует координаты точки в системе координат клиентской области компонента (начало координат — левый верхний угол клиент­ской области) в систему координат экрана (начало координат — левый верхний

Угол экрана).

Совместно с обратной функцией S CreenToClient Метод может использоваться для пересчета координат точки экрана из системы координат клиентской области одного компонента в систему координат клиентской области другого компонента.

Пример

Р = Comp2->ScreenToClient(Compl->ClientToScreen(P) ) ;

Оператор пересчитывает координату точки Р из системы координат компонен­Та Compl В систему Координат Компонента Сотр2.

Close

Метод закрывает набор данных.

Класс TDataSet

Объявление

Void _ fastcall Close (void) ;

Описание

Метод Close Закрывает набор данных, устанавливая его свойство Active В False. Состояние набора данных State Переводится в Dslnactive И закрывается курсор BDE. После этого ни читать из данного набора данных, ни записывать в него невозможно.

Закрывать набор данных методом Close Или непосредственным заданием False Свойству Active Надо перед изменением любых свойств, оказывающих влияние на Состояние набора данных.

CloseDatabase___________________________________________________

Закрывает соединение с базой данных.

Класс TDBDataSet

Объявление

VoiD fastcall CloseDatabase(TDatabase* Database);

Описание

Метод CloseDatabase Закрывает соединение с базой данных. Параметр Data­base Определяет временный (созданный ранее методом OpenDatabase) или посто­янный компонент типа TDatabase, Соединение которого закрывается. Вызов CloseDatabase Уменьшает на 1 число ссылок этого компонента. Если число ссылок стало равно нулю и свойство KeepConnection (поддерживать соединение) этого компонента равно False, То временный компонент Database Уничтожается, освобо­ждая память. Временный компонент Database Закрывается также автоматически, если закрылся последний связанный с ним набор данных. Метод CloseDatabase Просто форсирует это закрывание. Если в компоненте Session, с которым связан временный компонент Database, Свойство KeepConnection = true, То при закры­тии соединения Database Не уничтожается. Для его уничтожения после закрытия соединения надо вызвать метод DropConnections Компонента Session.

Для постоянного компонента Database, чтобы закрыть соединение, надо яв­Ным образом вызвать его метод Close.

CommitU pdates_________________________________________________

Очищает буфер кэшированных изменений.

Класс TBDEDataSet

Объявление

Void_____ fastcall CommitUpdates(void);

Описание

Метод CommitUpdates Очищает буфер кэшированных изменений после успеш­ного вызова метода ApplvUpdates Или метода Commit Базы данных. Очистка кэша гарантирует, что в нем не осталось записей, кроме необработанных или пропущен­ных обработчиками событий OnUpdateRecord Или OnUpdateError. Оставшиеся записи еще можно пытаться модифицировать.

Модификации оставшихся записей опять кэшируются и в дальнейшем долж­ны пересылаться в базу данных методом Apply Updates.

Пример

См. пример в гл. 5, в разд. «AfterClose и BeforeClose».

CompareBookmarks______________________________________________

См. в разд. «BookmarkValid, CompareBookmarks, GetBookmark, GotoBook — Mark, FreeBookmark ».

ConstraintsPisabled, DisableConstraints, EnableConstraints______________

Методы, управляющие доступностью ограничений сервера.

Класс TBDEDaTaSet

Объявления

Bool____ fastcall ConstraintsDisabled(Void) ;

Void____ fastcall DisableConstraints(Void) ;

Void____ fastcall EnableConstraints(void);

Описание

Метод DisableConstraints Временно блокирует применение ограничений серве­ра к набору данных. Например, при организации циклов по записям отключение ограничений ускоряет работу. Каждый вызов DisableConstraints Увеличивает чис­ло блокировок на 1.

Метод EnableConstraints Снимает введенную методом DisableConstraints Бло­кировку. Точнее, вызов этого метода уменьшает на 1 число блокировок. Когда это число станет равно 0, блокировка снимется.

Функция ConstraintsDisabled Проверяет наличие блокировки ограничений. Она возвращает True, Если блокировка имеется. Совместное применение Const- raintsDisabled и EnableConstraints Позволяет снять многократную блокировку. Например:

While (Tablel-J-ConstraintsDisabled () )

Tablel->EnableConstraints ();

ContainsControl_________________________________________________

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

Класс TWinControL

Объявление

Bool______ fastcall ContainsControl (TControl* Control);

Описание

Метод ContainsControl Позволяет определить, является ли компонент, указан­ный параметром Control, Наследником данного оконного компонента. Метод воз­вращает True Не только, если в свойстве Controls Компонента Control Указан в ка­честве родителя данный компонент, но и если он является прямым или косвенным Потомком какого-то из дочерних компонентов данного оконного компонента.

ControlAtPos______

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

Класс TWinControl

Объявление

Struct TPoint // Полное определение см. в гл. 6

{

Int х; int у;

1;

TControl*_ fastcall ControlAtPos(const Windows::TPoint &Pos,

Bool AllowDisabled);

Описание

Метод ControlAtPos Позволяет определить, какой дочерний компонент данно­го оконного элемента имеется в позиции с координатами, указанными параметром Pos. Возвращается только непосредственно дочерний компонент, т. е. такой, в чьем свойстве Parent Указан данный оконный элемент и который поэтому входит в спи­сок дочерних компонентов, содержащийся в свойстве Controls Оконного элемента.

Позиция Pos Может находиться в любом месте внутри дочернего компонента. Если заданная позиция не соответствует никакому дочернему компоненту, то функция ControlAtPos Возвращает NULL.

Параметр AllowDisabled Определяет, учитываются ли при поиске компонен­Ты, которые находятся в недоступном состоянии.

ControlsDisabled_________________________________________________

См. раздел «DisableControls, EnableControls, ControlsDisablecb.

CopyRect_______________________________________________________

Копирует часть изображения с другой канвы на данную.

Класс TCanvas Объявление

Void_ fastcall CopyRect(const Windows::TRect SDest,

TCanvas* Canvas,

Const WindowszzTRect SSource);

Описание

Метод CopyRect Переносит указанную параметром Source Область изображе­ния в канве источника изображения Canvas В указанную параметром Dest область данного объекта TCanvas. Копирование производится в режиме, установленном свойством CopyMode.

Пример

Оператор

Imagel->Canvas->CopyRect(MyRect2,Bitmap->Canvas, MyRectl);

Копирует на канву компонента Imagel в область MyRect2 Изображение из области MyRectl Канвы компонента Bitmap.

См. также примеры в гл. 3, в описании свойства CopyMode.

Create BlobStream_______________________________________________

Создает поток для чтения и записи данных поля BLOB.

Класс TDAtaSeT

Объявление

Virtual ClasseszzTStream* fastcall CreateBlobStreamf

TField* Field, TBlobStreamMode Mode);

Описание

Метод CreateBlobStream Создает поток для чтения и записи данных поля Field Типа BLOB. Параметр Mode Определяет режим создаваемого потока: BmRe — Ad — чтение данных, BmWrite — запись данных, BmReadWrite — и чтение, и за­пись.

Поток создается для конкретной записи и конкретного поля. Поэтому при пе­реходе к другой записи поток нельзя использовать повторно. Он должен создавать­ся заново.

Создание потока методом CreateBlobStream Предпочтительнее непосредствен­ного создания объекта TBlobStream Операцией new.

Пример

Приведенный ниже код обеспечивает копирование фотографии из поля Photo Текущей записи набора данных Tablel В поле Photo Текущей записи набора дан­ных Table2.

// Это пример созДания потока операцией new

TBlobStream * Streaml = new TBlobStream(Tah)IelPhoto, bmRead)

Try

Table2->Edit () ;

// это пример Создания потока методом CreateBlobStream TStream * Stream2 =

Table2->CTeateBlobStream(Table2->FieldByName("Photo"), bmReadWrite);

Try

F

Stream2->CopyFrom(Streaml, Streaml->Size) Table2->Post();

}

finally

(

Delete Stream2

_ finally

(

Delete Streaml

CreateDataSet — Метод TCustomCHentDataSet_______________________

Создает новый набор данных.

Класс TcustomClientDatASet

Объявление

Void____ fastcall CreateDataSet (void) ;

Описание

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

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

Пример

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

Разместите на форме компонент ClientDataSetl Типа TClientDataSet. Источ­ник данных DataSource И любые компоненты отображения данных, дающие поль­зователю возможность редактировать набор (например, компонент DBGrid). Ника­ких свойств компонента ClientDataSetl Задавать не надо.

А для диалога создания набора данных добавьте на форму окно редактирова­ния Edit (его имя в приведенном ниже коде EFile), в котором пользователь может задать имя файла. Добавьте также окно редактирования, в котором пользователь сможет задавать имя поля (имя этого окна EField). Отметим, что имена можно за­давать русские и состоящие из нескольких слов. Для задания типа поля введите в приложение выпадающий список ComboBoxl И задайте в нем строки "int" и "string" (можете, конечно, добавить другие типы полей). Наконец, для задания размера строкового поля добавьте компонент CSpinEditl. Управлять всем этим бу­дут две кнопки: Add — добавление описания нового поля, и Create — создание на­бора данных.

Введите в раздел Private Описания класса формы две переменные:

TFieldDefs *pDefs;

TFieldDef *pDef;

Обработчик щелчка на кнопке Add может иметь вид:

PDefs = Forml->ClientDataSetl->FieldDefs; pDef = pDefs->AddFieldDef(); pDef->DisplayName = EField->Text; if (ComboBoxl-S-ItemIndex == 0)

PDef->DataType = ft Integer; else {

PDef->DataType = ftString; pDef->Size = CSpinEditl->Value;

}

Первый оператор устанавливает указатель PDefs На набор описаний полей FieldDefs. Второй добавляет в набор новое описание. Имя нового поля берется из окна EField. В зависимости от выбора пользователя в списке ComboBoxl Задается тип и размер поля.

Обработчик щелчка на кнопке Create может иметь вид:

ClientDataSetl->CreateDataSet

ClientDataSetl->FileName = EFile->Text ClientDataΞetl->Oρen();

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

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

CreateTable_______

Метод создает новую таблицу данных.

Класс TTable

Объявление

Void____ fastcall CreateTable(Void);

Описание

Метод CreateTable Создает новую таблицу данных на основании указанной ин­формации о ее структуре: свойств FieldDefs Или Fields, характеризующих поля, и свойства IndexDefs. Описывающего индексы. Чтобы избежать уничтожения уже существующей таблицы с тем же именем, перед вызовом CreateTable Полезно про­верить существование таблицы, обратившись к свойству Exists.

Пример

Приведенный ниже код создает в базе данных, с которой связан компонент Tablel, таблицу Paradox с именем «Dep. db» с полями Dep, Proisv И заполняет ее.

// Компонент Tablel Делается Неактивным

Tablel->Active = False;

// Указывается Имя таблицы

Tablel->TableName = "Dep. db";

//Таблица Создается, если ее нет в базе данных If ( ! Tablel->Exists)

{

// Указывается тип таблицы

Tablel->TableType = ttParadox;

// Начало описания полей таблицы

Tablel->FieldDefs->Clear();

// Создается указатель на объект описания поля TFieldDef *pNewDef — Tablel-S-FieldDefS-S-AddFieldDef()

// Описание первого поля PNewDef->Name = "Dep"; pNewDef->DataType = ftString; pNewDef->Size = 20;

PNewDef-S-Required = true;

// Описание второго поля

PNewDef = Tablel->FieldDefs->AddFieldDef(); PNewDef-S-Name = "Proisv"; pNewDef->DataType = ftBoolean;

// Описание индекса

Tablel-S-IndexDefs-S-Clear();

// Индекс без имени — первичный ключ таблицы

Tablel->IndexDefs->Add("","Dep",

TIndexOptions () <<ixPrirnary << ixUnique) ;

// Создание таблицы методом CreateTable

Tablel-XIreateTable();

Tablel->Open ();

// Вставка первой записи

Tablel->Insert ();

Tablel-S-FieldByName(llDepn)-S-AsString = "Бухгалтерия"; Tablel-S-FieldByName("Proisv")->AsBoolean = false; Tablel->Post ();

CustomAlignInsertBefore, CustomAlignPosition______________

Заказное выравнивание.

См. разд. «Align» в гл. 3.

DataRequest, OnDataRequest — методы и событие_________

Обеспечивают запрос провайдеру с дополнительными условиями. Классы TCustomClientDαtαSet. TDataSetProvider Объявления

В TCustomClientDataSet:

OleVariant_____ fastcall DataRequesttOleVariant Data);

В TCustomProvider;

Virtual System::OleVarianT fastcall

DataRequest(const SystemzzOleVariant Slnput);

Typedef System::OleVariant___________ fastcall

(__ closure *TDataRequestEvent)

(SystemzzTObject *Sender, SystemzzOleVariant Input);

.property TDataRequestEvent OnDataRequest

Описание

Метод DataRequest клиентских наборов данных (объявлен в классе TCustom — ClientDataSet) позволяет послать провайдеру запрос, передав также некоторые ус­ловия. При вызове метода в аргумент Data передаются некоторые данные, которые провайдер должен использовать при выполнении запроса. Например, это может быть фильтр, по которому отбираются записи.

Вызов метода DataRequest Клиентского набора автоматически приводит к вы­зову метода DataRequest Того провайдера, с которым связан данный набор своим свойством ProvidcrName. В качестве значения параметра Input Передается значе­ние Data, Заданное при вызове метода клиента. В результате этого автоматическо­го вызова метода DataRequest Провайдера, генерируется событие провайдера OnDataRequest. В обработчик этого события передается Sender — Указатель на объект провайдера (не клиента, а провайдера), и Input — Значение Data, Передан­ное в первичном вызове. По умолчанию событие OnDataRequest Не имеет обработ­чика. Так что если вы не напишете соответствующий обработчик, метод Data — Request Вернет NULL. Но, написав этот обработчик, вы можете вернуть в нем дан­ные, которые отображают результат запроса с учетом переданных условий.

Примеры

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

ClientDataSetOData = ClientDataSetl-J-DataRequest (FilterEdit->Text) ;

Этот оператор заносит в свойство Data Клиентского набора ClientDataSetl ре­зультаты, отфильтрованные фильтром FilterEdit->Text. Надо только отметить, что если клиентский набор использует свойство FileName. Определяющее файл хранения данных, надо предварительно стереть этот файл, чтобы в набор зане­слись новые данные. Для этого перед указанным выше оператором надо добавить оператор:

DeleteFile(ClientDataSetl->FileName);

Приведенные операторы только осуществляют запрос. А фильтрация прово­дится в обработчике события OnDataRequest Провайдера:

OleVariant______ fastcallTForml::DatasetProviderlDataRequest(

TObject *Sender, OleVariant SInput)

OleVariant NewData;

DataSetProviderl->DataSet->Filtered = false; DataSetProviderl->DataSet->Filter = (AnsiString)Input; DataSetProviderl- >DataSet — >Filtered = true;

NewData = DataSetProviderl-J-Data;

DataSetProviderl->DataSet->Filtered = false; return NewData;

}

В этом обработчике вводится локальная переменная NewData, Содержащая результаты запроса. Далее фильтрация базы данных отключается (свойство Data — SetProviderl->DataSet — это набор, из которого черпаются данные). Фильтр за­меняется заданным, фильтрация опять включается, и отфильтрованные данные передаются в переменную NewData. Затем фильтрация отключается, чтобы не ме­шать другим клиентам, которые, может быть, используют тот же провайдер и ту же базу данных. После этого отфильтрованные данные возвращаются как резуль­тат работы функции.

Рассмотренная выше фильтрация отличается от фильтрации, осуществляемой свойствами Filter и Filtered Тем, что клиентский набор получает только данные, удовлетворяющие фильтру. А свойства Filter и Filtered Могут осуществлять толь­ко фильтрацию записей, уже имеющихся в наборе. Т. е. если применена описанная выше фильтрация, то Filter и Filtered Смогут осуществить только дополнительную фильтрацию переданных в набор записей. Например, операторы

ClientDataSetl->Filtered = false;

ClientDataSetl->Filter = FilterEdit->Text;

ClientDataSetl->Filtered = true;

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

В окне FilterEdit.

Delete — метод TDataSet__________________________________________

Удаляет активную запись и позиционирует курсор на следующую запись.

Класс TDataSet

Объявление

Void____ fastcall Delete (void) ;

Описание

Метод Delete Удаляет активную запись и позиционирует курсор на следую­щую запись. Если набор данных не активен, то генерируется исключение. При вы­полнении метода Delete Осуществляются следующие операции:

• Проверяется, не является ли набор данных пустой. Если пустой, генерируется

Исключение

• Вызывается CheekBrowseMode для завершения обработки предыдущей запи­си

• Вызывается обработчик события BeforeDelete

• Запись удаляется

• Освобождаются буферы, связанные с данной записью

• Набор данных переводится в состояние State равное DsBrowse

• Курсор позиционируется на следующую неудаленную запись

• Вызывается обработчик события AfterDelete

Delete — метод списков и меню___________________________________

Удаление элемента с указанным индексом из списка.

Классы TList. TStrinsLisT. TStrinsS. TMenuItem Объявление

Void____ fastcall Deletefint Index);

Описание

Процедура Delete Удаляет из списка элемент с указанным индексом. Во всех случаях индексы считаются, начиная с О (О — индекс первого элемента).

Из списка строк строка удаляется вместе со ссылкой на связанный с ней объект. Удаление элемента меню ведет к удалению и связанного с ним подменю (если

Таковое имеется).

После удаления элемента список перестраивается. Это надо учитывать при удалении элементов в цикле, как указано в приведенном примере.

Пример

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

List->Delete (O) ;

В этом примере удаляются два первых элемента списка List. Неверно было бы написать:

For (int i « O; i < 2; i + + )

List->Delete(i);

Так как после первого удаления список перестроится, то элементом с индексом 1 станет тот, который ранее имел индекс 2. Таким образом, в результате оказались Бы удаленными элементы, имевшие в первоначальном списке индексы 0 И 2.

DisableAlign И другие методы выравнивания________________________

Временно запрещают и разрешают выравнивание дочерних компонентов. Класс TWinControL

Объявления

void fastcall void fastcall void fastcallDisableAlign(void) EnableAlign(void); Realign (void) ;

Описание

Свойство DisableAlign Временно запрещает выравнивание дочерних компо­нентов внутри оконного элемента. Метод применяется совместно с методом Enab- leAlign, Отменяющим действие DisableAlign И разрешающим выравнивание.

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

Каждому вызову DisableAlign Должен соответствовать вызов EnableAlign. Очередной вызов DisableAlign Увеличивает на единицу число запретов выравнива­ния, а вызов EnableAlign Уменьшает это число. Как только при очередном вызове EnableAlign Число запретов станет равным нулю, произойдет выравнивание. Это производится вызовом метода Realign.

Впрочем, надо иметь в виду, что при изменении свойства Align Дочерних ком­понентов после выполнения метода DisableAlign Некоторые изменения размеров компонентов все равно происходят, хотя выравнивание не производится.

Пример

Forml->DisableAlign();

<операторы перестроения дочерних компонентов>

Forml->EnableAlign();;

DisableConstraints_________________________________________________________

См. раздел «ConstraintsDisabled, DisableConstraints, EnableConstraints*.

DisableControls, EnableControls, ControlsDisabled____________________________

Методы запрещают и разрешают в компонентах, связанных с данными, ото­бражение во время длинных операция перемещения по набору данных.

Класс TDataSet

Определения

void fastcall
void fastcall
bool fastcall
DisableControls(void) ; EnableControls(void); ControlsDisabled(void)

Описание

При длительных итерациях по многим записям набора данных в компонен­тах, отображающих данные, могут появляться неприятные мерцания. К тому же, отображение данных при перемещениях к каждой новой записи замедляет работу приложения. Чтобы избежать этих неприятностей, полезно заблокировать отобра­жение данных перед началом итераций. Это делает метод DisableControls. Разбло­кирует компоненты, отображающие данные, метод EnableControls. Каждый вызов DisableControls Увеличивает число блокировок на 1. Поэтому, если блокировка была сделана несколькими вызовами DisableControls, То компоненты разблокиру­ются только после такого же числа вызовов EnableControls, Каждый из которых уменьшает число блокировок на 1. Функция ControlsDisabled Позволяет опреде­лить наличие блокировки. Она возвращает true, если блокировка не снята. Приме­нение ControlsDisabled В сочетании с EnableControls Позволяет в цикле снять мно­гократную блокировку.

Если набор данных является головным для другого вспомогательного набора данных, то метод DisableControls Блокирует связь со вспомогательной таблицей. Для блокировки отображения вспомогательного набора данных лучше использо­вать свойство BlockReadSize.

Примеры

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

TableODisableControls () ;

Try

(

Tablel->FirstО; while (! Tablel->Eof)

{

// Обработка очередной записи

Tablel->Ne×t();

}

}

___ finally

{

Tablel->EnableControls() ;

}

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

While (Tablel->ControlsDisabled())

Tablel->EnableControls();

Dormant________________________________________________________

Создает изображение битовой матрицы в памяти, чтобы освободить дескрип­тор матрицы и сэкономить ресурсы.

Класс TBitmap

Объявление

Void____ fastcall Dormant (void) ;

Описание

Использование метода Dormant Сокращает ресурсы GDI, используемые в при­ложении. Метод создает изображение матрицы в памяти, используя объект потока памяти. В дальнейшем через свойство Handle Можно освободить связанный с мат­рицей HBITMAP.

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

Пример

Void______ fastcall TFormlziButtonlClickITObject *Sender)

{

Graphics::TBitmap *BitMapl = new Graphics::TBitmap() Graphics::TBitmap *BitMap2 = new Graphics:;TBitmap()

Try

{

// Загрузка Изображения Из файла в BitMapl BitMapl->LoadFromFile("…");

// Копирование в BitMap2 Из BitMapl BitMap2->Assign(BitMapl);

// Освобождение ресурсов GDI

BitMap2->Dormant();

// Освобождение памяти, изображение не теряется BitMap2->FreeImage();

// Изображение из BitMapZ Рисуется на канве Canvas->Draw(20,20,BitMap2);

// Устанавливается монохромный режим BitMap2 BitMap2->Moτιochro=e = true;

// рисуется монохромный вариант Canvas->Draw(250,20,BitMap2);

// Теперь изображение действительно теряется BitMap2->ReleaseHandle () ;

)

Catch (…)

{

MessageBeep(0);

}

Delete BitMapl; delete BitMap2;

Draw

Рисует графическое изображение в указанную позицию канвы.

Класс TCanvas

Объявление

Void__ fastcall Draw(int X, int Y, TGraphic* Graphic);

Описание

Метод Draw Рисует изображение, содержащееся в объекте, указанном пара­метром Graphic, Сохраняя исходный размер изображения в его источнике и пере­нося изображение в область канвы объекта TCanvas. Верхний левый угол этой об­ласти определяется параметрами X и Y. Источник изображения может быть бито­вой матрицей, пиктограммой или метафайлом. Если источник — объект типа TBitmap. То перенос изображения производится в режиме, установленном свойст­вом канвы CopyMode.

Пример

Оператор

Imagel->Canvas->Draw(10,10,Bitmapl);

Рисует на канве компонента JlmaGel изображение из компонента Bitmapl В об­ласть с координатами левого верхнего угла (10, 10).

DrawFocusRect _

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

Класс TCanvas Объявление

Void _fastcall DrawFocusRect (const Windows: :TRect SRect);;

Описание

Метод DrawFocusRect Рисует на канве в области Rect Изображение прямо­угольника в виде, используемом обычно для отображения рамки фокуса, т. е. точ­ками. При рисовании используется операция хог, что позволяет удалить изобра­жение прямоугольника его повторной прорисовкой.

Пример

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

Int XO, YO;

Bool drag = false;

Void _fastcall TForml : : ImagelMouseDown (

TObject *Sender, TMouseButton Button,

TShiftState Shift, int X, int Y)

(

/ / Рисование рамки

Imagel->Canvas->DrawFocusRect(Rect(X-5, Y-5,X+5,Y+5) ) ;

// Запоминание координат курсора XO = X;

YO =t Y;

// Включение флажка режима перемещения рамки

Drag = true;

П—————————————————————————————————————————————

Void _fastcall TForml : : ImagelMouseMove (

TObject *Sender, TShiftState Shift, int X, int Y)

(

If( !drag) return;

// Стирание рамки

Imagel->Canvas->DrawFocusRect (Rect(XO-5,YO-5, XO + 5, YO + 5) ) ;

// Рисование Рамки

Imagel->Canvas->DrawFocusRect (Rect(X-5,Y-3⅛ x+5 , Y+5) ) ;

// Запоминание координат курсора

XO = X;

YO = Y;

}

/ /

/ !

Void _fastcall TForml :;ImagelMouseUp (TObject *Ξender,

TMouseButton Button, TShiftState Shift, int X, int Y)

If( !drag) return;

// Стирание рамки

Imagel->Canvas->DrawFocusRect(

Rect(X0-5,Y0-5,XQ + 5,Y0+5) ) ;

// выключение Флажка режима перемещения рамки Drag = false;

При нажатии кнопки мыши рисуется первая рамка, запоминаются координаты курсора и включается режим перемещения рамки (переменная Drag = true). При пе­ремещении мыши в режиме перемещения рамки стирается прежняя рамка, рисует­ся рамка в новой позиции и запоминаются новые координаты курсора. При отпуска­Нии кнопки мыши стирается рамка и выключается режим перемещения рамки.

Edit____________________________________________________________

Переводит набор данных в режим редактирования.

Класс TDataSet

Объявление

Void____ fastcall Edit (void) ;

Описание

Метод Edit Переводит набор данных в режим редактирования (State = DsEdit). Предварительно проверяется набор данных и, если он пуст, то вызывается метод Insert. В противном случае выполняются операции:

• ВызываетсяСЬеекВгоуувеМоде для завершения обработки предыдущей запи­си

• Вызывается обработчик события BeforeEdit

• Набор данных переводится в состояние State Равное DsEdit, Что позволяет ре­дактировать поля текущей записи

• Вызывается обработчик события AfterEdit

EditKey________________________________________________________

См. раздел «SetKey, EditKey, GotoKey, GotoNearest».

Ellipse__________________________________________________________

Рисует заполненную окружность или эллипс.

Класс TCanvas

Объявление

Void__ fastcall Ellipse (int XI, int У1, int X2, int Y2);

Описание

Метод Ellipse Рисует окружность или эллипс с помощью текущих параметров пера Реп. Фигура заполняется текущим значением Brush. Точки (XI, Y1) и (Х2, Y2) определяют прямоугольник, описывающий эллипс.

В Windows 95 суммы Xl + Х2, Y1 + Y2 и Xl + Х2 + Yl + Y2 не должны пре­вышать 32768.

Пример

Оператор

Imagel->Canvas->Brush->Color = clRed;

Imagel->Canvas->Brush->Style = bsDiagCross;

Imagel->Canvas->Ellipse(О, 0, Imagel->Width, Imagel->Height); Рисует эллипс, вписанный в компонент Imagel и заполненный красной штриховкой.

EnableAlign________________________________

См. раздел «DisableAlign».

EnableConstraints________________________________________________

См. раздел «Constraints Disabled, DisableConstraints, EnableConstraintso.

EnableControls__________________________________________________

См. раздел «DisableControls, EnableControIs, ControlsDisabledo.

EndUpdate______________________________________________________

Снятие запрета перерисовки, введенного методом BeginUpdate.

Класс TCollection

Объявление

Void___ fastcall EndUpdate(void);

Описание

Метод снимает запрет перерисовки, введенный ранее методом BeginUpdate. Совместное применение и EndUpdate Ускоряет реорганизацию перечня объектов собрания TCollection И предотвращается неприятное мерцание изображения в про­цессе изменения перечня объектов.

Пример

См. пример в разделе «BeginUpdateo.

Exchange_______________________________________________________

Меняет позиции двух элементов списка.

Классы TList. TStrlng-LisT. TSTrinss

Объявления

Для TList:

Void___ fastcall SxchangeSint Indexl, int Index2);

Для TStrings и TStringList:

Virtual void_____ fastcall Exchange (int Indexl, int Index2);

Описание

При вызове Exchange Два элемента списка с позициями Indexl и Index2 Обме­ниваются местами. Индексы позиций начинаются с О (О — первый элемент).

Если в списках строк со строками связаны объекты, они остаются связанными с теми же строками в их новых позициях.

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

Пример

Пусть список List Типа TList Содержит указатели на целые числа. Тогда при­веденная ниже программа перемещает на первое место указатель на минимальное число (это один шаг пузырьковой сортировки).

For (int i=l; i < List->Count; i + + )

If (Mint *) (List->Items [0] ) > Mint *) (List->Items [i] ) )

List->Exchange(O, i) ;

См. также пример в гл. 1, в описании класса TList.

Класс TList

Объявление

TList* _fastcall Expand (void) ;

Описание

Функция Expand Увеличивает емкость списка типа TList. Выделяя память для быстрого размещения новых элементов. Тем самым экономится время при добав­лении в дальнейшем новых элементов списка.

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

Если список не заполнен, т. е. количество элементов Count Меньше емкости списка Capacity, то список не расширяется. Если же Count = Capacity, То функция Expand Увеличивает емкость Capacity Согласно следующему алгоритму. Если зна­чение Capacity Меньше 4, то Capacity Увеличивается на 4. Если значение Capacity Больше 4, но меньше 9, то Capacity Увеличивается на 8. Если значение Capacity Больше 8, то Capacity Увеличивается на 16.

Примеры

List->Expand();

Если список List Заполнен не до конца, он остается неизменным. Если же он заполнен, то его емкость расширяется.

Следующий оператор создает объект Listl, Являющийся копией списка List:

TList * Listl = List->Expand () ;

Если исходный список был заполнен, то оба списка List И Listl Оказываются Расширенными.

FetchAlI

Считывает с сервера и сохраняет локально все записи, начиная с текущей.

Класс TBDEDataSet

Определение

Void _fastcall FetchAll(void) ;

Описание

Метод FetchAlI Считывает с сервера и сохраняет локально все записи, начиная с текущей и до конца файла. Предварительно вызывается ChGckBrowseMode, чтобы переслать в базу данных все оставшиеся незафиксированными изменения данных.

При обычном кэшировании транзакции читают столько данных, сколько не­обходимо для их отображения в приложении. При необходимости новых данных выполняется новая транзакция. Метод FetchAlI позволяет сократить нагрузку на сеть, считывая все данные одной транзакцией. Но применение этого метода сопря­жено с определенными проблемами. Если базу данных одновременно использует несколько клиентов, то есть опасность, что какие-то из прочитанных данных будут изменены другими приложениями. Тогда при возврате ранее прочитанных запи­сей в базу данных могут возникнуть конфликты.

Описание

МетоДы FieldByName и FindField Ищут поле, имя которого указано парамет­ром FieldName. Если поле найдено, то возвращается объект TField Этого поля. Если поле не найдено, то метод FindField Возвращает NULL, А метод FieldByName Генерирует исключение EDatabaseError.

Параметр FieldName Может быть именем обычного поля, или именем дочерне­го поля, или именем поля совокупной характеристики. Благодаря подобной гибко­сти методы FieldByName и FindField Часто предпочтительнее использования свойств Fields или AggFields.

Пример

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

Dep всех записей таблицы, соединенной с компонентом Tablel. Это можно сделать следующим кодом:

CBdep->Clear () ;

Tablel->First () ; while (! Tablel->Eof)

• {

CBdep->Items->Add(Tablel->FieldByName("Dep")->AsString) ;

Tablel->Next ();

}

Первый оператор кода очищает список CBdep. Второй — устанавливает кур­сор таблицы на первую запись. Далее следует цикл по всем записям, пока не дос­тигнута последняя, что проверяется выражением Tablel->Eof, Для каждой запи­си в список заносится значение поля Dep, после чего методом Next курсор переме­щается к следующей записи.

Вместо метода FieldByName Можно применить метод FindField:

CBdep->Items->Add(Tablel->FindField("Dep")->AsString);

Отличие проявится только в случае, если поля Dep в наборе данных не ока­жется. Тогда метод FieldByName Сгенерирует исключение, а метод FindField Вер­Нет NULL.

Fill Rect________________________________________________________

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

Brush.

Класс TCanvas

Объявление

Void___ fastcall FillRect(const Windows::TRect SRect);

Описание

Метод FillRect Заполняет прямоугольник канвы, указанный параметром Rect, Используя текущее значение Brush. Заполняемая область включает верхнюю и ле­вую стороны прямоугольника, но не включает правую и нижнюю стороны. При ис­пользовании FillRect Параметр Rect Часто задается функцией Rect.

Пример

Оператор

Imagel->Canvas->FillRect(Rect(О, О, Imagel->Width,

Imagel->Height));

Очищает всю канву компонента Imagel, заполняя ее фоном, если он установлен

В свойстве Brush.

Find ___________________________________________________________

Ищет в Items Описание поля по его имени.

Класс TFieldDefs

Объявление

HIDESBA3E TFieldDef*______ fastcall Find (const AnsiString Name) ;

Описание

Метод Find Ищет в Items описание поля по его имени Name. В результате по­иска можно получить доступ к атрибутам указанного поля. Если требуемое описа­ние не найдено, генерируется исключение. Чтобы избежать генерации исключе­ния, можно перед вызовом Find Удостовериться в наличии описания методом IndexOf. Если IndexOf Вернет значение большее -1, значит описание поля сущест­Вует и можно применять Find.

FindField_______________________________________________________

См. раздел «FieldByName, FindField».

FindFirst_______________________________________________________

См. раздел «Навигация по наборам данных».

FindKey, FindNearest_____________________________________________

Обеспечивают поиск записей по ключу.

Классы TCustomClientDataSet. TTable

Объявления

Boo!____ fastcall FindKeytconst System::TVarRec * KeyValues,

Const int KeyValues Size) ;

Void fastcall FindNearest (

Const System::TVarRec * KeyValues, const int KeyValues_Size);

Описание

Методы FindKey и FindNearest Обеспечивают один из альтернативных (см. также SetKey. Lookup И Locate) Способов поиска записи по ключу.

Перед началом поиска таблица Paradox или dBASE должна быть индексирова­на по тем полям, которые будут ключевыми для поиска и которые указаны в свой­стве IndexName. В противном случае поиск можно проводить только по первично­му индексу. Для таблиц SQL ключ может соответствовать индексу в свойстве IndexName Или списку полей в свойстве IndexFieldNames.

В методы передается массив KeyValues Значений ключевых полей в той после­довательности, в которой они входят в индекс. Элементами массива могут быть строки, переменные или NULL. При этом не обязательно перечислять все поля — достаточно перечислить первое или несколько первых. Для остальных нолей будет предполагаться значение NULL. Параметр KeyValues_Size Определяет индекс по­следнего элемента в массиве KeyValues, Т. е. он на 1 меньше числа элементов мас­сива.

Если найдена запись, в которой значения ключевых полей совпадают с задан­ными ключами, то функция FindKey Перемещает курсор на эту запись и возвраща­ет True. Если же такая запись не найдена, то курсор останется на месте, a FindKey Вернет False. Вместо FindKey Часто удобнее использовать метод FindNearest, Осо­бенно для полей строкового типа. Метод обеспечивает переход к наиболее совпа­дающей записи, если полного совпадения не получено. Это позволяет проводить, например, ускоренный поиск записей со строковыми полями при посимвольным вводе искомого значения, как показано в примере). Значение свойства КеуЕх — Clusive Определяет, на какую именно запись переместится курсор при частичном совпадением значений полей и ключей.

Примеры

В приведенных ниже примерах предполагается поиск в таблице записи о сотруд­нике, работающем в отделе (поле Dep), Название которого указано пользователем в окне Editl. Фамилия сотрудника (поле Fam) Указана пользователем в окне Edit2.

Следующий код обеспечивает переход к найденной записи или сообщение пользователю об отсутствии записи:

Tablel->IndexFieldNames = "Dep;Fam";

If ( ! Tablel->FindKey(OPENARRAY(TVarRec,

(Editl->Text, Edit2->Text)))) ShowMessage("Запись не найдена");

Если приведенный ниже код вставить в обработчик события OnChange Окна Edit2, Ет обеспечен ускоренный поиск: по мере ввода символов в Edit2 кур­

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

Tablel->IndexFieldNames = "Dep;Fam";

Tablel->FindNearest(OPENARRAY(TVarRec, (Editl->Text, Edit2->Te×t)));

FindLast________________________________________________________

См. раздел «Навигация по наборам Данных».

FindNearest_____________________________________________________

См. раздел «FindKey, FindNearest*.

FindNext_______________________________________________________

См. раздел «Навигация по наборам Данных».

FindNextControl___

Возвращает следующий в последовательности табуляции оконный дочерний

Компонент.

Класс TWinControL

Объявление

TWinControl*_____ fastcall FindNextControl (

TWinControl* CurControl, bool GoForward, bool CheckTabStop, bool CheckParent) ;

Описание

Метод FindNextControl Находит и возвращает следующий за указанным в па­раметре CurControl Дочерний оконный компонент в соответствии с последователь­ностью табуляции. Если CurControl Не является дочерним компонентом данного оконного элемента, то возвращается компонент, первый в последовательности та­буляции. То же самое происходит, если CurControl Является последним компонен­том в последовательности табуляции.

Параметр GoForward Определяет направление поиска. Если он равен True, То поиск проводится вперед и возвращается компонент, следующий за CurControl. Если же параметр GoForward Равен False, То возвращается предшествующий ком­понент.

Параметры CheckTabStop и CheckParent Определяют условия поиска. Если CheckTabStop Равен True, То просматриваются только компоненты, в которых свойство TabStoD установлено в True. При CheckTabStop Равном False Значение TabStop Не принимается во внимание. Если параметр CbeckTarent Равен True, То просматриваются только компоненты, в свойстве Parent Которых указан данный оконный элемент, т. е. просматриваются только прямые потомки. Если Check- Parent Равен False, То просматриваются все, даже косвенные потомки данного эле­мента.

Метод FindNextControl Вызывает метод GetTabOrderList И из полученного та­ким способом списка черпает последовательность компонентов.

Примеры

TWinControl * obj;

Obj = Forml->FindNextControl (ot>j, true, true, true);

ShowMessage(obj->Name);

В этом примере переменная Obj Поочередно принимает значение всех компо­нентов, размещенных непосредственно на форме Porml И включенных в последо­вательность табуляции, т. е. имеющих свойство TabStop, Равное True. Например, в эту последовательность войдут окна редактирования, кнопки, панели, располо­женные непосредственно на форме и имеющие TabStop = true, Но не войдут кноп­ки и окна редактирования, расположенные на панелях.

Если в приведенном операторе изменить параметр CheckParent На False: Obj = Forml->FindNextControl(obj, true, true, false);

То в последовательность войдут и непрямые наследники, имеющие TabStop = true, В частности, компоненты, содержащиеся в панелях, расположенных на форме, причем независимо от значения TabStop Этих панелей.

Если в приведенном операторе изменить параметр CheckTabStop на False: Obj Forml->FindKextControl(obj , true, false, false);

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

TabStop.

FindPrior_________

См. раздел «Навигация по наборам данных».

First_____________

См. раздел «Навигация по наборам данных».

FloodFill_________

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

Класс TCanυas

Объявление

Enum TFillStyle IfsSurface, fsBorder);

Void_____ fastcall FloodFilldnt X, int Y, TColor Color,

TFillStyle FillStyle) ;

Описание

Метод FloodFill Закрашивает текущей кистью Briisli замкнутую область кан­вы, определенную цветом и начальной точкой закрашивания (X, Y). Точка с коор­динатами XuY является произвольной внутренней точкой заполняемой области, которая может иметь произвольную форму. Граница этой области определяется со­четанием параметров Color и FillStyle. Параметр Color Типа TColor Указывает цвет, который используется при определении границы закрашиваемой области,

А параметр определяет, как именно по этому цвету определяется граница.

Если FillStyl^ = fsSurface, То заполняется область, окрашенная цветом Color, А на других цветах метод останавливается. Если FillStyle „= FsBorder, то наоборот, за­полняется область окрашенная любыми цветами, не равными Color, А на цвете

Color Метод останавливается.

Примеры

1. Imagel->Canvas->Brush->Color = clWhite;

Imagel->Canvas->FloodFill(X, Y, Imagel->Canvas->Pi×els[X][Y] ,

FsSurface);

Приведенные операторы закрашивают белым цветом на канве компонента Imagel все пикселы, прилегающие к пикселу с координатами (X, Y) и имею­щие тот же цвет, что и этот пиксел.

2. Imagel->Canvas->Brush->Color = clWhite;

Imagel->Canvas->FloodFill(X, Y, clBlack, fsBorder);

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

FlushBuffers______

Пересылает в базу данных все изменения, сохраненные в буфере.

Класс TBDEDataSeT

Объявление

Void____ fastcall FlushBuffers(void) ;

Описание

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

Focu sed_________

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

Класс TWinControL

Объявление

DYNAMIC bool fastcall Focused(void);

Описание

Метод Focused Определяет, является ли оконный элемент активным, т. е. нахо­дится ли он в фокусе. Возвращает true, если элемент находится в фокусе, и False — если элемент не в фокусе и пользователь в данный момент не может с ним взаимо­Действовать.

FrameRect______________________________________________________

Рисует на канве текущей кистью прямоугольную рамку.

Класс TCanvas Объявление

Void fastcall FrameRect(const Windows;:TRect SRect);

Описание

Метод FrameRect Рисует на канве прямоугольную рамку вокруг области Rect, Используя установку текущей кисти Brush. Толщина рамки — 1 пиксел. Область внутри рамки кистью не заполняется. Отличается от метода Rectangle Тем, что рамка рисуется цветом кисти (в методе Rectangle — цветом пера Реп) и область не закрашивается (в методе Rectangle Закрашивается).

Пример

Операторы

Imagel->Canvas->Brush->Color = clBlack;

Imagel->Canvas->FrameRect(Rect(10,10,100,100)) ; рисуют на канве компонента Imagel Черную рамку.

FreeBookmark _

См. в разделе «Bookmark Valid, CompareBookmarks, GetBookmark, GotoBook — Mark, FreeBookmark ».

Get — функция-элемент Ifstream _

Вводит символы из входного потока.

Класс Ifstream

Объявления

Char get () ;

Bool get (char) ;

Void get (char *, int n, char delim) ;

Описание

Метод Get Представляет собой функции-элементы класса входного потока Ifstream. Он вводит символы из файла, связанного с потоком. Метод имеет три приведенные выше модификации.

Первая модификация

Функция get без аргументов вводит одиночный символ из указанного потока (даже, если это символ разделитель) и возвращает этот символ в качестве значения вызова функции. Этот вариант функции get возвращает EOF, когда в потоке встре­чается признак конца файла.

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

Char s [80], С;

Ifstream irɪfile ( "Test. dat") ; if {

ShowMessage ("Файл не удается открыть"); return;

}

Int i = 0;

While((c = infile. get()) ! = EOF)

{

If(с == ‘∖n,)

{

// Занесение Нулевого Символа В конец строки S[i] = 0 ;

// обработка Строки

I’- 0;

)

// Формирование Строки

E l se s I i ÷∙S∙J » С,"

)

// Закрытие файла
Infile. close() ;

Здесь символы файла поочередно читаются в символьную переменную с. Если прочитанный символ не является символом перевода строки "\п", то символ добав­ляется в строку s. Если же символ равен "\п", то в конец строки заносится нулевой символ, строка подвергается какой-то обработке, после чего начинает формиро­ваться следующая строка. Отметим, что этот код имеет один недостаток: если сим­волу конца файла не предшествует символ перевода строки, то последняя строка оказывается без завершающего нулевого символа и остается необработанной. Не­трудно придумать дополнение кода, которое ликвидировало бы этот недостаток.

Функцию Get() Удобно использовать для поиска в файле какого-то ключевого символа. Например, цикл поиска в файле символа можно организовать сле­

Дующим образом:

While((c = infile. get()) != EOF)

{

If (с == ‘ $ ‘) break; if (с == ‘$’) …

}

Вторая модификация

Второй вариант функции-элемента get с символьным аргументом вводит оче­редной символ из входного потока (даже, если этот символ разделитель) и сохраня­ет его в символьном аргументе. Этот вариант функции Get Возвращает ложь, когда встречается признак конца файла; в остальных случаях этот вариант функции Get Возвращает ссылку на тот объект потока, для которого вызывалась функция-эле­мент get.

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

While:

While(infile. get(с))

Третья модификация

Третий вариант функции-элемента get принимает три параметра: символьный массив s, максимальное число символов п и ограничитель deliɪn (по умолчанию символ перевода строки "\п"). Этот вариант читает символы из входного потока до тех пор, пока не достигается число символов, на 1 меньше указанного максималь­ного числа п, или пока не считывается ограничитель. Затем для завершения вве­денной строки в символьный массив, используемый в качестве буфера программы, помещается нулевой символ. Ограничитель в символьный массив не помещается, а остается во входном потоке (он будет следующим считываемым символом). Та­ким образом, результатом второго подряд использования функции Get Явится пус­тая строка, если только ограничитель не удалить из входного потока.

Приведенный ранее пример чтения всего файла по строкам в данном случае реализуется проще:

Char s [80] ;

Ifstream infile("Test. dat") ; if ( ! infile)

{

ShowMessage("Файл не удается открыть"); return;

}

While (!infile. eof() )

{

Infile. get(s,80); infile. get () ;

// Обработка строки

}

// закрытие файла
Infile. close () ;

В данном случае третий аргумент в вызове get не указан. Значит подразумева­ется по умолчанию ограничитель и каждый вызов get читает одну строку (подразумевается, что ее длина не более 80 символов). Обратите внимание на то,

Что после оператора infile. get(s,80);

Добавлен оператор

Infile. get () ;

Этот оператор удаляет из потока ограничитель. Если этого не сделать, программа

Зациклится.

Функция get с тремя параметрами не всегда удобна, поскольку оставляет ог­раничитель в потоке, и для повторного вызова функции его приходится убирать Отдельным оператором. Часто более удобна другая функция — Getline.

GetBookmark_____

См. в разделе CompareBookmarks, GetBookmark, GotoBook-

Mark, FreeBookmark».

GetData_________________________________________________________________

Возвращает неформатированное («сырое») значение поля.

Класс TField

Объявление

Bool______ fastcall GetData(void * Buffer, bool NativeFormat);

Описание

Метод GetData Возвращает неформатированное («сырое») значение поля в бу­фер Buffer. В отличие от свойств DisplayText. Text. AsString и т. п., метод GetData Не осуществляет преобразование данных к какому-то типу. Буфер Buffer Должен быть достаточного размера. Для определения этого размера можно исполь­зовать свойство DataSize.

Параметр NativeFormat Указывает, не должны ли «сырые» данные трансли­роваться в тип поля набора данных: если NativeFormat true — не должны, если False Должны.

Если значение поля пустое (NULL), то GetData Возвращает False И в буфер ни­чего не заносится. В остальных случаях возвращается true.

Метод GetData Не может применяться к полям BLOB и Memo.

GetDetailDataSets________________________________________________

Заполняет список вспомогательных наборов данных, управляемых головным

Набором.

Класс TDataSet Объявление

Void_ fastcall GetDetailDataSets(Classes::TList* List);

Описание

Метод GetDetailDataSets Применяется в головном наборе данных типа mas — ter/detail — головной/вспомогательный (детализирующий). Метод заполняет спи-

Сок List Типа TIJwt всех вспомогательных наборов данных, подключенных к голов­ному. Список List Должен быть создан до обращения к GetDetailDataSets. Метод GetDetailDataSets Только заполняет его указателями на объекты TDataSet. Поль­зуясь заполненным списком List, Можно получить доступ и ко всем полям этих вспомогательных наборов данных. Речь идет только о связях типа master/detail. Для доступа ко вложенным наборам данных надо использовать свойство Nested- DataScts.

Пример

Пусть в вашем приложении имеется головной набор данных Tablel И несколь­ко вспомогательных (детализирующих) наборов данных, один из которых — Table2. Введите глобальные переменные:

TList * MasterFields = new TList;

TList * DetailFields = new TList;

Тогда следующий код с помощью метода GetDetailDataSets, Примененного к головной таблице Tablel, Позволяет отобразить список всех вспомогательных (детализирующих) таблиц и списки всех их полей:

Tablel->GetDetailDataSets(DetailFields) ;

Info = "Таблицы детализации\п\п" ;

For (int i=0; i < DetailFields->Count; i++)

(

Info = "поля таблицы " +

( (TDataSet *) DetailFields->Items [i] ) ->Name + ‘∖n’; for (int j = 0;

J < ((TDataSet*) DetailFields->Items [i] ) ->FieldCount; j++)

Info += ((TDataSet *)DetailFields->Items[i))->

Fields->Fields[j]->FieldName + ‘∖n,;

}

ShowMessage(info)

В результате выполнения этого кода отобразится окно с сообщением вида: Таблицы детализации

Поля таблицы ТаЫеЗ

Dep

Fam

Nam

Поля таблицы ТаЫеЗ

GetDetailLinkFields_______________________________________________________

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

Класс TDataSet Объявление

Virtual void_______ fastcall GetDetailLinkFields (

Classes::TList* MasterFields,

Classes::TList* DetailFields);

Описание

Метод GetDetailLinkFields Применяется во вспомогательном наборе данных типа master/detail — головной/вспомогательный (детализирующий). Метод позво­ляет получить доступ к ключевым полям, совпадение значений которых обеспечи­вает связь головного и вспомогательного наборов. Списки, передаваемые в метод

Как параметры MasterFields и DetailFields (должны быть созданы до вызова мето­да), заполняются объектами Wield ключевых полей соответственно головного и вспомогательного наборов.

Пример

Пусть в вашем приложении имеется головной набор данных Tablel И несколь­ко вспомогательных (детализирующих) наборов данных, один из которых — Table2. Введите глобальные переменные:

TList * MasterFields = new TList;

TList * DetailFields = new TList;

Тогда следующий код позволяет отобразить список ключевых полей головной и детализирующей таблиц (метод GetDetailLinkFields Применяется ко вспомога­тельной таблице Table2):

Table2->GetDetailLinkFields(MasterFields, DetailFields);

String info = "Ключевые поля таблиц"

"\пголовной\Ьвспомогательной\п\п"; for (int i=0; i < MasterFields->Count; i++)

Info +=

( (TField *) MasterFields->Items [i] )->FieldNarne + "∖t∖t" +

((TField*)DetailFields->Items[i])->FieldName + ‘∖n’;

ShowMessage(info);

В результате выполнения этого кода отобразится окно с сообщением вида:

Ключевые поля таблиц головной вспомогательной

Dep Dep

GetFieldNames — метод TFields И TDataSet_________________________

Возвращает список имен всех полей объекта TFields.

Классы TFields, TDataSet

Определение

Void fastcall GetFieldNames (Classes : .-TStrings * List);

Описание

В классе TFields Метод GetFieldNames Заполняет список List типа TStrings именами всех полей объекта TFields.

В классе TDataSet Метод GetFieldNames Заполняет аналогичный список List Именами всех полей набора данных, кроме полей совокупных характеристик. Тип списка TStrings Удобен, для ввода его в такие компоненты, как TListBox, TComboBox, TMemo и др.

См. также метод GetItemNames.

Пример

Каждый из приведенных ниже операторов заполняет выпадающий список ComboBoxl Именами полей таблицы, соединенной с компонентом Tablel:

Tablel->GetFieldNames(ComboBoxl->Items);

Tablel->Fields->GetFieldNames(ComboBoxl->Items);

Объявления

Enum TGroupPosInd { gbFirst, gbMiddle, gbLast }; typedef SetcTGroupPosInd, gbFirst, gbLast> TGroupPosInds;

Virtual TGroupPosInds_ fastcall GetGroupStatefint Level);

Описание

Метод GetGroupState Позволяет определить положение текущей записи в груп­пе записей, указанной параметром Level. Этот параметр указывает уровень группы в текущем индексе. Уровень 1 — это множество записей с одинаковым значением первого поля, указанного в индексе, уровень 2 — то же самое по отношению ко вто­рому полю индекса и т. д. Уровень 0 — это множество всех записей. Если значение Level Превышает значение свойства GroupingLevel. Генерируется исключение.

Функция GetGroupState Возвращает множество значений, пустое, или содер­жащее элементы:

[gbFirst]

Текущая запись первая, но не единственная в группе

[gbLast]

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

JgbMiddle]

Текущая запись не первая и не последняя в группе

[gbFirst, gbLast]

Текущая запись единственная в группе

Если свойство AggregatesActive Равно False Или текущий индекс не поддер­Живает группирования, функция GetGroupState Возвращает пустое множество.

GetItemNames___________________________________________________

Возвращает имена всех описаний в объекте TDefCollection.

Класс _ TDefCollection

Объявление

Void_______ fastcall GetItemNames(ClassesTStrings* List);

Описание

Метод GetltemNames Возвращает в виде списка строк List Типа Т Strings Име­на всех описаний в объекте TDefCollection. При вызове метода параметр List Мо­жет быть пустым списком строк. Этот список в результате вызова GetltemNames Заполнится именами всех описаний.

См. также метод GetFieldNames.

Пример

Следующий оператор заполняет выпадающий список ComboBoxl именами по­лей таблицы, соединенной с компонентом Tablel:

Tablel->FieldDefs->GetItemNames(ComboBoxl->Items);

Описание

Метод Getline Представляет собой функцию-элемент класса входного потока If stream. Он вводит строку символов из файла, связанного с потоком.

Функции Getline Принимает три параметра: символьный массив s, максималь­ное число символов п и ограничитель delIm (по умолчанию символ перевода стро­ки ‘,’∖n"). Функция читает символы из входного потока до тех пор, пока не достига­ется число символов, на 1 меньше указанного максимального числа п, или пока не считывается ограничитель. Затем для завершения введенной строки в символьный массив, используемый в качестве буфера программы, помещается нулевой символ. Ограничитель в символьный массив не помещается и удаляется из входного пото­ка. В этом основное отличие функции Getline От варианта функции Get, читающего строки символов. Функция get оставляет разделитель во входном потоке и его при­ходится удалять из него, чтобы прочитать следующую строку. Так что в этом отно­шении функция Getline Удобнее.

Пример

Ниже приведен пример чтения файла по строкам с помощью функции Getline. Сравнив его с аналогичным примером, приведенным в описании функции get, вы можете увидеть преимущества функции Getline.

Char s [80], с;

Ifstream infile("Test. dat") ; if(!infile)

{

ShowMessage("Файл не удается открыть"); return;

} * while(!infile. eof ())

{

Infile. getline(s,80);

// Обработка Строки

If (s[0] != 0) Labell->Caption = S;

}

// закрытие файла

Infile. close () ;

GetTabOrderList_________________________________________________

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

Класс TWi_riCoritГоI

Объявление

DYNAMIC void fastcall GetTabOrderList(Classes::TList* List);

Описание

Метод GetTabOrderList Строит список типа TList дочерних оконных компо­нентов в последовательности табуляции. В список входят не только непосредствен­ные потомки данного элемента, но и косвенные потомки, включенные в дочерние контейнеры. При этом не обращается внимание на значение свойства TabStop Включаемых компонентов.

Метод GetTabOrderList Вызывается методом FindNextControl, определяю­щим последующий или предшествующий компонент в списке табуляции.

Пример

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

TWinControl * obj;

TList * List = new TList;

GetTabOrderList(List);

For (int i=0 ,- i <

{

/Поочередный доступ К объектам Obj = (TWinControl*) (List->Iterns[i]) ShowMessage(obj->Name);

GotoBookmark _

См. в разделе «BookmarkValid, CompareBookniarks, GetBookmark, GotoBook — Mark, FreeBookmark».

GotoKey

См. раздел «SetKey, EditKey, GotoKey, GotoNearest»

GotoNearest

См. раздел «SetKey, EditKey, GotoKey, GotoNearest».

HandleAllocated

Проверяет наличие дескриптора окна компонента.

Класс TWinControl

Объявление

Bool______ fastcall HandleAllocated(Void) ;

Описание

Метод HandleAllocated Используется для Определения, Имеется ли дескриптор окна у данного элемента. Если дескриптор имеется, то возвращается True.

Непосредственная проверка свойства Handle Приводит к тому, что даже если дескриптора не было, он создается. Применение HandleAllocated Позволяет опре­Делить наличие дескриптора без этого побочного эффекта.

Handle Needed__________________________________________________

Создает дескриптор окна, если до этого он не существовал.

Класс TWinControl

Объявление

Void___ fastcall HandleNeeded(Void) ;

Описание

Метод HandleNeeded Создает дескриптор окна, если до этого его не было. При создании дескриптора он прежде всего вызывает метод CreateHandle Родительско­го элемента, а уже затем создает дескриптор данного элемента.

Описание

Метод Hide Делает компонент невидимым, задавая значение False Его свойству Visible. Если компонент является контейнером для других компонентов, то эти до­черние компоненты также делаются невидимыми.

Хотя компонент становится невидимым, его свойства и методы остаются дос­Тупными.

IndexOf — метод TDefCollection____

Определение первого вхождения в список заданного элемента.

Класс TDefCollection

Объявление

Int____ fastcall IndexOf(const AnsiString AName);

Описание

Метод IndexOf Возвращает индекс описания в массиве Items По его имени AName. Индексы начинаются с 0. Если описания с именем AName Нет, то возвра­щается Это можно использовать для определения наличия описания перед

Применением метода Find.

IndexOf — метод TFields

Возвращает номер индекса объекта TField В списке TFields.

Класс TFields

Объявление

Int_ fastcall IndexOf(TField* Field);

Описание

Метод IndexOf Возвращает номер индекса объекта Field Типа TField В списке TFields. Индексы начинаются с 0. Если поле в списке не найдено, возвращается -1.

IndexOf — метод списков

Определение первого вхождения в список заданного элемента.

Классы TList — TStrineLisT. TStrinss

Объявления Для TList:

Int____ fastcall IndexOf (void * Item);

Для TStrings И TStringList:

Virtual int__ fastcall IndexOf(const AnsiString S)

Описание

Вызов IndexOf Возвращает индекс первого вхождения в массив списка задан­ного элемента (указателя Item Для ‘l‰ist Или строки S для TStringList И TStringsL. Индексация начинается с О (О — первый элемент массива). Если заданного элемен­та в списке нет, возвращается -1.

Пример

В приведенном ниже примере есть ли в списке сотрудник, фа­милия которого задана в окне Editl.

TStringList *LPerson = new∕TStringList () ;

If (LPerson-MndexOf (Editl-Mext) <0)

ShowMessage ("Оострудника ’’ + Editl-Mext + " в списке нет”)

Insert — метод TCoIIection__________________________________ *_____

Создает новый объект и вставляет его в массив Items.

Класс TCollection

Определение

TcollectionItern*_______ fastcall Insert (int Index);

Описание

Метод Insert Создает новый объект TCollectionItem И вставляет его в массив

Items в позицию, указанную параметром Index. Индексы прежних объектов, на­Чиная с Index, Увеличиваются на 1.

Insert — метод TDataSet__________________________________________

Вставляют новую пустую запись в набор данных.

Класс TDataSet Объявление

HIDESBASE void____ fastcall Insert(void);

Описание

Метод Insert Вставляет новую пустую запись в набор данных и делает ее ак­тивной. После этого можно предоставить пользователю возможность заполнить поля этой записи и затем занести запись в базу данных методом Post (или методом ApplvUpdates. Если осуществляется кэширование). Место размещения новой за­писи в наборе определяется следующим образом:

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

• Для таблиц Paradox без первичного индекса запись вставляется в текущую по­зицию курсора индексу

• Для таблиц dBASE, FoxPro и Access запись вставляется в конец набора дан­ных. Если в данный момент активен индекс, то отображение вставляемой за­писи может появиться в позиции, соответствующей индексу, но физически за­пись все равно вставляется в конец таблицы

• Для баз данных SQL место расположения новой записи зависит от реализации базы данных. Для индексированных таблиц индекс обновляется с учетом но­вой записи

См. также методы InsertRecord, Append И AppendRecord.

Пример

Следующие операторы создают новую запись, заполняют ее поля Fam, Nam, Par (Фамилия, Имя, Отчество) значениями, введенными в окна редактирования Editl, Edit2, Edit3 и пересылают запись в базу данных.

Tablel->Insert () ;

Tablel->FieldValues["Fam"] = Editl->Text;

Tablel->FieldValues["Nam"] = Edit2->Text;

Tablel->FieldValues["Par"] = Edit3->Text;

Tablel->Post () ;

В приведенном примере метод Insert Можно было бы заменить методом Append. Никакой разницы в результатах не было бы, кроме, возможно, несколько иного размещения новой записи в базе данных.

Классы TList. TStrinsList, TStrinss

Определения

Для TList:

VoiD fastcall Inserttint Index, void [‡] [§] Item);

Для TStrings:

Virtual void fastcall Insert (int Index, const AnsiString S) = 0;

Для TStringList:

Virtual void_______ fastcall Insert (int Index, const AnsiString S) ;

Описание

Процедура. Insert Вставляет элемент (указатель Item Или строку S) в список в позицию, индекс которой задан параметром Index. Если задан Index = 0, элемент вставляется в первую позицию. При вставке элемента все имеющиеся в списке эле­менты с индексами, равными и большими Index, Сдвигаются, т. е. их индексы уве­личиваются на 1.

Если список сортирован, то вызов Insert Приводит к генерации исключения EListError. Для сортированных списков следует использовать метод Add.

Если в списки TStringList И TStrings Надо вставить строку, связанную с объ­Ектом, то вместо метода Insert Следует использовать метод InsertObject.

Имеется еще метода внесения новой записи в набор данных AppendRecorcI. Он отличается от рассмотренных только позицией размещения записи в физической

Базе данных.

См. методы Insert. Append И AppendRecord.

Пример

Следующие операторы создают новую запись, заполняют ее поля Fam, Nam,

(Фамилия, Имя, Отчество) значениями, введенными в окна редактирования Editl, Edit2, Edit3. В первое поле (номер записи) заносится целое число, во второе поле (отдел работы сотрудника) не заносится ничего. В поля, следующие за поля­ми фамилии, имени и отчества также ничего не заносится.

Tablel-S-InsertRecord (ARRAYOFCONST (

(18, NULL, Editl->Text, Edit2->Text, Edit3->Text)));

Tablel->Post () ;

Приведенный выше оператор InsertRecord нельзя было бы применить, если, например, первое поле (номер записи) является автоматически нарастающим (AutoIncrement), Т. е. не модифицируемым.

В приведенном примере метод InsertRecord Можно было бы заменить методом AppendRecord. Никакой разницы в результатах не было бы, кроме, возможно, не­Сколько иного размещения новой записи в базе данных.

Invalidate______________________________________________________

Сообщает Windows о необходимости полностью перерисовать компонент после того, как будут обработаны другие важные сообщения Windows.

Класс TControL

Объявление

Virtual void fastcall Invalidate (void) ;

Описание

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

I sVa lidChar____________________________________________________

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

Класс TField

Объявление

Virtual bool__________ fastcall IsValidChar(char InputChar);

Описание

Метод IsValidChar Проверяет, является ли указанный символ InputChar До­пустимым для данного поля. Метод IsValidChar Возвращает True, Если Input — Char — допустимый символ, и False — если недопустимый.

Множество допустимых для поля символов задается в свойстве ValidChars. По умолчанию это свойство различно для различных типов DataType Полей:

1 ftBoolean

Все символы J

FtSmalllnt

Цифры от 0 до 9, знаки "-⅛∙" и

FtWord

Цифры от 0 до 9, знаки "4 •" и

HftAutoInc

Цифры от 0 до 9, знаки "+" и

FtDate

Все символы

Ftlnteger

Цифры от 0 до 9, знаки и

FtTime

Все символы

1 ftCurrency

Цифры от 0 до 9, знаки "+" и буква "Е" или "е”, десяти­

Чный разделитель (точка или запятая в зависимости от уста­новки Windows)

FtDateTime

Все символы

FtFloat

Цифры от 0 до 9, знаки ”+" и буква "Е" или "е", десяти­

Чный разделитель (точка или запятая в зависимости от уста­новки Windows)

FtBCD

Цифры от 0 до 9, знаки и десятичный разделитель

(точка или запятая в зависимости от установки Windows)

Ft String

Все символы

I ftVarBytes

Все символы

FtBytes

Все символы

FtBlob

Все символы

FtDBaseOle

Все символы

FtFmtMemo

Все символы

FtGraphic

Все символы

FtMemo

Все символы

FtParadoxOle

Все символы

I ftTypedBinary

Все символы

I ftlʃnknown

Все символы

FtCursor

Все символы

L-— —

В некоторых типах полей (например, FtGraphic) IsValidChar Возвращает True Для любых символов, хотя не все они допустимы.

Метод IsValidChar Неявно используется многими компонентами, связанными с данными. Явное использование IsValidChar См. в примере раздела «ValidCharso В гл. 3.

Метод IsValidChar Проверяет допустимости символа независимо от его пози­ции во вводимом значении. Проверку с учетом позиции символа может осуществ­Лять свойство EditMask.

Last____________________________________________________________________

Объявление

Void____ fastcall LineTo(int X, int Y) ;

Описание

Метод LineTo Рисует на канве прямую линию, начинающуюся с текущей по­зиции пера PenPos И кончающуюся точкой (X, Y), исключая саму точку (X, Y). Те­кущая позиция пера PenPos Перемещается в точку (X, Y). При рисовании исполь­зуются текущие установки пера Реп.

Пример

Операторы

Imagel->Canvas->MoveTo(XI, Yl);

Imagel->Canvas->LineTo(X2 , Y2);

Imagel->Canvas->LineTo(ХЗ, Y3) ;

Рисуют кусочно-ломаную прямую, соединяющую точки (XI,Yl), (X2,Y2) И (X3,Y3).

LoadFromClipboardFormat________________________________________

Загружает изображение из буфера обмена в формате Clipboard.

Класс TGraphic

Объявление

Virtual void fastcall LoadFromClipboardFormat(

Word AFormat, int AData, HPALETTE APalette) ;

Описание

Метод загружает изображение в графический объект в указанном формате Clipboard. Если формат AFormat Найден среди зарегистрированных, то AData и APalette Передаются для загрузки изображения. Стандартно зарегистрирован­ные форматы: CF_BITMAP Для битовых карт и CF_METAFILEPICT Для метафай­лов. Значение AData Может быть указано методом GetAstlandlc Объекта типа TClipBoard. При этом надо не забыть включить в модуль директиву:

♦include <vcl∖Clipbrd. hρp>

Формат для нового типа графического объекта предварительно должен быть зарегистрирован методом RegisterClipboardFormat.

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

Пример

Операторы

♦include <vcl∖Clipbrd. hpp>

If (Clipboard()->HasFormat(CF_BITMAP))

{

Try

(

Imagel->Picture->Bitmap->LoadFromClipboardFormat(

CF_BITMAP, Clipboard()->GetAsHandle(CF_BITMAP), 0) ;

}

Catch (…)

(

ShowMessage("Загрузка изображения невозможна");

}

Else

ShowMessageCB буфере не изображение в формате битовой карты");
загружают изображение из буфера обмена в формате битовой карты в компонент

Imagel.

LoadFromFile — метод TGraphic___________________________________

Загружает изображение, хранящееся в файле.

Класс TGraphic Объявление

Virtual void fastcall LoadFroraFile(const AnsiString FileNarne);

Описание

Метод LoadFromFile Читает файл FileName И загружает его в графический объект.

Если формат графического файла не зарегистрирован, или не соответствует типу графического объекта, то генерируется исключение EInvalidGraphic.

Пример

If (OpenPictureDialogl->Execute())’

Imagel->Picture->LoadFromFile(OpenPictureDialogl->FileName);

Этот оператор открывает диалог OpenPictureDialogl, Позволяющий пользова­Телю выбрать файл, и загружает изображение из файла в компонент Imagel.

LoadFromFile И другие методы загрузки и сохранения данных класса TCustomClientData S et

Обеспечивают загрузку и сохранение данных в файле или потоке. Класс TcustomClientDataSet

Объявления

Void fastcall LoadFrornFile (const AnsiString FileName = ‘ void fastcall LoadFromStrearn(Classes::TStream* Stream);

Enum TDataPacketFormat (dfBinary, dfXML, dfXMLUTF8) void fastcall SaveToFile (const AnsiString FileName = "",

TDataPacketFormat Format = dfBinary) ; void fastcall SaveToStream(Classes::TStream* Stream,

TDataPacketFormat Format = dfBinary) ;

Описание

Методы LoadFromFile И LoadFromStream Загружают данные из файла File­Name Или потока Stream В клиентский набор данных. Если в вызове LoadFrom- File Имя файла не задано, например:

ClientDataΞetl->LoadFromFile();

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

Файл, из которого загружаются данные методом LoadFromFile, Должен быть создан заранее методом SaveToFile Данного или другого клиентского набора дан­ных, или создан компонентом TXMLTransform.

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

Метод LoadFromFile Может вызываться неявно и в процессе проектирования. Для этого надо щелкнуть на компоненте правой кнопкой мыши и выбрать из кон­текстного меню раздел Load From File.

Поток, из которого читаются данные методом LoadFromStream, Должен со­держать данные, загруженные в него методом SaveToStream.

Методы SaveToFile И SaveToStream Сохраняют данные клиентского набора данных в файле FileName Или потоке Stream. Параметр TDataPacketFormat oɪɪ

Ределяет формат записи данных: dl’Binary — двоичный, dfXML — XML с расши­ренным набором символов, включая escape-последовательности, dfXMLUTF8 — XML С расширенным набором символов, представленный С помощью UTF8.

При записи в файл, если этот файл не существует, он создается, а если сущест­вует — его данные стираются и заменяются новыми.

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

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

При вызове SaveToStream Поток Stream должен существовать. Если этот по­ток требует буфер, то для определения необходимого размера буфера можно ис­Пользовать свойство DataSize.

LoadrromResourceID

Загружает битовую карту из файла ресурсов по указанному идентификатору. Класс TBitmap

Объявление

Void____ fastcall LoadFromResourceID(int Instance, int ResID);

Описание

Метод LoadFromResoureelD Загружает битовую карту из файла ресурсов вы­Полняемого модуля. Загружаемая карта указывается идентификатором ResID.

LoadFrom ResourceName_________________________________________

Загружает битовую карту из файла ресурсов по указанному имени.

Класс TBitmap Объявление

Void____ fastcall LoadFromResourceName (int Instance,

Const AnsiString ResName) ;

Z ∙ — ■ ■■

Описание

Метод LoadFromResourceName Загружает битовую карту из файла ресурсов Выполняемого модуля. Загружаемая карта указывается именем ResName.

LoadFromStream — метод TGraphic________________________________

Загружает графическое изображение из указанного потока.

Класс TGraphic

Объявление

Virtual void___________ fastcall LoadFromStream(Classes::TStream* Stream);

Описание

Метод LoadFromStream Читает из потока Stream Графический объект. Ис­пользуется, например, для загрузки изображения из объекта TBlobStream, чтобы Прочитать графическое поле в наборе данных.

LoadFromStream — метод TcustomClientDataSet______________________

См. разд. «LoadFromFiIe и другие методы загрузки и сохранения данных клас­са TCustomClientDataSet».

Locate__________________________________________________________________

Осуществляет поиск записи в наборе данных.

Класс TDataSet Объявление

Enum TLocateOption { IoCaseInsensitive, IoPartialKey ); typedef Set<TLocateOption, loCaselnsensitive, loPartialKey>

TLocateOptions;

Virtual bool_____ fastcall Locate(const AnsiString KeyFields,

Const System::Variant SKeyValues, TLocateOptions Options);

Описание

Метод Locate Является, наряду с Lookup. SetKey и FindKey. Методом поиска записи в наборе данных.

В качестве первого параметра KeyFields Передается строка, содержащая спи­сок ключевых полей, по которым осуществляется поиск. В качестве второго пара­метра передается KeyValues — массив ключевых значений. Ищется запись, в ко­торой значения полей KeyFields Совпадают с заданными в KeyValues. Третий па­раметр Options Является множеством опций, элементами которого могут быть LoCaselnsensitive — нечувствительность поиска к регистру, в котором введены символы, и LoPartialKey — допустимость частичного совпадения. Метод возвра­щает False, Если искомая запись не найдена.

Метод Locate Отличается от методов SetKey И FindKey Прежде всего отсутст­вием необходимости индексировать определенным образом набор данных. В силу этого Locate Более прост и универсален. Кроме того метод Locate, В отличие от SetKey И FindKey. Применим к компонентам Microsoft ActiveX Data Objects (ADO) — например, ADOTable И ADOQuery, А также к компонентам InterBase Express (IBX) — например, IBTable и IBQuery.

Метод Locate Не требует индексации набора данных. Но если набор данных индексирован по полям KeyFields, То поиск производится быстрее.

При поиске по нескольким полям можно воспользоваться функцией Var — ArrayOf, которая формирует тип Variant Из задаваемого ей массива параметров любого типа.

Примеры

Пусть в вашем приложении имеется набор данных Tablcl, содержащий спи­сок сотрудников, в котором поле Fam содержит фамилию сотрудника, а поле Dep — наименование отдела, в котором он работает. Приложение имеет также окно редактирования EFam, в котором пользователь вводит символы фамилии. Требуется осуществить ускоренный поиск записи по мере ввода пользователем фа­милии искомого сотрудника.

При использовании метода Locate Достаточно в обработчик события OnChange Окна EFam Вставить оператор

TLocateOptions SearchOptions;

SearchOptions << loPartialKey << loCaselnsensitive;

Tablel->Locate("Fam",EFam->Text, SearchOptions);

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

Приведенный код можно сократить до двух операторов:

TLocateOptions SearchOptions;

Tablel->Locate ("Fam", EFam->Text,

SearchOptions<<loPartialKey<<loCase! nsensitive);

Если требуется найти не просто сотрудника с задаваемой фамилией, а сотруд­ника отдела, наименование которого введено в окно редактирования EDep, Опера­торы надо изменить на следующие:

TLocateOptions SearchOptions;

Variant Iocvalues[] = {EDep->Text, EFam->Text};

Tablel->Locate("Dep;Fam", VarArrayOf(Iocvalues, 1),

SearchOptions<<loPartialKey<<loCaseInsensitive) ;

В этом примере использована функция VarArrayOf, Которая формирует тип Variant Из задаваемого ей массива параметров любого тина.

Lock____________________________________________________________________

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

Класс TCanvas

Объявление

Void____ fastcall Lock (void) ;

Описание

Метод Lock Блокирует данную канву, не разрешая другим нитям многопоточ­ного приложения рисовать на ней. Канва остается блокированной до снятия блока­ды вызовом метода Unlock. Если имеются вложенные вызовы Lock, То они увели­чивают свойство LockCount, фиксирующее количество блокировок. Канва будет оставаться блокированной, пока не будет снята последняя блокировка.

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

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

Lookup__________________________________________________________________

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

Класс TDataSet

Объявление

Virtual System::Variant___________ fastcall Lookup(

Const AnsiStrinq KeyFields, const Variant SKeyValues, const AnsiString ResultFields) ;

Описание

Метод Lookup Относится к методам поиска записи в наборе данных. Но в отли­чие от других методов поиска — Locate. SctKevИ FindKEv, метод Lookup Не пере­мещает курсор на найденную запись, а возвращает значения указанных полей этой записи.

В качестве первого параметра KeyFields В метод передается строка, содержа­щая список ключевых полей, по которым осуществляется поиск. В качестве второго параметра передается KeyValues — массив ключевых значений. Ищется запись, в которой значения полей KeyFields Совпадают с заданными в KeyValues. Третий параметр ResultFields — строка, перечисляющая имена полей, значения которых возвращаются. Имена полей в ResultFields Разделяются точками с запятой.

Метод возвращает значение или значения полей, перечисленных в Result — Fields, В виде значения Variant Или массива Variant.

Возвращенные методом Lookup Значения полей могут, в частности, использо­ваться вместо параметра Keу Values В другом операторе Lookup Или Locate. Это от­крывает широкие возможности формирования сложных запросов по нескольким таблицам.

Пример

Пусть вы хотите найти в наборе данных Tahlel запись, относящуюся к сотруд­нику, фамилия которого (поле Гат) Указана в окне ЕГат, И вывести в окно EDep Название отдела (поле Dep), В котором он работает. Эти операции можно осущест­вить следующим оператором:

EDep->Text = Tablel->Lookup("Fam",EFam->Text,"Dep");

MessageBox_____________________________________________________

Метод, отображающий полностью русифицированное диалоговое окно сообщения.

Модуль Forms

Объявление

Function MessageBox(Text, Caption: PChar; Flags: Longint): Integer;

Описание

Функция MessageBox Является методом переменной Application Типа TAppli- cation, Доступной в любом проекте C++Builder. Он позволяет устранить основной недостаток других функций и процедур отображения диалоговых окон, таких, как ShowMessage. ShowMessageFmt. MessageDlg. MessageDIgPos. CreateMessage — Dialog. Этим недостатком является отсутствие русификации диалоговых окон: английские надписи на кнопках и невозможность указать русский текст заголовка окна (кроме функции CreateMessageDialog).

Функция MessageBox Отображает диалоговое окно с заданными кнопками, со­общением и заголовком и позволяет проанализировать ответ пользователя. Функ­ция инкапсулирует функцию MessageBox API Windows. Параметр Text Представ­ляет собой текст сообщения, которое может превышать 255 символов. Для длин­ных сообщений осуществляется автоматический перенос текста. Параметр Caption Представляет собой текст заголовка окна. Он тоже может превышать 255 симво­лов, но не переносится. Так что длинный заголовок приводит к появлению длинно­го и не очень красивого диалогового окна.

Параметр Flags Представляет собой множество флагов, определяющих вид и поведение диалогового окна. Этот параметр может комбинироваться операцией сложения по одному флагу из следующих групп.

Флаги кнопок, отображаемых в диалоговом окне

Флаг

Значение (в скобках даны надписи в русифици­рованных версиях Windows)

MB_ABORTRETRYIGNORE

Кнопки Abort (Стоп), Retry (Повтор) и Ignore (Пропу­стить).

МВ ОК

Кнопка ОК. Этот флаг принят по умолчанию.

MB OKCANCEL

Кнопки OK и Cancel (Отмена).

MB RETRYCANCEL

Кнопки Retry (Повтор) и Cancel (Отмена).

MB YESNO

Кнопки Yes (Да) и No (Нет).

MB YESNOCANCEL

Кнопки Yes (Да), No (Нет) и Cancel (Отмена).

Флаги пиктограмм в диалоговом окне

Флаг

Пиктограмма

Mb Iconexclamation, mb iconwarning

Восклицательный знак (замечание, преду — » преждение).

Mb Iconinformation, mb iconasterisk

Буква "i” в круге (подтверждение).

I

Mbjconquestion

Знак вопроса (ожидание ответа).

Mb iconstop, mb _iconerror, mb iconhand

Знак креста на красном круге (запрет,

Ошибка).

Флаги, указывающие кнопку по умолчанию (которая в первый момент на­ходится в фокусе)

Флаг

Кнопка

I M BUEΓBt)TTONl

Первая кнопка. Это принято по умолчанию.

‘ MB DEFBUTTON2

Вторая кнопка.

MBDEFBUTT0N3

Третья кнопка.

MB_DEFBUTTON4

Четвертая кнопка.

Флаги модальности

Флаг

Пояснение

Mb Applmodal

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

Mb_ systemmodal

То же самое, что MB_APPLMODAL, Но окно диалога отображается в стиле WS_EX_TOPMOST, То есть всегда остается поверх других окон, даже если пользователь перешел к другим приложениям. Используется для пре­дупреждения о серьезных ошибках, требующих немед­ленного вмешательства. .

Некоторые дополнительные флаги (могут задаваться оба флага)

Флаг

Пояснение

MB_HELP

Добавляет в окно кнопку Help (Справка), щелчок на которой или нажатие клавиши Fl генерирует событие Help.

[ MBjrOPMOST

Помещает окно всегда сверху (в стиле WSEXTOPMOST). ∣

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

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

Значение

Численное

Значение

Пояснение

IDABORT

2

Выбрана кнопка Abort (Стоп).

Idcancel

2

Выбрана кнопка Cancel (Отмена) или нажата кла­виша Esc.

Idignore

•5

Выбрана кнопка Ignore (Пропустить).

IDNO

7

Выбрана кнопка No (Нет).

IDOK

1

Выбрана кнопка ОК.

IDRETRY

4

Выбрана кнопка Retry (Повтор).

IDYES

6

Выбрана кнопка Yes (Да).

Пример

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

If (проверка введенных данных)

{ T

It (Applιcatιon->MessageBox(

"Хотите занести текущую Запись В базу данных?”, "Подтвердите занесение в базу данных", mb_yesnocancel + №_iconquestion) != IDYES)

{

DataSet->Cancel () ;

abort () j
)
else
I

Application->MessageBox("Ошибочные данные","Ошибка" MB_ICONSTOP);

Abort () ;

} ∙

Отображаемые этим кодом окна приведены на рис. 4.2. Безусловно, они более удачны за счет русификации, чем аналогичные окна, приведенные в описаниях функций MessageDlg и MessageDlgPos.

Рис. 4.2

Диалоговые окна, отображаемые функцией Application->MessageBox

Move____________________________

Меняет текущую позицию элемента в списке на заданную.

Модуль System

Классы TList. TStrinss

Объявление

Для TList:

Void____ fastcall Move(int CurIndex, int NewIndexj;

Для TStrings:

Virtual void_______ fastcall Move (int Curlndex, int NewIndex);

Описание

Процедура Move Меняет текущую позицию элемента в списке, индекс которо­го задан параметром Curlndex, На позицию с индексом, заданным параметром Newlndex (индексы начинаются с 0). Если со строкой в TStrings или в TStringList Связан объект, он остается связанным с той же строкой в новой позиции.

Пример

Приведенный ниже оператор перемещает первую строку списка My Strings В конец списка.

MyStrings->Move, MyStrings-XCount — 1);

MoveBy________________________________________________________

См. раздел «Навигация по наборам данных».

MoveTo ________________________________________________________

Изменяет текущую позицию пера на заданную, ничего при этом не рисуя.

Класс TCanvas

Объявление

Void____ fastcall MoveTo (int X, int Y);

Описание

Метод MoveTo Изменяет текущую позицию пера PenPos На заданную точкой (X, Y). Это эквивалентно непосредственной установке свойства PenPos. При пере­Мещении пера методом MoveTo Ничего не рисуется.

Next___________________________________________________________

См. раздел «Навигация по наборам данных».

Open____________________________________________________________________

Метод открывает набор данных.

Класс TDataSet

Объявление

Void____ fastcall Open (void) ;

Описание

Функция Open Открывает набор данных, устанавливая свойство Active в True. Фактически, вызов метода Open И установка Active в Truе эквивалентны. Подроб­нее см. в разделе «Active» гл. 3.

OpenDatabase___________________________________________________

Открывает соединение с базой данных.

Класс TDBDataSeT

Объявление

TDatabase*________ fastcall OpenDatabase (void) ;

Описание

Метод OpenDatabase Открывает соединение с базой данных через постоянный или временный компонент базы данных Database. Свойство DatabaseName Набора данных определяет открываемую базу данных.

При вызове OpenDatabase Прежде всего активизируется компонент текущего сеанса сетевого соединения Session. Затем определяется, соответствует ли свойст­во DatabaseName Набора данных свойству DatabaseName Одного из существую­щих компонентов Database. Если не соответствует, то создается временный компо­нент Database С именем, соответствующим свойству DatabaseName. В заключение выполняется метод Open Компонента Database И число его ссылок увеличивается на 1. Это число ссылок учитывается впоследствии при применении метода закры­Тия соединения CloseDatabase.

Perform________________________________________________________

Посылает оконному компоненту указанное сообщение Windows.

Класс TControL

Объявление

Int fastcall Perform (Cardinal Msg, int WParam, int LParam);

Параметры

Msg — идентификатор сообщения, WParam и LParam — параметры сообщения.

Описание

Метод Perform Посылает сообщение тому оконному компоненту, к которому он применен. При этом Perform Заполняет поля структуры типа TMessage значе­ниями параметров Msg, WParam, LParam, И задает нулевое значение полю ре­зультата. Затем эта структура передается на обработку функции, указанной в ком­поненте свойством WindowProc. Таким образом, сообщение пересылается непо­средственно окну, метод Perform Которого используется. Например, оператор

Form2->Perform(WM_CLOSE, О, 0) ;

Передает сообщение WM_CLOSE Форме Form2, Закрывая окно формы.

Pie____________________________________________________________

Рисует заполненную замкнутую фигуру — сегмент окружности или эллипса.

Класс TCanvas

Объявление

Void___ fastcall Pie (int XI, int Yl, int X2, int Y2,

Int X3, int Y3, int X4, int Y4);

Описание

Метод Pie Рисует замкнутую фигуру — сектор окружности или эллипса с по­мощью текущих параметров пера Реп. Фигура заполняется текущим значением Brush. Точки (XI, Yl) и (X2, Y2) определяют прямоугольник, описывающий эл­липс. Начальная точка дуги определяется пересечением эллипса с прямой, прохо­дящей через его центр и точку (ХЗ, Y3). Конечная точка дуги определяется пересе­
чением эллипса с прямой, проходящей через его центр и точку (Х4, Y4). Дуга ри­суется против часовой стрелки от начальной до конечной точки. Рисуются пря­мые, ограничивающие сегмент и проходящие через центр эллипса и точки (ХЗ,

Y3) и (Х4, Y4).

В Windows 95 суммы Xl + Х2, Y1 + Y2 и Xl + Х2 +Yl + Y2 не должны пре­вышать 32768.

В Windows NT/2000/XP направление рисования дуги можно изменить на на­правление по часовой стрелке вызовом функции SetArcDirection.

Примеры

Операторы

Imagel->Canvas->Pie(О, 0, 200, 200, 200, О, О, 0) ;

Image2->Canvas->Pie (0, 0, 200, 200, О, О, 200, 0);

Дают результат, показанный на рис. 4.3.

Рис. 4.3

Дуги, нарисованные функцией Pie

PolyBeziern PolyBezierTo_________________________________________

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

Класс TCanvas

Объявление

Void____ fastcall PolyBezier (const TPoint* Points,

Const int Points_Size);

Void____ fastcall PolyBezierToIconst TPoint * Points,

Const int Points_Size);

Описание

Методы PolyBezier и PolyBezierTo Сглаживают множество точек, содержа­щихся в массиве Points, Кусочной кривой третьего порядка. При этом функция PolyBezier Точно отображает первую и последнюю точку, a PolyBezierTo — только последнюю. Число точек для каждого метода должно быть строго определенным: для PolyBezierTo Оно должно быть кратно 3 (т. е. i*3), а для PolyBezier — на едини­цу больше числа, кратного 3 (т. е. i*3+l). Если число точек не равно требуемому, то функции просто ничего не рисуют.

Исходя из этого при произвольном числе точек N имеет смысл автоматически приводить число точек к требуемому, например, такими операторами:

PolyBezierlpoints, (N/3) *3) ;

PolyBezierToIpoints, (N∕3)*3-l);

В этих операторах число точек N за счет округления при целочисленном деле­нии автоматически приводится к требуемому.

Пример

Ниже приведен код построения аппроксимаций функции — sin(x) методами

PolyBezier, PolyBezierTo И Polyline.

Const N = 10, Lx = 500, Ly = 100, Т = 10;

TPoint points[N];

// заполнение Массива

For(int i.= 0; i <= N; i++)

[i] Point ( (int) (i * Lx /

(int) (sin ( (double) i * Т / (N-I) ) *Ly) +

Imagel-XOlientHeight / 2);

// Рисование

Imagel->Canvas->Pen->Color = clBlack;

Imagel->Canvas->Polyline(points, N-I) ;

Imagel->Canvas->Pen->Color = clRed;

Imagel->Canvas->PolyBezier(points, (N∕3)*3);

Imagel->Canvas->Pen->Color = clGreen;

Imagel->Canvas->PolyBezierTo(points, (N∕3)*3-1)

На рис. 4.4 показаны результаты расчета.

рис. 4.4
изображения, полученные функциями polybezier, polybezierto, polyline
!функции polyhne, poiybezicr и poiybezierto,polybne . ×j

Polygon_____ •__________________________________________________

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

Класс TCanvas

Объявление

Void____ fastcall Polygon(const Windows::TPoint * Points,

Const int Points_Size);

Описание

Метод Polygon Рисует на канве замкнутую фигуру (полигон, многоугольник) по множеству угловых точек, заданному массивом Points. Первая из указанных точек соединяется прямой с последней. Этим метод Polygon Отличается от метода Polyline, который не замыкает конечные точки. Рисование проводится текущим пером Реп. Внутренняя область фигуры закрашивается текущей кистью Brush.

Метод позволяет рисовать фигуру по точкам, хранящимся в массиве элемен­тов типа TPoint.

Пример

Операторы

TPoint points I 5] ;

points[0]
points[1]
points [2]
points[3]
points[4]
=

=

= Point(50,140);

= Point

= Point(70,150);

Imagel->Canvas->Polygon(points, 4) ;

Рисуют на канве формы многоугольник по точкам, хранящимся в массиве Points.

Polyline________________________________________________________

Рисует на канве текущим пером кусочно-линейную кривую по заданному мно­жеству точек.

Класс TCanvas Объявление

Void___ fastcall Polyline(const WindowszzTPoint * Points,

Const int Points_Size);

Описание

Метод Polyline Рисует на канве кусочно-линейную кривую по множеству то­чек, заданному массивом Points. Отличие метод Polyline От метода Polygon Заклю­чается в том, что метод Polygon Замыкает конечные точки, а метод Polyline — нет. Рисование проводится текущим пером Реп. Метод не изменяет текущей позиции PenPos пера Реп.

Метод позволяет рисовать кусочно-линейный график функции, хранящийся в массиве элементов типа_TPomt.

То, что делает метод Polyline, Можно сделать и с помощью методов MoveTo И LineTo. Подведя сначала перо к первой точке, а затем последовательно выполняя LineTo. Различие будет заключаться в том, что метод Polyline Не изменит теку­щую позицию пера, а методы MoveTo И LineTo Изменят.

Пример

tpoint points [5j ;

Операторы

points[0] points [1] points[2]
[3]
points[4]
Point(30,150);

Point

Point

imagel->canvas->polyline(points, 4) ;

Point(60,130); Point

Рисуют кусочно-линейную кривую по четырем точкам, заданным функциями Po­int В массиве Points.

См. также пример в описании функций PolvBezicr И PolyBezierTo.

Post___________________________________________________________

Описание

В наборах данных, построенных на компонентах TTable. TQuery И других на­следниках класса TDataSet. Метод Post Заносит запись, измененную методами Edit. Insert. Append, В базу данных. Метод Post Может в ряде случаев вызываться неявно: как последствие вызова методов навигации First. Last. Next. Prior. Поэто­му прежде, чем перемещаться на новую запись, полезно проверять свойство Modified, Чтобы установить, была ли изменена текущая запись. Для проверки пра­вильности измененных данных и получения от пользователя подтверждения запи­си в базу данных можно использовать обработчик события BeforePost.

В компонентах — наследниках TCustomClientDataSet Выполнение Post Зави­сит от значения свойства LogChanges. Если LogChaiiges = true, Изменения зано­сятся в свойство Delta И затем могут объединяться с данными набора вызовом ме­тода MergeChangeLog. А если LogChanges = false, Вызов Post Заносит изменения непосредственно в свойство Data.

Пример

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

If (Application->MessageBox(

"Хотите занести текущую запись в базу данных?", "Подтвердите сохранение изменений",

MB_YESNOCANCEL+MB_ICONQUESTION) != IDYES)

Tablel->Cancel () ; else Tablel->Post () ;

Prior___________________________________________________________

См. раздел «Навигация по наборам данных».

Reali gn________________________________________________________

См. раздел «DisableAligno.

Reconcile — метод TCustomClientDataSet____________________________

См. разд. «ApplyUpdates, Reconcile — методы TCustomClientDataSet>>.

Rectangle_______________________________________________________

Рисует на канве текущим пером прямоугольник и закрашивает его текущей кистью.

Класс TCaiwas

Объявление

Void____ fastcall Rectanglefint XI, int Yl, int X2, int Y2) ;

Описание

Метод Rectangle Рисует на канве текущим пером Реп прямоугольник, верх­ний левый угол которого имеет координаты а нижний правый — (Х2,

Y2). Прямоугольник закрашивается текущей кистью Brush.

Рисование прямоугольника без рамки можно осуществить методом FillRect. Прямоугольник со скругленными углами рисуется методом RoundRect. Прямо­угольник без внутренней закраски рисуется методом FrameRect.

Пример

Imagel->Canvas->Rectangle(10,10,210,110);

Refresh — метод TControI

Перерисовывает изображение компонента на экране.

Класс TControl Объявление

Void____ fastcall Refreshfvoid);

Описание

Метод Refresh Приводит к немедленной перерисовке изображения на экране. Refresh вызывает метод Repaint. Методы Refresh И Repaint Взаимозаменяемы.

Refresh, RefreshRecord — методы наборов данных___________________

Обновляют в наборе данные, беря их из базы данных.

Классы TDataSet. TcustomClientDataSeT

Объявления

TDataSet: : voi :_________ fastcall Refresh (void) ;

TcustomClientDataSet::void_______________ fastcall RefreshRecord(void);

Описание

Метод Refresh Обновляет набор данных, приводя его в соответствие с текущим состоянием базы данных. Это часто необходимо делать, например, при смене фильтра или отказе от фильтрации, чтобы обеспечить отображение нового множе­ства записей. Не все наборы данных полностью поддерживают метод Refresh. На­пример, в компонентах TQucrY метод срабатывает только в том случае, если работа идет с «живыми» данными (см. свойство RequestLive). В противном случае, для обновления данных надо закрыть и открыть соответствующий набор данных.

Выполнение метода Refresh Сопровождается событиями BeforeRefresh и Af­terRefresh, Наступающими до и после обновления.

При выполнении метода Refresh Делается попытка не изменять положение курсора, указывающего на текущую запись. Но это не всегда возможно. Напри­мер, при обновлении может оказаться, что данная запись уже удалена из базы дан­ных другим пользователем. Невозможно сохранить текущую позицию также в од­нонаправленных наборах данных. В них после обновления курсор всегда перехо­дит на первую запись. Вообще надо учесть, что для однонаправленных наборов данных выполнение Refresh Сводится к закрытию и открытию курсора. Это связа­но с генерацией событий BeforeClose. AfterClose. BeForeQpen, AfTerQpen. Так что надо учитывать, что при этом будут срабатывать коды обработчиков этих событий.

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

В отличие от метода Refresh, Метод RefreshRecord Клиентских наборов дан­ных обновляет только текущую запись, запрашивая у провайдера ее текущие зна­чения в базе данных. В результате обновления изменяются (если есть изменения) начальные значения полей, полученные от провайдера ранее, но сохраняются все изменения, сделанные в клиентском наборе.

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

Пример

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

Void_ fastcall TForml::ClientDatasetlAfterScroll(

TDataSet *DataSet)

F

If (ClientDataSetl->UpdateStatus == UsUnModified)

ClientDataSetl->RefreshRecord();

) . —

RefreshLookupList_______________________________________________

См. в гл. З разд. «LookupList и RefreshLookupList*.

Remove________________________________________________________

Удаляет элемент с заданным значением из списка TList.

Класс TList

Объявление

Int____ fastcall Remove (void * Item; ;

Описание

Функция Remove Удаляет указатель, равный заданному параметру Item, Из списка TList. Функцию можно использовать вместо метода Delete, когда не извес­тен индекс, соответствующий удаляемому указателю. Функция возвращает индекс, который имел данный указатель до его удаления. Индексы всех последующих ука­зателей в списке уменьшаются на 1. Свойство Count Также уменьшается на 1,

Если массив содержит несколько одинаковых указателей, то удаляется только Первое вхождение этого указателя.

Repaint__________

Перерисовывает изображение компонента на экране.

Класс TControl

Объявление

Virtual void_______ fastcall Repaintfvoid);

Описание

Вызов метода Repaint Приводит к немедленной перерисовке изображения на экране. Если свойство ControIStyle Компонента включает CsOpaque, Компонент перерисовывает себя сам. В противном случае Repaint Вызывает метод Invalidate. А затем метод Update.

Класс TCAnvaS

Объявление

Void fastcall RoundRectdnt XI, int Yl, int Х2,

Int Y2, int ХЗ, int Y3) ;

Описание

Метод RoundRect Рисует на канве прямоугольную рамку со скругленными уг­лами, используя текущие установки пера Реп и заполняя площадь фигуры теку­щей кистью Brush. Рамка определяется прямоугольником с координатами углов (X1,Y1) и (X2,Y2). Углы скругляются с помощью эллипсов с шириной ХЗ и высо­той Y3.

Если задать ширину эллипса ХЗ i X2 -XI, То верхняя и нижняя границы рамки окажутся целиком скругленными (без прямолинейной части). Если Y3 Y2 — Yl, то же самое произойдет с левой и правой границами рамки. Если же оба измерения эл­липса не меньше размеров рамки, то будет рисоваться просто эллипс. Но, конечно, для рисования эллипса лучше использовать метод Ellipse. Если один из размеров эл­липса задать нулевым, то будет рисоваться прямоугольная рамка. Но, конечно, для такой рамки лучше использовать метод Rectangle.

Пример

Следующие операторы вызывают изображение, показанное на рис. 4.5:

Imagel->Canvas->RoundRect(10,10,110,210,50,100) ;

Imagel->Canvas->RoundRect(160,10,260,210,100,100) ;

Imagel->Canvas->RoundRect(310, 10,410,210,50,200) ;

Imagel->Canvas->RoundRect(460,10,560,210,100,200);

рис. 4.5
изображения, полученные методом roundrect

SaveToClipboardFormat______________ _ _ _______________________

Создает копию изображения в формате Clipboard.

Класс TGraphic

Объявление

Virtual void_______ fastcall SaveToClipboardFormat (

Word &AFormat, int SAData,

Hpalette SAPaiette) = 0;

Описание

Метод SaveToClipboardFormat Создает копию изображения в формате Clip­board. Формат, указатель на данные и палитру возвращаются как параметры AFormat, AData И APalette. Стандартно зарегистрированные форматы: CF_BIT — МАР Для битовых карт и CF_METAFILEPICT Для метафайлов. Формат для нового типа графического объекта предварительно должен быть зарегистрирован методом RegisterClipboardFormat. У

После применения метода SaveToClipboardFormat Надо передать объекту Clip­board Полученные значения AFormat И AData Методом SetAsHandle. При этом надо не забыть включить в модуль ссылку на модуль Clipbrd.

Впрочем, записать изображение в Clipboard можно и проще, воспользовав­шись методом Assign объекта Clipboard Для объектов типов TGraphic. TBitMap. TIcon. TMetaFile.

Примеры

Tinclude <vd∖ciipbrd. hpp>

Word MyFormat;

THandle AData;

Hpalette APalette;

Imagel->Picture->Bitmap->SaveToClipboardFormat(

MyFormat, AData, APalette)

Clipboard()->SetAsHandle(MyFormat, AData) ;

Приведенные операторы записывают в буфер обмена изображение, хранящее­ся в свойстве Pieture->Bitmap компонента Imagel, Вместе с палитрой и регистри­руют формат MyFormat. В дальнейшем его можно использовать для чтения изо­бражения из буфера:

If (Clipboard()->HasFormat(MyFormat))

{

Try

{

Image2->Piсture->Bitmap->LoadFrOmClipboardFormat(

CF_BITMAP, Clipboard()->GetAsHandle(MyFormat), O);

Catch (…)

ShowMessage (’’Загрузка изображения невозможна");

Else

ShowMessage("B буфере не изображение по формату MyFormat");

Впрочем, записать изображение в буфер обмена можно и не используя метод SaveToClipboardFormat, Например, оператором:

Clipboard()->Assign(Imagel->Picture->Bitmap);

ИЛИ

Clipboard()->Assign(Imagel->Picture->Graphic)

SaveToFile — метод TGraphic______________________________________

Сохраняет графическое изображение в файле.

Класс TGraphic Объявление

Virtual void_ fastcall SaveToFile(const AnsiString Filename);

Описание

Метод SaveToFile Сохраняет изображение графического объекта в файле FileName.

SaveToFile — метод TcustomClientDataSet_____________________________________

См. разд. и другие методы загрузки и сохранения данных клас­

Са TcustomClientDataSeto.

Класс TGraphic

Объявление

Virtual void fastcall SaveToStream(Classes::TS⅛ream* Stream) = 0;

Описание

Метод SaveToStream Сохраняет в потоке Stream Изображение графического объекта. Используется, например, для сохранения в объекте TBlobStream графи­Ческого поля из набора данных,

SaveToStream — метод TCustomClientDataSet______________________

См. разд. «LoadFromFile и другие методы загрузки и сохранения данных клас­Са TCustomClientDataSet».

ScaleBy________________________________________________________

Масштабирует оконный элемент и все содержащиеся в нем компоненты.

Класс TWinControL

Объявление

Void_ fastcall ScaleBy (int М, int D) ;

Описание

Метод ScaleBy Масштабирует оконный элемент и все содержащиеся в нем ком­поненты. Масштабируются такие свойства компонента, как Width И Height, опре­деляющие его размер. Свойства Тор И Left Остаются неизменными. Масштабирует­ся также размер шрифта, если только в компоненте не установлено ParentFont = true. В последнем случае шрифт наследуется от родительского компонента и по­этому не изменяется.

Если компонент является контейнером, содержащим другие компоненты, то эти дочерние компоненты также масштабируются. Причем у них изменяются не только Width И HeighT. но также пропорционально изменяются Тор И Left, опре­деляющие их местоположение. Если во всех дочерних компонентах установлено ParentFont = true, А в компоненте-контейнере ParentFont = false, То пропорцио­нально изменяются и шрифты всех компонентов (но, конечно, не непрерывно, а скачками, доступными тому или иному типу шрифта).

Параметры M and D определяют соответственно множитель и делитель мас­штаба. Например, чтобы уменьшить размеры на 10% начального значения, можно задать М равным 9, a D равным 10 (9/10). Если же вы хотите увеличить размер на 1/3, то можно задать М=133 и D=IOO (133/100) или М=4 и D=3 (4/3).

Примеры

1. Оператор

Editl->ScaleBy(11,10) ;

Масштабирует окно редактирования Editl. В любом случае при выполнении этого оператора увеличивается на 10% длина окна (свойство Width), Что обес­печивает возможность наблюдать и редактировать в нем более длинный текст. Высота окна (свойство Height) Будет изменяться пропорционально, если свой­ство компонента Auto Size равно False. В противном случае высота определяет­ся только размером шрифта и при постоянном шрифте будет неизменной. А размер шрифта будет меняться, только если свойство компонента Parent- Font Равно False, Т. к. иначе шрифт определяется родительским компонентом.

2. Приведенный ниже обработчик события ONKcVUp окна редактирования Editl Дает пользователю возможность менять длину окна. При нажатии комбина­ций клавиш Alt-U и M-D пользователь увеличивает или уменьшает длину окна.

Void_ f astcall TForml::EditlKeyUp(TObject *Sender,

WORD SKey, TShiftState Shift)

{

If UKey == ,U’) && Shift-Contains(SsAlt))

Editl->ScaleBy(11,10);

Else if ((Key === ‘D’) && Shift-Contains(SsAlt))

Editl->ScaleBy(10,11) ;

}

Когда Editl находится в фокусе, при нажатии пользователем клавиши Alt и клавиши U (в любом регистре и независимо от переключения на латинский или русский язык) длина окна редактирования увеличится на 10%, а при на­жатии Alt и D соответственно уменьшится.

ScaleControls____________________________________________________

Масштабирует дочерние компоненты оконного элемента, не изменяя масшта­ба самого элемента.

Класс TWinControL

Объявление

Void_ F astcall ScaleControls(int M, int D);

Описание

Метод ScaleControls Масштабирует все компоненты, содержащиеся в оконном элементе, не изменяя масштаба самого элемента. Метод ScaleControls Вызывает метод ChangeScale Для каждого дочернего компонента. Отличается от метода ScaleBv Только тем, что не изменяет масштаба самого элемента.

Параметры M and D определяют соответственно множитель и делитель мас­штаба. Например, чтобы уменьшить размеры на 10% начального значения, можно задать М равным 9, a D равным 10 (9/10). Если же вы хотите увеличить размер на 1/3, то можно задать М=133 и D=100 (133/100) или М=4 и D=3 (4/3).

Подробности см. в разделах ChangeScale И ScaleBy.

ScreenToClient__________________________________________________

Преобразует координаты экрана в координаты клиентской области компонента.

Класс TControL

Объявление

Struct TPoint // Полное определение см. В гл. 6

{

Int х; int у;

};

Windows: -.TPoint________ fastcall ScreenToClient(

Const Windows::TPoint 4Point);

Описание

Метод ScreenToClient Преобразует координаты точки в системе координат эк­рана (начало координат — левый верхний угол экрана) в систему координат кли­ентской области компонента (начало координат — левый верхний угол клиентской области).

Совместно с обратной функцией ClientToScreen метод может использоваться для пересчета координат точки экрана из системы координат клиентской области одного компонента в систему координат клиентской области другого компонента.

Пример

Р. = Comp2->ScreenToClient (Compl-XlientToScreen (P) ) ;

Оператор пересчитывает координату точки Р из системы координат компонен­Та Compl В систему координат компонента Сотр2.

ScrollBy_________________________________________________________________

Сдвигает содержимое оконного элемента.

Класс TWinConTrol

Объявление

Void____ fastcall ScrollBy(int DeltaX, int DeltaY);

Описание

Метод ScrollBy Сдвигает содержимое оконного элемента, включая все его до­черние компоненты. Метод применим ко всем оконным элементам, но чаще всего используется для наследников класса TscrollingWinControl.

Параметры DeltaX и DeltaY Определяют величину сдвига по горизонтали и вертикали соответственно. Положительные значения параметров задают сдвиг вправо и вниз, отрицательные значения — влево и вверх.

Пример

Оператор

ScrollBy(1,1);

Сдвигает все компоненты на форме на один пиксел вправо и на один вниз.

SelectFirst_______________________________________________________________

Передает фокус дочернему компоненту, первому в последовательности табуля­ции.

Класс .TWinControl

Объявление

Void____ fastcall SelectFirst(Void);

Описание

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

Пример

Оператор

SelectFirst() ;

Активизирует первый в последовательности табуляции компонент на форме.

SelectNext_______________________________________________________________

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

Класс TWinControl Объявление

Void__ fastcall SelectNext CrWinControl* CurControl,

Bool GoForward, bool CheckTabStop);

Описание

Метод SelectNext Передает фокус дочернему компоненту, следующему в по­следовательности табуляции за тем, который указан параметром CurControl. Па­Раметр GoForward определяет направление поиска: при значении True Поиск ве­дется вперед, при значении False — назад.

Параметр CheckTabStop Указывает, должен ли искомый компонент иметь свойство TabStop. Равным true. Если значение CheckTabStop Равно true, очередной компонент должен иметь значение TabStop. равное true, или поиск прекращается.

Если метод SelectNext не смог найти компонент в соответствии с заданными значениями GoForward И CheckTabStop, То фокус остается на компоненте Cur — Control.

SendCancelMode_________________________________________________

Прерывает модальное состояние элемента управления.

Класс TControl

Объявление

Void___ fastcall SendCancelMode(TControl* Sender);

Описание

Вызов метода SendCancelMode Прерывает модальное состояние элемента управ­ления. Ряд элементов, реализованных в библиотеке визуальных компонентов C++Buil der, поддерживают модальное состояние, при котором пользователь должен ответить элементу прежде, чем он сможет общаться с другими объектами формы. Метод SendCancelMode Позволяет завершить модальное состояние без каких-либо Действий со стороны пользователя.

SendToBack_____________________________________________________

Переносит компонент ниже других компонентов в Z-последовательности.

Класс TControl

Объявление

Void___ fastcall SendToBack(Void);

Описание

Метод SendToBack позволяет изменять последовательность перекрытия ком­понентов на форме и тем самым управлять видимостью компонентов.

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

Если переносимый вниз компонент имел фокус, то он его потеряет при переносе.

Это справедливо по отношению к неоконным объектам, таким, как кнопки, метки, изображения и т. д., а также и к оконным компонентам, таким, как Memo, ComboBox И др. Но все неоконные компоненты всегда расположены в Z-последова­тельности ниже оконных и метод SendToBack Не может изменить это правило. На­пример, попытка перенести вниз методом SendToBack Оконный компонент, под которым размещена метка, ни к чему не приведет.

Примеры

В разделе, посвященном методу Brin^ToFroNt, также изменяющему последо­вательность компонентов, приведен ряд примеров. Во всех них вместо метода BringToFront, Применяемому к нижнему компоненту, можно применять метод SendToBack, Но к верхнему компоненту.

SetBounds______________________________________________________

Устанавливает одновременно свойства Left. Top. Width И Height.

Класс TControL

Объявление

Virtual void_______ fastcall SetBoundsfint ALeft, int ATop,

Int AWidth, int AHeight) ;

Описание

Метод SetBounds Изменяет одновременно все свойства компонента, опреде­ляющие его границу. Тот же эффект может быть достигнут совокупностью опера­торов изменения Left. Top. Width и Height. To, что метод SetBounds Одновремен­но задает эти значения, не только позволяет получить более компактный код, но и дает возможность избежать перерисовки компонента после изменения каждого параметра в отдельности.

Значения Left. Top. Width И Height Задаются при вызове SetBounds Как соот­ветственно параметры ALeft, ATop, AWidth И AHeight.

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

Visible И BringToFront.

SetChil dOrder__________________________________________________

Изменяет позицию компонента в списке дочерних компонентов оконного эле­мента.

Класс TWinControL

Объявление

DYNAMIC void_ fastcall SetChildOrder(

Classes::TComponent* Child, int Order);

Описание

Метод SetChildOrder Изменяет положение компонента, заданного параметром Child, В списке дочерних компонентов оконного элемента. Этот список — свойство Controls Оконного элемента.

Параметр Order Определяет индекс, присваиваемый компоненту Child (помни­те, что индексы начинаются с 0). Последовательность индексов остальных компо­нентов остается неизменной, но сами значения индексов «смыкаются», заполняя прежний индекс изменяемого компонента, и «раздвигаются» освобождая место для его нового индекса.

Пример

Если, например, компонент Edit2 Был в списке Controls Вторым (т. е. имел ин­декс 1), то после выполнения оператора

SetChildOrder(Edit2,3);

Элемент с индексом 0 сохранит свой индекс, элементы с индексами 2 и 3 изменят индексы на 1 и 2, компонент Edit2 Будет иметь индекс 3, а индексы остальных эле­ментов не изменятся.

Описание

Метод SetData Присваивает полю неформатированные данные, приводя, или не приводя их к формату типа данного поля. Это метод неявно используют многие другие методы, присваивающие значения полю.

Параметр Buffer Указывает на буфер, который содержит вводимые данные. Параметр NativeFormat указывает, должны ли данные переноситься без формати­рования (при значении true), или они предварительно должны приводиться к фор­Мату поля.

SetFields_________________________________________________________________

Устанавливает значения всех полей записи.

Класс TDataSet

Объявление

Void____ fastcall SetFields(const System::TVarRec * Values,

Const int Values_Size);

Описание

Метод SetFields Устанавливает значения всех полей активной записи. Массив Values Содержит расположенные в последовательности полей записи вносимые значения. Они могут быть строковыми константами, переменными, значениями NULL ` ULL. Величина NULL Соответствует очистке значения поля. Величи­

На NULL Означает, что сохраняется прежнее значение поля. Если количество пере­даваемых в запись значений меньше числа полей, то всем остальным полям записи присваивается значение NULL.

Перед вызовом SetFields Состояние State Набора данных надо перевести в ре­жим DsEdit Методом Edit. А после вызова SetFields Занести отредактированную за­пись в базу данных можно методом Post.

Пример

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

Tablel->SetFields (Arrayofconst ((

Null, Edit2->Text, Edit3->Text)));

Tablel->Post();

SetFocus________________________________________________________

Передает фокус элементу.

Класс TWinControL Объявление

Virtual void_______ fastcall SetFocus (void) ;

Описание

Метод SetFocus Передает фокус данному компоненту, активизирует его.

Пример

Оператор

Editl->SetFocus(); передает фокус компоненту Editl.

SetKey, EditKey, GotoKey, GotoNearest_____________________________

Обеспечивают поиск записей по ключу в состоянии набора DsSetKey.

Класс T7CusfOfnCZtentDafaSef, TTabLe

Объявления

void fastcall
void fastcall
bcol fastcall void fastcall
setkey(void) ; editkey(void) ; gotokey(void); gotonearest(void)

Описание

Методы SetKey, EditKey, GotoKey, GotoNearest Обеспечивают один из альтер­нативных (см. также FindKey. Lookup и Locate) Способов поиска записи по ключу.

Перед началом поиска таблица должна быть индексирована по тем полям, ко­торые будут ключевыми для поиска. Начинается поиск с метода SetKey Или EditKey. Оба метода переводят набор данных (его свойство State) в состояние DsSetKey. Различие между методами SetKey и EditKey Заключается только в том, что метод EditKey Сохраняет буфер ранее установленного ключа. Так что этот ме­тод целесообразно применять в случаях, когда задано много ключей, а вы хотите изменить только немногие из них. Определить текущие ключи можно с помощью свойства IndexFields.

Следующие за операторами SetKey Или EditKey Операторы присваивания зна­чений полям с помощью метода FieldByName Задают значения ключей поиска (см. пример).

После задания ключей можно применить метод GotoKey. Если найдена за­пись, в которой ключевые поля точно совпадают с заданными значениями ключей, то курсор переместится на эту запись, a GotoKey Вернет true. Если же такая за­пись не найдена, то курсор останется на месте, a GotoKey Вернет False.

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

Примеры

Пусть в вашем приложении имеется набор данных Tablel, Содержащий спи­сок сотрудников, в котором поле Fam Содержит фамилию сотрудника, а поле Dep — наименование отдела, в котором он работает. Приложение имеет также окно редактирования EFam, В котором пользователь вводит символы фамилии. Требуется осуществить ускоренный поиск записи по мере ввода пользователем фа­милии искомого сотрудника.

При использовании методов SetKey И GotoNearest Достаточно в обработчик события OnChange Окна EFam Вставить операторы

Tablel-XtndexFieldNames = "Fam";

Tablel->SetKeyО;

Tablel-J-FieldByName(nFamll)-J-AsString = EFam->Text;

Tablel->GotoNearest() ;

Первый оператор индексирует набор данных по полю Fam. Без такой индекса­ции метод SetKey Не сработает. Метод GotoNearest Обеспечивает переход на за­пись с фамилией, наиболее похожей на введенную в EFam (совпадающую по пер­вым символам).

Рассмотренную задачу можно также решить методами Locate И совместным применением методов FindKey и FindNearest (см. примеры в описаниях этих ме­тодов).

SetZOrder______________________________________________________

Перемещает компонент на вершину или в низ Z-последовательности.

Класс TWinConiroL

Объявление

DYNAMIC void______ fastcall SetZOrder(bool TopMost);

Описание

Метод SetZOrder Перемещает компонент на вершину или в низ Z-последова­тельности родительского элемента. Если родительского элемента нет, то элемент становится верхним или нижним окном экрана. Таким образом, этот метод пере­страивает перекрывающиеся компоненты или окна.

Если параметр TopMost Равен True, То элемент перемещается на вершину; в противном случае он перемещается вниз.

При этом надо иметь в виду, что оконные элементы всегда расположены в Z-последовательности выше неоконных. Так что при выполнении этого метода Перемещения происходят только в этих допустимых пределах.

Show____________________________________________________________________

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

Класс TControl Объявление

Void______ fastcall Show (void) ;

Описание

Метод Show Делает видимым ранее невидимый компонент. Он задает значение True Свойству Visible И проверяет, является ли видимым родительский компонент.

Примеры использования видимых и невидимых компонентов см. в разделе «Visible».

StretchDraw____________________________________________________

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

Класс TCanvaS

Объявление

Void__ fastcall StretchDrawfconst WindowsTRect &Rect,

TGraphic* Graphic);

Описание

Метод StretchDraw Рисует на канве изображение, содержащееся в объекте, указанном параметром Graphic, В прямоугольную область, указанную параметром Rect. При этом размер изображения подгоняется под размер заданной области. Этим метод StretchDraw Отличается от метода Draw, Который оставляет размер неизменным.

Объект Graphic Может быть типа битовой матрицы, пиктограммы или мета­файла. Если объект — битовая матрица типа TBitMap. То при переносе изображе­ния учитывается режим копирования, установленный свойством канвы Copy­Mode.

Пример

Оператор

Imagel-J-Canvas-J-StretchDraw (Rect (10, 10,110,110) , Bitmapl) ;

Рисует на канве компонента Imagel Изображение из компонента Bitmapl в об­ласть с координатами углов (10, 10) и (110, 110). При этом размер изображения Подгоняется под заданный размер области — квадрат со стороной 100.

TextExtent______________________________________________________

Возвращает длину и высоту в пикселах текста, который предполагается напи­сать на канве текущим шрифтом.

Класс TCanpas Объявление Struct TSize (

LONG ex;

LONG су;

);

TSize______ fastcall TextExtent (const AnsiStrinq Text);

Описание

Функция TextExtent Возвращает структуру типа TSize, содержащую длину и высоту в пикселах текста Text, Который предполагается написать на канве (см. Canvas) текущим шрифтом. Это позволяет перед выводом текста на канву опреде­лить размер надписи и расположить ее и другие элементы изображения наилуч­шим образом.

Только высоту или только длину текста можно определять соответственно ме­тодами TextHeight И Text Width.

Пример

V String st = Editl->Text;

Canvas->TextOut ( (ClientWidth — Canvas->TextExtent(st).ex) / 2, Canvas->TextExtent(st).cy, st)

Эти операторы выводят текст, набранный пользователем в окне редактирова­ния Editl, В канву компонента Imagel, Выравнивая его при любом шрифте по се­Редине ширины канвы и отступив одну строчку сверху.

TextHeight______________________________________________________

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

Класс TCanvas Объявление

Int____ fastcall TextHeight (const AnsiString Text);

Описание

Функция TextHeight Возвращает высоту в пикселах текста Text, Который предполагается написать на канве Canvas Текущим шрифтом. Это позволяет перед выводом текста на канву определить размер надписи и расположить ее и другие элементы изображения наилучшим образом.

Имеется еще метод TextExtent. Возвращающий одновременно и высоту, и дли­ну текста. Метод TextHeight Возвращает то же, что TextExtent(Text)-Cy.

Примеры

String st = Editl->Text;

Imagel->Canvas->TextOut((Imagel->ClientWidtħ —

Imagel->Canvas->TextWidth (st)) / 2, Imagel->Canvas->TextHeight(st) , st) ;

Эти операторы выводят текст, набранный пользователем в окне редактирова­ния Editl, в канву компонента Imagel, Выравнивая его при любом шрифте по се­редине ширины канвы и отступив одну строчку сверху.

См. также пример в описании метода TextRect.

TextOut________________________________________________________

Пишет указанную строку текста на канве, начиная с указанной позиции.

Класс TCanvas

Объявление

Void____ fastcall TextOut (int X, int Y, const AnsiString Text) ;

Описание

Функция TextOut Пишет строку текста Text На канве (см. Canvas), начиная с по­зиции с координатами (X, Y). Надпись делается в соответствии с текущими установ­ками шрифта Font. Фон надписи определяется установками текущей кисти Brush. Текущая позиция PenPos Пера Реп перемещается к концу выведенного текста.

Для выравнивания позиции текста на канве можно использовать методы, даю­щие перед выводом высоту и длину текста в пикселах: методы TextExtent. TextHeight И TextWidth.

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

Пример

Оператор

Imagel->Canvas->TextOut(10,10,s);

Выводит текст, хранящийся в строковой переменной s, на канву компонента Ima — gel, начиная с позиции (10, 10).

См. также примеры в описаниях методов TextExtent. TextHeight. Text Width И TextRect.

TextRect_______________________________________________________

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

Класс TCanvas

Объявление

Void fastcall TextRect(const Windows::TRect &Rect,

Int X, int Y, const AnsiString Text) ;

Описание

Функция TextRect Пишет строку текста Text На канве (см. CanvasK Начиная с позиции с координатами (X, Y) — это левый верхний угол надписи. Часть текста, не помещающаяся в прямоугольную область Rect, Усекается. Надпись делается в соответствии с текущими установками шрифта Font. Пространство внутри облас­ти Rect Закрашивается текущей кистью Brush.

Для выравнивания позиции текста внутри области на канве можно использо­вать методы, дающие перед выводом высоту и длину текста в пикселах: методы TextExtent. TextHeight И TextWidth.

Примеры

1. int

String st = Editl-SText;

Xl = 100;

Yl = 100;

X2 = 200;

Y2 = 150;

Imagel-Scanvas-SBrush-SColor = clRed;

Imagel->Canvas->TextRect (Rect (XI, Yl, X2, Y2),

Xl+(X2-Xl-Imagel->Canvas-sTextWidth(st)) / 2,

Yl+(Y2-Yl-Imagel-SCanvas-sTextHeight(St)) / 2, st)

Приведенный код рисует в заданном месте канвы компонента Imagel Красный прямоугольник и внутри него в центре пишет методом TextRect Текст, введенный пользователем в окно редактирования Editl. Если текст оказывается длиннее ши­рины прямоугольника, то он усекается. В данном примере будет видна только се­редина текста, так как текст выровнен по центру.

2. Если в приведенном примере заменить оператор на

ImageI-SCanvas-STextRect(Rect(Xl-5,Yl-5,

Xl+Imagel->Canvas->TextWidth(st)+5, YltImagel-SCanvas-STextHeight(st)+5),

XI, Yl, st) ;

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

TextOut(XI, Yl, st); использующего метод TextOut.

TextWidth______________________________________________________

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

Канве текущим шрифтом.

Класс TCanvas

Объявление

Int___ fastcall TextWidthfconst AnsiString Text);

Описание

Функция TextWidth Возвращает длину в пикселах текста Text, Который пред­полагается написать на канве (см. Canvas) Текущим шрифтом. Это позволяет пе­ред выводом текста на канву определить размер надписи и расположить его и дру­гие элементы изображения наилучшим образом.

Имеется еще метод TextExtent. Возвращающий одновременно и высоту, и дли­на текста. Метод TextWidth Возвращает то же, что TextExtent(Text).cx.

Примеры

String st = Editl-SText;

Imagel-SCanvas-STextOutf(Imagel-SClientWidth —

Imagel-SCanvas-STextWidth(St)) / 2, Imagel-SCanvas-STextHeight(st) , st) ;

Эти операторы выводят текст, набранный пользователем в окне редактирова­ния Editl, В канву компонента Imagel, Выравнивая его при любом шрифте по се­редине ширины канвы и отступив одну строчку сверху.

См. также пример в описании метода TextRect.

Translate_____________________________ __________ ____________

Взаимно преобразует строку символов ANSI (используются в C++Builder и Windows) и строку символов OEM (используются в BDE).

Классы TDataSet и TBDEDataSeT

Объявление

Virtual void_______ fastcall Translatelchar * Src,

Char * Dest, bool ToOem) ;

Описание

Метод Translate Копирует строку Src В строку Dest, Преобразуя при этом сим­волы ANSI (используются в C++Builder и Windows) в символы OEM (используются в BDE), или наоборот. Если ToOem = true, То символы ANSI преобразуются в OEM. Если ToOem = false, То символы OEM преобразуются в ANSI.

TryLoc k________________________________________________________________

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

Класс TCanvas

Объявление

Bool____ fastcall TryLock(Void);

Описание

Функция TryLock Блокирует данную канву, не разрешая другим нитям много­поточного приложения рисовать на ней. Канва остается блокированной до снятия блокады вызовом метода Unlock.

Если канва не была блокирована, то функция TryLock Устанавливает свойство LockCount В 1 и возвращает True. Если канва уже была блокирована, то функция TryLock Возвращает False, Не увеличивая LockCount. В этом ее отличие от метода Lock, Который допускает многократное вложенное блокирование.

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

UndoLastChange_________________________________________________

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

См. разд. «Cancel и другие методы отмены исправлений в наборах данных».

Unlock______________________________________________________________________________

Уменьшает на единицу значение свойства LockCount, Способствуя тем самым разблокированию канвы, когда LockCount Станет равным 0.

Класс TCanvas

Объявление

Void____ fastcall Unlock (void) ;

Описание

Метод Unlock Уменьшает на единицу значение свойства LockCount, Способст­вуя тем самым разблокированию канвы, заблокированной ранее методами Lock Или TrvLock. Блокировка канвы не разрешает другим нитям многопоточного при­ложения рисовать на ней. Канва остается блокированной до тех пор, пока свойство

LockCount Не станет равным 0. А единственный способ уменьшения LockCount — вызов метода Unlock.

Если канва была заблокирована однократно, то вызов Unlock Немедленно раз­блокирует ее. Если же были вложенные вызовы Lock, То канва будет разблокиро­Вана после стольких вызовов Unlock, Сколько раз ранее вызывался Lock.

Update — метод TFieldDefs____________________________________________________________

Обновляет описания в массиве Items, Чтобы они отражали реальные свойства полей.

Класс TFiEldDefs

Объявление

HIDESBASE void fastcall Update(void;;

Описание

Метод Update Обновляет описания полей в массиве Items, чтобы они отражали реальные свойства полей, если они были изменены в наборе данных. Обновление происходит без открытия набора данных. Перед обновлением полезно проверить Свойство Updated.

Update — метод TWinControl_______________________________________________

Немедленно перерисовывает компонент.

Класс TWinControI

Объявление

Virtual void__ fastcall Update (void);

Описание

Метод Update Вызывает немедленную перерисовку компонента, не ожидая за­вершения каких-то других процессов или прихода от Windows сообщений о пере­Рисовке. Этим, в основном, этот метод и отличается от Repaint.

UpdateStatus____________________________________________________

Определяет статус обновления текущей записи.

Класс TDataSet

Объявление

Enum TUpdateStatus ( UsUninoclified, UsModified,

UsInserted, UsDeleted ) ;

Virtual TUpdateStatus_ fastcaljl UpdateStatus(void);

Описание

Функция UpdateStatus Позволяет определить в случае кэширования, была ли изменена текущая запись, и если была, то как именно. Возможные возвращаемые значения:

UsUnmodified

Запись не изменена

■——————- 1

______________ I

UsModified

Запись

Модифицирована

Uslnserted

Запись

Была вставлена

, UsDeleted

Запись

Была удалена

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

Глава 5

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *