5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233

Сохранить класс в файл

03.12.2015, 09:30. Показов 10082. Ответов 97
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сохранение и загрузку делаю так:
Delphi
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
TFisherMan = class// Класс Рыбак
    NameMan:string;//Имя
    SkillMen:Integer;//Опыт
      //В рюкзаке
      NajivkaMen:array of string;//Наживки
  end;
type
  MyFile = record
    FMyFile:TFisherMan;
  end;
//*************************************************************************
var
  FisherMan:TFisherMan;
  ManFile:file of MyFile; //файл типа записи Man
  ManDann: MyFile; {переменная типа записи ManDann для работы с файлом}
 
procedure SaveFisherMan();
var
  DirSave:string;
begin//Сохранить рыбака в Файл
  //DirSave:=Dir+'Save\'+FisherMan.NameMan+'.DAN';
  DirSave:=Dir+'Save\'+klyv.Combobox1.text+'.DAT';
  ManDann.FMyFile:=FisherMan;
  AssignFile(ManFile, DirSave);//связываем файловую переменную с файлом
  rewrite(ManFile); //открываем файл для записи
  write(ManFile, ManDann); //записать в файл созданный элемент Man
  ManDann.FMyFile:=nil;
  close(ManFile); //закрываем файл
end;
procedure LoadFisherMan();
var
  DirLoad:string;
  nN, nU:Integer;
begin //загрузить рыбака из файла
  DirLoad:=Dir+'Save\'+Klyv.ComboBox1.Text+'.DAT';
  //очистить рыбака
  FisherMan:=TFisherMan.Create;
  AssignFile(ManFile, DirLoad);//связываем файловую переменную с файлом
  Reset(ManFile);//открываем файл для чтения
  read(ManFile, ManDann);//считываем из файла очередной элемент в переменную ManDann
  FisherMan:=ManDann.FMyFile;
  close(ManFile); //закрываем файл
end;
Вроде сохраняет нормально, но файл *.DAT содержит «А<Z ».
Загружает тоже без ошибок, но переменная FisherMan пустая.
Что я делаю не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2015, 09:30
Ответы с готовыми решениями:

Сохранить файл в UTF8
Здравствуйте. Имеется функция сохранения файла: procedure TForm1.Button3Click(Sender: TObject); var t: TextFile; begin ...

Сохранить файл из memo
Как сохранить текст из поля Memo в файл, используя системный диалог SaveDialog

Открыть и сохранить файл
Здравствуйте. Есть программа в которой необходимо считать данные из файла .db, затем провести с ними расчеты и сохранить в этот же bd или в...

97
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
08.12.2015, 12:06  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от mss Посмотреть сообщение
В дыру такие учебники
Так посоветуйте нормальные
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
08.12.2015, 12:37
Из того чем загажен Рунет - ни в коем случае Фленов, на худой случай Архангельский

Из того что призвано сформировать фундаментальные знания - например, труды авторов Тейксейра&Пачеко, Конопка, Харвей, Фаронов, Григорьев
1
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
11.12.2015, 13:36  [ТС]
Вроде разобрался, организовал вот так:
Delphi
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
  TFisherMan = class(TComponent)//*Класс Рыбак
  protected
//    procedure DefineProperties(Filer: TFiler); override;
  private
    FNajivkaMen:TStringList;
    FNameMan:string;
    FSkillMen:Integer;
//    procedure ReadList(Reader: TReader);
//    procedure WriteList(Writer: TWriter);
  published
    property NameMan:string  read FNameMan write FNameMan;//Имя
    property SkillMen:Integer read FSkillMen write FSkillMen;//Опыт
      //В рюкзаке
      property NajivkaMen: TStringList read FNajivkaMen write FNajivkaMen;//Наживки
 
procedure LoadFromFile(Component: TComponent; const FileName: string);
var
  ms: TMemoryStream;
  fs: TFileStream;
begin
  fs := TFileStream.Create(FileName, fmOpenRead);
  ms := TMemoryStream.Create;
  try
    ObjectTextToBinary(fs, ms);
    ms.position := 0;
    ms.ReadComponent(Component);
  finally
    ms.Free;
    fs.free;
  end;
end;
 
procedure SaveToFile(Component: TComponent; const FileName: string);
var
  ms: TMemoryStream;
  fs: TFileStream;
begin
  fs := TFileStream.Create(FileName, fmCreate or fmOpenWrite);
  ms := TMemoryStream.Create;
  try
    ms.WriteComponent(Component);
    ms.position := 0;
    ObjectBinaryToText(ms, fs);
  finally
    ms.Free;
    fs.free;
  end;
end;
Правильно?

PS. Не понимаю зачем нужны были вот эти процедуры?
// procedure DefineProperties(Filer: TFiler); override;
// procedure ReadList(Reader: TReader);
// procedure WriteList(Writer: TWriter);
Может я что не так сделал, поправьте меня, но вроде все работает.

Всем большое спасибо за помощь
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.12.2015, 14:06
Цитата Сообщение от glyk5 Посмотреть сообщение
Вроде разобрался.. правильно ?
Загляни в содержимое текстового файла, сформированного процедурой SaveToFile - видишь там строки, присутствовавшие в стринглисте NajivkaMen на момент вызова процедуры SaveToFile ?
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
11.12.2015, 14:40  [ТС]
Содержимое текстового файла:
Delphi
1
2
3
4
5
6
7
8
object TFisherMan
  NajivkaMen.Strings = (
    #1063#1077#1088#1074#1100
    #1061#1083#1077#1073
    #1058#1077#1089#1090#1086)
  NameMan = #1071
  SkillMen = 100
end
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
11.12.2015, 14:49
да, оно)
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.12.2015, 15:06
Цитата Сообщение от glyk5 Посмотреть сообщение
Не понимаю зачем нужны были вот эти процедуры?
Затем что изначально у тебя фигурировал дин.массив, а не стринглист.
Будучи неопубликованым он попросту не сохранится, ибо нужно ли и как его сохранять и в последствии восстанавливать - это знаешь только ты.
А будучи опубликованым его сохранение приведет к записи в файл указателя, а не его содержимого, и при восстановлении из файла указателя грабли будут гарантированы.

Вобщем нифига ты не разобрался - просто развернул оглобли туда где дорожка поуже, но поровнее)
1
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
11.12.2015, 15:34  [ТС]
В данном случае большой разницы нет массив это или стринглист.
С массивом не получилось поэтому использовал стринглист.
Поставил себе задачу: в ближайшем будущем разобраться с массивом, (изучая приведенную вами литературу).

PS. Какой метод будет более эффективнее?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.12.2015, 15:46
Цитата Сообщение от glyk5 Посмотреть сообщение
Какой метод будет более эффективнее?
Метод чего, "разборок" ?)
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
11.12.2015, 15:54  [ТС]
Метод сохранение в файл с массивом(с которым у меня не получилось разобраться) или тот что получился с стриглистом.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.12.2015, 15:58
Цитата Сообщение от glyk5 Посмотреть сообщение
Метод сохранение в файл с массивом(с которым у меня не получилось разобраться)
Вот с этим методом и разберись - это "классика жанра".
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
18.12.2015, 13:24  [ТС]
Вроде разобрался, сохраняет, но не загружает
Delphi
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
//*************************************************************************
TFisherMan = class(TComponent)
  protected
    procedure DefineProperties(Filer: TFiler); override;
    function GetNajivkaMen(index: Integer): string;
    procedure SetNajivkaMen(index: Integer; const Value: string);
    procedure SetStrCount(Value: Integer);
    function GetStrCount: Integer;
  private
    FNajivkaMen:array of string;
    FNameMan:string;
    FSkillMen:Integer;
    procedure ReadList(Reader: TReader);
    procedure WriteList(Writer: TWriter);
  published
    property NameMan:string  read FNameMan write FNameMan;
    property SkillMen:Integer read FSkillMen write FSkillMen;
//      property NajivkaMen: FNajivkaMen read FNajivkaMen write FNajivkaMen;
  public
    property NajivkaMen[index:Integer]:string read GetNajivkaMen write SetNajivkaMen;
    property StrCount: Integer read GetStrCount write SetStrCount;
  end;
//*************************************************************************
 
var
  Form1: TForm1;
  FisherMan:TFisherMan;
 
implementation
 
{$R *.dfm}
 
procedure TFisherMan.SetStrCount(Value: Integer);
begin
  SetLength(FNajivkaMen, Value);
end;
 
function TFisherMan.GetStrCount: Integer;
begin
  Result:=Length(FNajivkaMen);
end;
 
function TFisherMan.GetNajivkaMen(index: Integer): string;
begin
 Result:= FNajivkaMen[Index];
end;
 
procedure TFisherMan.SetNajivkaMen(index: Integer; const Value: string);
begin
  FNajivkaMen[Index]:= Value;
end;
 
procedure TFisherMan.ReadList(Reader: TReader);
var
  i,j:Integer;
begin
  j:=Reader.ReadInteger;
  SetLength(FNajivkaMen, j);
  for i := 0 to Reader.ReadInteger do
    FNajivkaMen[i]:=Reader.ReadString;
end;
 
procedure TFisherMan.WriteList(Writer: TWriter);
var
  i:Integer;
begin
  Writer.WriteInteger(GetStrCount);
  for i:=0 to Length(FNajivkaMen)-1 do
    begin
     Writer.WriteString(FNajivkaMen[i]);
    end;
end;
 
procedure TFisherMan.DefineProperties(Filer: TFiler);
begin
 inherited;
 Filer.DefineProperty('NajivkaMen', ReadList, WriteList, true);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin //Çàïîëíèòü
FisherMan.NameMan:='ÿ';
FisherMan.SkillMen:=100;
FisherMan.NajivkaMen[0]:='0';
FisherMan.NajivkaMen[1]:='10';
FisherMan.NajivkaMen[2]:='20';
ShowMessage('Çàãðóæåíî');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  FisherMan:=TFisherMan.Create(nil);
  FisherMan.SetStrCount(3);
end;
 
procedure SaveToFile(RootObject: TComponent; const FileName: TFileName);
var
  FileStream: TFileStream;
  MemStream: TMemoryStream;
begin
  FileStream := TFileStream.Create(FileName, fmCreate);
  MemStream := TMemoryStream.Create;
  try
    MemStream.WriteComponent(RootObject);
    MemStream.Position := 0;
    ObjectBinaryToText(MemStream, FileStream);
  finally
    MemStream.Free;
    FileStream.Free;
  end;
end;
 
procedure LoadFromFile(RootObject: TComponent; const FileName: TFileName);
var
  FileStream: TFileStream;
  MemStream: TMemoryStream;
begin
  FileStream := TFileStream.Create(FileName, 0);
  MemStream := TMemoryStream.Create;
  try
    ObjectTextToBinary(FileStream, MemStream);
    MemStream.Position := 0;
    MemStream.ReadComponent(RootObject);
  finally
    MemStream.Free;
    FileStream.Free;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  s:string;
begin //Ñîõðàíèòü
  s:=ExtractFilePath(Application.ExeName)+'ÿ.dat';
  SaveToFile(FisherMan, s);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
  s:string;
begin //Çàãðóçèòü
  s:=ExtractFilePath(Application.ExeName)+'ÿ.dat';
  FisherMan:=TFisherMan.Create(nil);
  LoadFromFile(FisherMan, s);
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
Close;
end;
 
end.
Содержимое файла:
Delphi
1
2
3
4
5
6
object TFisherMan
  NameMan = #1103
  SkillMen = 100
  NajivkaMen = 3
  010 = '20'
end
ошибку выдает вот на этой строке:
ObjectTextToBinary(FileStream, MemStream);
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.12.2015, 16:15
Delphi
1
2
3
4
5
6
7
8
9
procedure TFisherMan.ReadList(Reader: TReader);
var
  i,j:Integer;
begin
  j:=Reader.ReadInteger; // в голове Ридера - интеджер-значение, соответствующее кол-ву строковых значений, идущих в Ридере СЛЕДОМ ЖЕ
  SetLength(FNajivkaMen, j);
  for i := 0 to Reader.ReadInteger do // а это что за шняга ? в голове Ридера сейчас строка, а ты опять требуешь от него Интеджер ..
    FNajivkaMen[i]:=Reader.ReadString; // вот она !!!
end;
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
21.12.2015, 08:09  [ТС]
Непонятно откуда взялась строка??? если ни чего не менялось.
Заменил: Reader.ReadInteger на j.
Только до этого не доходит сбрасывается на 144 строке: ObjectTextToBinary(FileStream, MemStream)
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
21.12.2015, 08:22
Цитата Сообщение от glyk5 Посмотреть сообщение
откуда взялась строка???
Откуда-откуда ..
Оттуда !)

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TFisherMan.WriteList(Writer: TWriter);
var
  i:Integer;
begin
  Writer.WriteInteger(GetStrCount); // вот ты пишешь в поток Integer
  for i:=0 to Length(FNajivkaMen)-1 do // и следом FNajivkaMen раз пишешь в поток
    begin
     Writer.WriteString(FNajivkaMen[i]); // тот самый String
    end;
end;
Читать из потока следует в той же последовательности и те же типы что и записал .

Цитата Сообщение от glyk5 Посмотреть сообщение
не доходит сбрасывается на 144 строке: ObjectTextToBinary(
Что значит "сбрасывается" ? Исключение что ли возникает ? Ну так и приведи сюда текст сообщения об исключении !

Цитата Сообщение от glyk5 Посмотреть сообщение
Заменил: Reader.ReadInteger на j.
Почему на j, если индексация эл-тов любого дин.массива начинается с нуля ?
1
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
21.12.2015, 09:08  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
сообщения об исключении
Project Project1.exe raised exception class EParserError with Message 'Identifier expected on line 5' Process stopped. Use Step or Run to continue
Цитата Сообщение от mss Посмотреть сообщение
Почему на j, если индексация эл-тов любого дин.массива начинается с нуля ?
Я не совсем корректно выразился, нужно заменить
for i := 0 to Reader.ReadInteger do
на
for i := 0 to j do

Добавлено через 21 минуту
Разобрался не хватало регистрации класса RegisterClass(TFisherMan); перед: ObjectTextToBinary(FileStream, MemStream);

Добавлено через 4 минуты
а нет, все равно этаже ошибка.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
21.12.2015, 09:49
Как же с тобой тяжко)

for i := 0 to j - 1 do

ObjectTextToBinary
Накой ляд они тебе вообще уперлись, эти преобразования ?
Не нужны они здесь - ни ObjectTextToBinary, ни ObjectBinaryToText.
Корове седло эти преобразования.
1
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
21.12.2015, 13:57  [ТС]
все работает
Delphi
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
procedure TFisherMan.ReadList(Reader: TReader);
var
  i,j:Integer;
begin
  j:=Reader.ReadInteger;
  SetLength(FNajivkaMen, j);
  for i := 0 to j-1 do
    FNajivkaMen[i]:=Reader.ReadString;
end;
 
procedure TFisherMan.WriteList(Writer: TWriter);
var
  i:Integer;
begin
  Writer.WriteInteger(GetStrCount);
  for i:=0 to Length(FNajivkaMen)-1 do
    begin
      Writer.WriteString(FNajivkaMen[i]);
    end;
end;
 
procedure SaveToFile(RootObject: TComponent; const FileName: TFileName);
var
  FileStream: TFileStream;
begin
  FileStream := TFileStream.Create(FileName, fmCreate);
  try
     FileStream.WriteComponent(TFisherMan(FisherMan));
  finally
    FileStream.Free;
  end;
end;
 
procedure LoadFromFile(RootObject: TComponent; const FileName: TFileName);
var
  FileStream: TFileStream;
begin
  FileStream := TFileStream.Create(FileName, fmOpenRead);
  try
    FileStream.ReadComponent(TFisherMan(FisherMan));
  finally
    FileStream.Free;
  end;
end;
может еще что не так?

Добавлено через 2 минуты
Почему-то содержимое файла выглядет так:
Delphi
1
2
3
TPF0
TFisherMan NameMan   OSkillMend
NajivkaMen01020
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
21.12.2015, 14:11
Цитата Сообщение от glyk5 Посмотреть сообщение
может еще что не так?
Вот теперь все чин по чину)
Ну разве что не помешало бы зарегистрировать класс компонента, тогда не придется создавать его явно ручками - метод стрима ReadComponent(nil) вернет готовый объект с заполненными из стрима свойствами.

Цитата Сообщение от glyk5 Посмотреть сообщение
Почему-то содержимое файла выглядет так
Это же не текстовый файл, а бинарный файл в нативном формате TPF0..
Нафих тебе текстовый формат, если ты не намерен сохранять/воссоздавать свои объекты в разных средах разработки ?
1
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
21.12.2015, 15:51  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
зарегистрировать класс компонента
Delphi
1
2
3
initialization
  RegisterClass(TFisherMan);
end.
PS. Большое спасибо!

Добавлено через 1 час 17 минут
еще вопрос:
Для каждого массива нужно создавать свои процедуры ReadList, WriteList?
Delphi
1
2
3
4
5
6
procedure TFisherMan.DefineProperties(Filer: TFiler);
begin
 inherited;
 Filer.DefineProperty('NajivkaMen', ReadListN, WriteListN, true);
 Filer.DefineProperty('Udohka', ReadListU, WriteListU, true);
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2015, 15:51

Сохранить файл в папке
Есть программа,и она сохраняет данные из стринггрида в эксель. Для сохранения такой код: For Col:=0 to SG2.ColCount-1 do For...

Сохранить таблицу в файл
Собрал код сохраняющий таблицу в файл, но он мне ненравится тем что он сохраняет все данные построчно. var List: TStringList; ...

Сохранить excel файл
надо как-то програмно сохранить excel файл XL := CreateOleObject('Excel.Application'); XL.DisplayAlerts := true; ...

Как сохранить файл ?
Вот мой код. procedure TForm1.N2Click(Sender: TObject); var bit:TBitmap; begin if dlgSave1.Execute() then begin ...

Сохранить цифры в файл
Здравствуйте, нужно сохранить цифры в file of byte. var f: file of byte; i: integer; b: byte; begin Write('n = '); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru