Я пытаюсь сохранить некоторые компоненты, которые были размещены в форме во время разработки (например, в файл или базу данных), когда они настроены правильно. Тогда я бы их убрал. Во время выполнения я хочу поместить компоненты обратно в форму в зависимости от ситуации. В моем случае я редактирую таблицы, поэтому мне нужна одна форма, которая будет адаптироваться к таблице, которую пользователь выбирает для редактирования. Мне не нужна одна форма для каждой таблицы.
Я использую эти примеры для Delphi документации
function TfmTableEdit.MComponentToString(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;
function TfmTableEdit.MStringToComponent(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result:= BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;
Итак, я использовал ее для компонента UniDBEdit5 для тестирования и получил это значение.
'объект UniDBEdit5: TUniDBEdit' # $ D # $ A 'Left = 288' # $ D # $ A 'Top = 376' # $ D # $ A 'Ширина = 121' # $ D # $ A ' Высота = 22 '# $ D # $ A' Подсказка = '' '' '# $ D # $ A' TabOrder = 5 '# $ D # $ A'end'
, поэтому я удалил компонент, чтобы увидеть, Я мог бы вернуть это. Я получаю фатальную ошибку, «контроль не может быть создан с нулевым владельцем», но это использование прямо из документации.
Моя цель - сохранить множество элементов управления в базе данных, и когда пользователь выбирает конкретную форму, во время выполнения соответствующие элементы управления будут загружены в форму в определенной конфигурации. Форма не будет знать заранее, какие элементы управления будут добавлены, но у меня должна быть эта информация в строке, поэтому, например, я мог бы заранее вызвать RegisterClass (TUniDBEdit).
Кто-нибудь правильно использует эти функции? Я посмотрел ... Спасибо! Дуг