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

Вот класс для хранения всего этого добра в одном файле:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
unit Unit2;
 
interface
 
uses
  Classes, SysUtils;
 
type
  TModel = class
  private
    procedure Init;
  public
    PrjName : String;
    Results : Array[1..6,1..19] Of Integer;
    Sources : Array[1..14] Of Integer;
    Enabled_12_14 : Boolean;
 
    constructor Create;
    constructor Load(AStream : TStream); overload;
    constructor Load(AFileName : String); overload;
    destructor Destroy; override;
 
    procedure LoadFRomFile(AFileName : String);
    procedure SaveToFile(AFileName : String);
 
    procedure LoadFromStream(AStream : TStream);
    procedure SaveToStream(AStream : TStream);
  end;
 
implementation
 
procedure TModel.Init;
var
  I, J : Integer;
begin
  PrjName := '';
  For I := Low(Sources) To High(Sources) Do
    Sources[i] := 0;
  For I := Low(Results) To High(Results) Do
    For J := Low(Results[i]) To High(Results[i]) Do
      Results[I,J] := 0;
  Enabled_12_14 := False;
end;
 
constructor TModel.Create;
begin
  inherited;
  Init;
end;
 
constructor TModel.Load(AStream : TStream);
begin
  inherited Create;
  Init;
  LoadFromStream(AStream);
end;
 
constructor TModel.Load(AFileName : String);
begin
  inherited Create;
  Init;
  LoadFromFile(AFileName);
end;
 
destructor TModel.Destroy;
begin
  inherited;
end;
 
procedure TModel.LoadFRomFile(AFileName : String);
var
  AStream : TFileStream;
begin
  AStream := TFileStream.Create(AFileName, fmOpenRead);
  Try
    LoadFromStream(AStream);
  Finally
    AStream.Free;
  End;
end;
 
procedure TModel.SaveToFile(AFileName : String);
var
  AStream : TFileStream;
begin
  AStream := TFileStream.Create(AFileName, fmCreate);
  Try
    SaveToStream(AStream);
  Finally
    AStream.Free;
  End;
end;
 
procedure TModel.LoadFromStream(AStream : TStream);
var
  I, J : Integer;
begin
  // Read project name
  AStream.ReadBuffer(I,SizeOf(Integer));
  SetLength(PrjName,I);
  AStream.ReadBuffer(PrjName[1],I*SizeOf(Char));
 
  // Read source data
  For I := Low(Sources) To High(Sources) Do
    AStream.ReadBuffer(Sources[i],SizeOf(Integer));
  AStream.ReadBuffer(Enabled_12_14,SizeOf(Boolean));
 
  // Read results
  For I := Low(Results) To High(Results) Do
    For J := Low(Results[i]) To High(Results[i]) Do
      AStream.ReadBuffer(Results[I,J],SizeOf(Integer));
end;
 
procedure TModel.SaveToStream(AStream : TStream);
var
  I, J : Integer;
begin
  // Write project name
  I := Length(PrjName);
  AStream.WriteBuffer(I,SizeOf(Integer));
  AStream.WriteBuffer(PrjName[1],I*SizeOf(Char));
 
  // Write source data
  For I := Low(Sources) To High(Sources) Do
    AStream.WriteBuffer(Sources[i],SizeOf(Integer));
  AStream.WriteBuffer(Enabled_12_14,SizeOf(Boolean));
 
  // Write results
  For I := Low(Results) To High(Results) Do
    For J := Low(Results[i]) To High(Results[i]) Do
      AStream.WriteBuffer(Results[I,J],SizeOf(Integer));
end;
 
end.
Ты не сказал какой тип данных, соотв. я для простоты поставил Integer.

Аот пример использования из программы:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
uses Unit2;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  I : Integer;
begin
  With TModel.Create Do
    begin
      PrjName := 'Project1';
      For I := Low(Sources) To High(Sources) Do
        Sources[i] := Random(10);
      SaveToFile('c:\work\projects\prj1.dat');
      Free;
    end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  With TModel.Load('c:\work\projects\prj1.dat') Do
    begin
      ShowMessage(PrjName);
      Free;
    end;
end;

Код работы с компонентами сам напишешь.
Ответить с цитированием