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

Вот:

Код:
unit Unit2;

interface

uses
  Windows, SysUtils, Classes, Contnrs;

type
  TUpdateInfo = class
  private
    FName : String;
    FUpd : Boolean;
  public
    constructor Create;
    destructor Destroy; override;

    procedure SaveToStream(AStream : TStream);
    procedure LoadFromStream(AStream : TStream);

    property Name : String read FName write FName;
    property Upd : Boolean read FUpd write FUpd;
  end;

  TUpdateInfoList = class
  private
    FItems : TObjectList;
    function GetCount: Integer;
    function GetItem(Index: Integer): TUpdateInfo;
  public
    constructor Create;
    destructor Destroy; override;

    procedure SaveToStream(AStream : TStream);
    procedure LoadFromStream(AStream : TStream);

    procedure SaveToFile(AFileName : String);
    procedure LoadFrommFile(AFileName : String);

    procedure AddItem(AItem : TUpdateInfo);
    procedure RemoveItem(AIndex : Integer);

    property Count : Integer read GetCount;
    property Items[Index : Integer] : TUpdateInfo read GetItem;
  end;

implementation

{ TUpdateInfo }

constructor TUpdateInfo.Create;
begin
  inherited;
  FName := '';
  FUpd := False;
end;

destructor TUpdateInfo.Destroy;
begin
  inherited;
end;

procedure TUpdateInfo.LoadFromStream(AStream: TStream);
var
  ALen : Integer;
begin
  AStream.ReadBuffer(ALen,SizeOf(Integer));
  SetLength(FName,ALen)
  If ALen > 0 Then
    AStream.ReadBuffer(FName[1],ALen);
  AStream.ReadBuffer(FUpd,SizeOf(Boolean));
end;

procedure TUpdateInfo.SaveToStream(AStream: TStream);
var
  ALen : Integer;
begin
  ALen := Length(FName);
  AStream.WriteBuffer(ALen,SizeOf(Integer));
  If ALen > 0 Then
    AStream.WriteBuffer(FName[1],ALen);
  AStream.WriteBuffer(FUpd,SizeOf(Boolean));
end;

{ TUpdateInfoList }

procedure TUpdateInfoList.AddItem(AItem: TUpdateInfo);
begin
  FItems.Add(AItem);
end;

constructor TUpdateInfoList.Create;
begin
  inherited;
  FItems := TObjectList.Create(True);
end;

destructor TUpdateInfoList.Destroy;
begin
  FItems.Free;
  inherited;
end;

function TUpdateInfoList.GetCount: Integer;
begin
  Result := FItems.Count;
end;

function TUpdateInfoList.GetItem(Index: Integer): TUpdateInfo;
begin
  Result := FItems[Index] As TUpdateInfo;
end;

procedure TUpdateInfoList.LoadFrommFile(AFileName: String);
var
  AStream : TFileStream;
begin
  AStream := TFileStream.Create(AFileName,fmOpenRead);
  Try
    LoadFromStream(AStream);
  Finally
    AStream.Free;
  End;
end;

procedure TUpdateInfoList.LoadFromStream(AStream: TStream);
var
  I : Integer;
  ACount : Integer;
  AItem : TUpdateInfo;
begin
  AStream.ReadBuffer(ACount,SizeOf(Integer));
  For I := 0 To ACount-1 Do
    Begin
      AItems := TUpdateInfo.Create;
      AItem.LoadFromStream(AStream);
      FItems.Add(AItem);
    End;
end;

procedure TUpdateInfoList.RemoveItem(AIndex: Integer);
begin
  FItems.Delete(AIndex);
end;

procedure TUpdateInfoList.SaveToFile(AFileName: String);
var
  AStream : TFileStream;
begin
  AStream := TFileStream.Create(AFileName,fmCreate);
  Try
    SaveToStream(AStream);
  Finally
    AStream.Free;
  End;
end;

procedure TUpdateInfoList.SaveToStream(AStream: TStream);
var
  I : Integer;
  ACount : Integer;
begin
  ACount := FItems.Count;
  AStream.WriteBuffer(ACount,SizeOf(Integer));
  For I := 0 To FItems.Count-1 Do
    (FItems[i] As TUpdateInfo).SaveToStream(AStream);
end;

end.

Если не понятно как пользоваться - напиши.
Ответить с цитированием