1 / 1 / 2
Регистрация: 30.10.2012
Сообщений: 36
1

Implicit string cast from 'AnsiString' to 'string' и т.д

12.01.2013, 18:05. Показов 14621. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите исправить ошибки в программе.
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
176
type
TStudent=record
group:shortstring;   //группа
surname:shortstring; //фамилия
name:shortstring;    //имя
age:integer;         //возраст
end;
 
var
  Form1: TForm1;
  Grp:array [0..35] of TStudent; //объявление массива
  num:integer;
  i:Integer=0;
implementation
 
{$R *.dfm}
 
//объявление названий в StringGrid
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='Группа';   //0 строка, 0 столбец
StringGrid1.Cells[0,1]:='Имя';      //1 строка, 0 столбец
StringGrid1.Cells[0,2]:='Фамилия';  //2 строка, 0 столбец
StringGrid1.Cells[0,3]:='Возраст';  //3 строка, 0 столбец
end;
 
//кнопка добавления записи
procedure TForm1.Button3Click(Sender: TObject);
begin
with Grp[Num] do begin
group:=StringGrid1.Cells[1,0];        //присвоение значения из StringGrid
surname:=StringGrid1.Cells[1,2];      //присвоение значения из StringGrid
name:=StringGrid1.Cells[1,1];         //присвоение значения из StringGrid
age:=StrToInt(StringGrid1.Cells[1,3]);//присвоение значения из StringGrid
end;
//добавление записи в ListBox
ListBox1.Items.Add(Grp[Num].Name);//при добавлении записи, отображается её имя
ListBox1.ItemIndex:=ListBox1.Items.Count-1;
 
Label2.caption:='Фамилия:'+StringGrid1.Cells[1,2];
inc(Num);
Label3.Caption:=' '+IntToStr(Num);
//добавление записей в ComboBox
ComboBox1.Items.Add('Запись '+ IntToStr(ListBox1.Items.Count));
ComboBox1.ItemIndex:=ListBox1.Items.Count-1;
end;
 
//кнопка удаления записи
procedure TForm1.Button2Click(Sender: TObject);
var n,i:integer;
begin
//вывод подтверждения об удалении записи
if Application.MessageBox('Удалить запись?','Лабораторная работа №3',
                                           MB_YESNO)=ID_NO then exit;
n:=ListBox1.ItemIndex;
for i:=n to  num-2 do Grp[i]:=Grp[i+1];
ListBox1.Items.Delete(n);
dec(Num);
Label3.Caption:='Всего : '+IntToStr(num);//вывод количества записей
end;
 
//добавление имя, группы, фамилии, возраста в ListBox
procedure TForm1.ListBox1Click(Sender: TObject);
var n:integer;
begin
n:=ListBox1.ItemIndex;
if n>=0 then
begin
StringGrid1.Cells[1,1]:=Grp[n].name;
StringGrid1.Cells[1,0]:=Grp[n].group;
StringGrid1.Cells[1,2]:=Grp[n].surname;
StringGrid1.Cells[1,3]:=IntToStr(Grp[n].age);
Label2.Caption:='Фамилия:' +Grp[n].surname;
Label1.Caption:='Имя:'+Grp[n].name;
end;
end;
 
//добавление имя, группы, фамилии, возраста в ComboBox
procedure TForm1.ComboBox1Change(Sender: TObject);
var n:integer;
begin
Listbox1.ItemIndex:=ComboBox1.ItemIndex;
n:=ListBox1.ItemIndex;
if n>=0 then
begin
StringGrid1.Cells[1,1]:=Grp[n].name;
StringGrid1.Cells[1,0]:=Grp[n].group;
StringGrid1.Cells[1,2]:=Grp[n].surname;
StringGrid1.Cells[1,3]:=IntToStr(Grp[n].age);
Label2.Caption:='Фамилия:' +Grp[n].surname;
end;
end;
 
//изменение записи
procedure TForm1.Button1Click(Sender: TObject);
var n:Integer;
begin
Grp[Num].Name:=StringGrid1.Cells[1,1];
Grp[Num].surname:=StringGrid1.Cells[1,2];
n:=ListBox1.ItemIndex;
listBox1.Items[n] := Grp[Num].name;
comboBox1.Items[n] := Grp[Num].surname;
end;
 
//выбор пункта для просмотра в Lable 2
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
if  RadioButton2.Checked = True then Label2.Caption:='Группа:'
                                    +(StringGrid1.Cells[1,0]);
end;
//выбор пункта для просмотра в Lable 2
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
if  RadioButton1.Checked = True then Label2.Caption:='Фамилия:'
                                       +StringGrid1.Cells[1,2];
end;
//выбор пункта для просмотра в Lable 2
procedure TForm1.RadioButton3Click(Sender: TObject);
begin
if  RadioButton3.Checked = True then Label2.Caption:='Возраст:'
                                     +(StringGrid1.Cells[1,3]);
end;
 
procedure TForm1.Button4Click(Sender: TObject);
//Кнопка при нажатии сохраняет введенную информацию
var f:file of TStudent;
k:Integer;
begin
SaveDialog1.Execute;
AssignFile(f,SaveDialog1.FileName);
Rewrite(f);
for k:=0 to Num-1 do
Write(f,Grp[k]);
CloseFile(f);
end;
 
procedure TForm1.Button5Click(Sender: TObject);
var f:TextFile;
k:Integer;
begin
SaveDialog1.Execute;
AssignFile(f,SaveDialog1.FileName);
Rewrite(f);
for k:=0 to Num-1 do
begin
Writeln(f,'Запись №',k+1);
Writeln(f,'Имя :',Grp[k].Name);
Writeln(f,'Фамилия :',Grp[k].surname);
Writeln(f,'Возраст :',Grp[k].Age);
Writeln(f,'Группа :',Grp[k].group);
end;
CloseFile(f);
end;
 
procedure TForm1.Button6Click(Sender: TObject);
var f1:file of TStudent;
num1:Integer;
begin
OpenDialog1.Execute;
assignfile(f1,OpenDialog1.FileName);
reset(f1);
num1:=0;
while not eof(f1) and (num1<36) do begin
read(f1, Grp[num1]);
ListBox1.Items.Add(Grp[num1].Name);
ListBox1.ItemIndex:=ListBox1.Items.Count-1;
Label4.Caption:=Grp[num1].Name;
inc(num1);
ComboBox1.Items.Add('Запись '+ IntToStr(ListBox1.Items.Count-1));
ComboBox1.ItemIndex:=ListBox1.Items.Count-1;
num:=num1;
end;
closefile(f1);
end;
 
end.
Вложения
Тип файла: rar Inf.rar (5.6 Кб, 13 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2013, 18:05
Ответы с готовыми решениями:

String, AnsiString или char * ? Что лучше использовать с классами? И как работать с типом string
Добрый вечер. Мне нужно в одну строку str1 поместить строку str2. Обе они типа string. В интернете...

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...

Implicit operator cast
Доброго времени суток. Скорее всего что вопрос глупый, но всё же хотелось бы узнать другое мнение....

Ansistring -> string
Собственно, проблема в том, что мне нужно использовать сишную строку, но в Edit-&gt;Text она хранится...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
12.01.2013, 19:16 2
Это не ошибки, а предупреждения. Ты пытаешься присвоить в String (то есть, UnicodeString) значение из ShоrtString (то есть, из AnsiString, фактически). Компилятор достаточно умен, чтобы сделать нужное преобразование за тебя, но предупредить, что это преобразование делается, он обязан. Чтобы сказать компилятору "я знаю, что тут будет преобразование", сделай:

Delphi
1
ListBox1.Items.Add(String(Grp[Num].Name)); // Явное преобразование
А вот обратно - уже потенциально опасно: из UnicodeString в AnsiString можно преобразовывать не всегда. Об этом тебя тоже компилятор предупреждает.
1
1 / 1 / 2
Регистрация: 30.10.2012
Сообщений: 36
12.01.2013, 21:15  [ТС] 3
Я изменил строку, но программа все равно не запускается, и выдает те же придупрежденя.
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
12.01.2013, 21:22 4
На Д7 запускается вообще без каких-либо предупреждений и тем более ошибок.
1
1 / 1 / 2
Регистрация: 30.10.2012
Сообщений: 36
12.01.2013, 21:29  [ТС] 5
Цитата Сообщение от gorfil Посмотреть сообщение
На Д7 запускается вообще без каких-либо предупреждений и тем более ошибок.
Я через RAD Studio, видимо предется на Д7 переходить
1
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
12.01.2013, 21:32 6
Попробуй без врЕменных файлов запуститься:
Вложения
Тип файла: rar Inf.rar (3.1 Кб, 21 просмотров)
2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
12.01.2013, 21:36 7
RAD 2009 - запустилось нормально, если у тебя выставлено в опциях "Трактовать предупреждения, как ошибки" - так отключи (Project->Options->Delphi Compiler->Hints and Warnings, напротив предупреждений поставь False вместо Error), и запускай.
2
12.01.2013, 21:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2013, 21:36
Помогаю со студенческими работами здесь

Int в AnsiString/String
Доброго времени суток. Не мог бы кто-нибудь дать совет, как можно преобразовать Int в...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population....

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте...

Ошибка PHPOfice: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name
Fatal error: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru