Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

UpdateResource & StringToComponent

24K
20 июня 2008 года
Witaliy
27 / / 24.04.2008
У меня еще есть два вопроса по той теме:
1. Как правильно пользоваться функцией UpdateResource для удаления и изменения ресурсов.

2. Я имею функцию превращения компонентов формы в RCData код и наоборот

Код:
function ComponentToString(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 StringToComponent(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;


ComponentTostring работает нормально, а StringToComponent выдает ошибку, что класса заданного в коде не существует

Что делать?
261
22 июня 2008 года
ahilles
1.5K / / 03.11.2005
1. Для изменения просто поставь указатель на новые данные. для удаления поставь нулевой указатель
2. компонент какого именно класса ты сохранил?
24K
24 июня 2008 года
Witaliy
27 / / 24.04.2008
1. Можно в примере. Ничего не понимаю
2. Целую форму с компонентами
261
24 июня 2008 года
ahilles
1.5K / / 03.11.2005
1.
UpdateResource(....,0,0); //ресурс будет удалён
а при изменении просто ставь указатель на данные, которые тебе надо сохранить в ресурсе. собственно, в чём тут может быть проблема?
2. методу ReadComponent, в данном случае, передвавай указатель на уже созданный компонент, и метод в свою очередь просто заполнит его свойства дынными, которые сохраненты в TStream.
24K
24 июня 2008 года
Witaliy
27 / / 24.04.2008
2. Делаю так :
button2.assign(stringToComponent(memo1.Text));
текст мемо такой :
object Button2: TButton
Left = 496
Top = 128
Width = 75
Height = 25
Caption = 'Button2'
TabOrder = 2
end
Та же ошибка.
261
25 июня 2008 года
ahilles
1.5K / / 03.11.2005
Цитата: Witaliy
2. Делаю так :
button2.assign(stringToComponent(memo1.Text));


тебе надо переписать функцию stringToComponent так чтобы она принимала ещё один параметр - указатель на компонент. А вызывать ReadComponent тебе надо указав этот компонент.

24K
25 июня 2008 года
Witaliy
27 / / 24.04.2008
А можети вы переписать функцию, который там должен быть новый параметр?
261
25 июня 2008 года
ahilles
1.5K / / 03.11.2005
Код:
procedure StringToComponent(aComponent:TComponent;Value: string);
var
  StrStream:TStringStream;
  BinStream: TMemoryStream;
begin
  StrStream := TStringStream.Create(Value);
  try
    BinStream := TMemoryStream.Create;
    try
      ObjectTextToBinary(StrStream, BinStream);
      BinStream.Seek(0, soFromBeginning);
      BinStream.ReadComponent(aComponent);

    finally
      BinStream.Free;
    end;
  finally
    StrStream.Free;
  end;
end;
24K
26 июня 2008 года
Witaliy
27 / / 24.04.2008
А можно сделать, чтобы к форме добавились компоненты, которые записаны в коде? Может можно загрузить всю форму?
261
26 июня 2008 года
ahilles
1.5K / / 03.11.2005
т.е. ты хочешь сохранить в строку одну форму, а загрузить эту строку в другую? нет, так не получится.
24K
27 июня 2008 года
Witaliy
27 / / 24.04.2008
А создавать новые компоненты из сроки можно?
261
27 июня 2008 года
ahilles
1.5K / / 03.11.2005
если захотеть, то можно. но я не хочу :)
24K
28 июня 2008 года
Witaliy
27 / / 24.04.2008
Тогда подскажи как мне сделать. Я хочу.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог