1) Существует способ присваивания всех свойств одного элемента управления (объекта) другому?
С определенными объектами, которые, обычно, являются обертками элементов управления Windows типа TFont и TBitmap, с помощью метода Assign, копирующего "внутренности" объекта. Вы можете сделать Font1.Assign( Font2 ). Тем не менее, такое возможно не со всеми объектами.
Возможно копирование объекта с помощью потока. Вам нужно записать это в поток, и затем прочесть это оттуда. Но это как раз плавно перетекает в ваш следующий вопрос...
2) Как мне сохранить объект a) в записи в файле данных Paradox и б) в файле на диске?
Для записи на диск используйте поток. Объект должен быть компонентом и его можно записать на диск следующим образом:
var Stream : TFileStream ;
begin
Stream := TFileStream.Create( 'AFile', fmCreate ) ;
try
Stream.WriteComponent( Button1 ) ;
Stream.WriteComponent( Grid1 ) ; и т.д.
finally Stream.Free ; end ; end ; |
Для чтения объекта необходимо следующее:
var Stream : TFileStream ; Button2 : TButton ; Grid2 : TStringGrid ; begin Stream := TFileStream.Create( 'AFile', fmOpenRead ) ; try Button2 := Stream.ReadComponent( nil ) as TButton ; Grid2 := Stream.ReadComponent( nil ) as TStringGrid ; и т.д. finally Stream.Free ; end ; end ; |
В каком-то месте вам необходимо зарегистрировать классы, которые вы хотите писать и читать. Например, вы могли бы создать следующий обработчик события формы OnCreate:
RegisterClass( TButton ) ; RegisterClass( TStringGrid ) ; |
Если классы не зарегистрированы, то при попытке чтения объекта вы получите ошибку 'Class not found' (класс не найден).
Mike Scott.
Дополнение: если вы не хотите работать с чтением/записью в файл, то другой вариант работы с объектом - использование потока памяти (TMemoryStream). -- Xavier [000606]