Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233

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

03.12.2015, 09:30. Показов 10019. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru