Показать сообщение отдельно
  #9  
Старый 06.03.2017, 20:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну а классы и дженерики тебе нафига даны.
Код:
interface 

type
  TMemDataType = (mdtJpeg, mdtHtml);

  TMemData = class
  private
    FDataType : TMemDataType;
    FData : TStream;
  public
    constructor Create(ADataType : TDataType; AData : TStream);
    property DataType : TDataType read FDataType;
    property Data : TStream read FData;
  end;

  // Если нужно что-то специфичное, то "рожаем" наследников
  TJpegMemData = class(TMemData)
  private
    FWidth : Integer;
    FHeight : Integer;
  public
    constructor Create(AData : TStream; AWidth, AHeight : Integer);
    property Width : Integer read FWidth;
    property Height : Integer read FHeight;
  end;

// А тут список для хранения всего этого счастья
var
  LoadedData : TObjectList<TMemData>;

implementation
  
constructor TMemData.Create(ADataType : TDataType; AData : TStream);
begin
  inherited;
  FDataType := ADataType;
  FData := AData;
end;

constructor TJpegMemData.Create(AData : TStream; AWidth, AHeight : Integer);
begin
  inherited Create(mdtJpeg,AData);
  FWidth := AWidth;
  FHeight := AHeight;
end;

// Создание и удаление глобального списка
initialization
  LoadedData := TObjectList<TMemData>.Create;

finallization
  FreeAndNil(LoadedData);

end.

Как то так.
Только не забыть при работе со списком обеспечить потокозащищенность.

ЗЫ. А вообще зачем хранить все в памяти, если потом идет обработка и удаление лишнего и сохранение только полезного. Может проще просто прямо в потоке проанализировать и не сохранять ничего лишнего?
Ответить с цитированием