982_____________________________________________Глава 15

щим типам объектов источника и назначения ведет к генерации исключения
EConvertError.

Метод Assign отличается по результатам от операции присваивания

<объект-назначение> = <объект-источник>;

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

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

Примеры

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

if (FontDialogl->Execute())

Font->Assign(FontDialogl->Font);

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

TStringList *SL1 = new TStringList;

TStringList *SL2 = new TStringList;

void_fastcall TFormI::RadioGrouplClick(TObject *Sender)
{

if(RadioGroupl->ItemIndex == 0)
ComboBoxl->Items->Assign(SL1) ;

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

ComboBoxl->ItemIndex = 0;

}

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

Clipboard()->Assign(Bitmap);

а прочитать из него изображение можно оператором

Bitmap->Assign(Clipboard()) ;

AssignTo____________________________________________

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