0 / 1 / 0
Регистрация: 04.06.2016
Сообщений: 18
1

FormCreate отказывается работать с глобальными переменными типа string

24.08.2016, 23:44. Показов 1077. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот процедура FormCreate. p и a - глобальные переменные типа integer.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.FormCreate(Sender: TObject);
 var net: TextFile;
begin
 if FileExists('param.txt') = true then
  begin
   CheckBox2.Checked:=True;
   Assignfile(net, 'param.txt');
   reset(net);
   readln(net, Edit1.Text);
   readln(net, Edit2.Text);
   readln(net, p);
   readln(net, a);
   closefile(net);
  end;
end;
Программа должна прочитать начальные данные для работы, но при попытке занести информацию в глобальные переменные типа string программа выдает ошибку. На данные других типов не ругается, на локальные переменные - тоже.

В таком варианте работать тоже оказывается. s здесь - глобальная переменная типа string.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.FormCreate(Sender: TObject);
 var net: TextFile;
begin
 if FileExists('param.txt') = true then
  begin
   CheckBox2.Checked:=True;
   Assignfile(net, 'param.txt');
   reset(net);
   readln(net, s);
   Edit1.Text:=s;
   readln(net, s);
   Edit2.Text:=s;
   readln(net, p);
   readln(net, a);
   closefile(net);
  end;
end;
В чем может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2016, 23:44
Ответы с готовыми решениями:

Как работать с глобальными переменными в методах?
Есть такой не хитрый код: #глобальная переменная используемая в качестве счетчика counter=0 ...

Как работать с глобальными переменными в AVR?
Добрый день. Вот код: #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h>...

Как работать с глобальными переменными\классами
Добрый день, Задача - нужно создать свой SSH клиент для терминального подключения к сетевому...

Подскажите как работать с глобальными переменными
Подскажите как работать с глобальными переменными, прочел что их нет в java. Мне нужно объявить...

17
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
25.08.2016, 01:27 2
Цитата Сообщение от NONE_NAME Посмотреть сообщение
Программа должна прочитать начальные данные для работы, но при попытке занести информацию в глобальные переменные типа string программа выдает ошибку.
Какую ошибку?
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,730
Записей в блоге: 3
25.08.2016, 06:38 3
NONE_NAME, не воспроизводится.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  Form1: TForm1;
  a : string;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var f : TextFile;
begin
 AssignFile(f, 'd:\tmp\in.txt');
 Reset(f);
 readln(f, a);
 CloseFile(f);
 Label1.Caption := a;
end;
Указывайте сообщение об ошибке и как глобальную переменную объявляете
0
0 / 1 / 0
Регистрация: 04.06.2016
Сообщений: 18
25.08.2016, 10:58  [ТС] 4
Вот такую ошибку, если читать сразу в Edit1
[Error] Unit1.pas(279): Left side cannot be assigned to

Такую, если в s
FormCreate отказывается работать с глобальными переменными типа string


Суть ошибки вроде понятна, но непонятно, как исправить.
0
5393 / 4321 / 1060
Регистрация: 29.08.2013
Сообщений: 27,128
Записей в блоге: 3
25.08.2016, 11:01 5
279 это номер строки
покажите пожалуйста эту строку, а лучше код процедуры
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,730
Записей в блоге: 3
25.08.2016, 11:02 6
NONE_NAME, полностью код модуля покажите, вполне возможно, что-то напутано с объявлением глобальных переменных
0
0 / 1 / 0
Регистрация: 04.06.2016
Сообщений: 18
25.08.2016, 11:06  [ТС] 7
Объявлено так же, как и в Вашем примере.
Delphi
1
2
3
4
5
6
7
8
var
  Form1: TForm1;
  name, pass, b, d, s: string;
  p, x, a: integer;
 
implementation
 
{$R *.dfm}
А ошибки в сообщении выше.
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
25.08.2016, 11:09 8
Сие значит, что в переменную "s" загрузка произведена успешно (ну или как минимум без явных ошибок), и теперь у тебя возникла новая ошибка, а именно:
программная попытка установки фокуса на форму/элемент, которого скорее всего еще нет на экране.

Терзают меня смутные сомнения, что у тебя в каком-нибудь "OnCreate" есть строчка вида:
Код
xxx.SetFocus;
Закомменти "это".
0
0 / 1 / 0
Регистрация: 04.06.2016
Сообщений: 18
25.08.2016, 11:10  [ТС] 9
Цитата Сообщение от qwertehok Посмотреть сообщение
279 это номер строки
покажите пожалуйста эту строку, а лучше код процедуры
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.FormCreate(Sender: TObject);
 var net: TextFile;
begin
 if FileExists('param.txt') = true then
  begin
   CheckBox2.Checked:=True;
   Assignfile(net, 'param.txt');
   reset(net);
   readln(net, Edit1.Text); //строка 279
   readln(net, Edit2.Text);
   readln(net, p);
   readln(net, a);
   closefile(net);
  end;
end;
0
0 / 1 / 0
Регистрация: 04.06.2016
Сообщений: 18
25.08.2016, 11:13  [ТС] 10
Это я понял. Но как решить сей вопрос? Если мне нужно задать некие начальные значения для элементов формы, которые хранятся в файле. Может есть какой-то ещё вариант задать параметры в начале программы, считав их из файла?
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.08.2016, 11:14 11
Цитата Сообщение от NONE_NAME Посмотреть сообщение
readln(net, Edit1.Text); //строка 279
Здесь вторым параметром должна быть строковая переменная, а не текст в Эдит
0
0 / 1 / 0
Регистрация: 04.06.2016
Сообщений: 18
25.08.2016, 11:20  [ТС] 12
Не первый день живу. Знаю, что такое readln. Он в т. ч. и из файла читает. FormCreate не единственная процедура в этой программе, работающая с файлами и функцией readln, но единственная, которая не работает.
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
25.08.2016, 11:22 13
NONE_NAME, ты этот свой вопрос уже решил, воспользовавшись переменной "s".

Ну нельзя передавать "свойство объекта" в качестве "параметра-ссылки" к процедуре/функции. "Свойство объекта" в большинстве своем не является "чистой переменной".

Считай нужное тебе в "s", после чего (если это так необходимо) уже произведи обычную операцию присвоения:
Код
Edit1.text := s;
Иди ищи свои попытки установки фокуса.
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,730
Записей в блоге: 3
25.08.2016, 11:23 14
Цитата Сообщение от NONE_NAME Посмотреть сообщение
p, x, a: integer;
Цитата Сообщение от NONE_NAME Посмотреть сообщение
readln(net, p);
Ну и как в integer писать строку?
А вообще - зачем дурью маяться?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.FormCreate(Sender: TObject);
var L : TStringList;
begin
 if FileExists('param.txt') 
  then begin
          CheckBox2.Checked:=True;
          L := TStringList.Create;
          L.LoadFromFile('param.txt');
          Edit1.Text := L.Strings[0];
          Edit2.Text := L.Strings[1];
          ...
          L.Free;
        end;
end;
0
0 / 1 / 0
Регистрация: 04.06.2016
Сообщений: 18
25.08.2016, 11:38  [ТС] 15
Одиннадцатую строку не принимает.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.FormCreate(Sender: TObject);
 var   b: string;
       L: TStringList;
begin
 if FileExists('param.txt') = true then
  begin
   CheckBox2.Checked:=True;
   L := TStringList.Create;
   L.LoadFromFile('param.txt');
   Edit1.Text := L.Strings[0];
   Edit2.Text := L.Strings[1];
   p := strtoint(L.Strings[2]);
   a := strtoint(L.Strings[3]);
   L.Free;
  end;
end;
FormCreate отказывается работать с глобальными переменными типа string


Программа запускается, но с пустой строкой Edit2.
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.08.2016, 11:51 16
Содержание файла покажите, как там записано.
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,730
Записей в блоге: 3
25.08.2016, 12:48 17
NONE_NAME, выложи ты уже проект целиком... Что гадать-то по обрывкам кода.
0
0 / 1 / 0
Регистрация: 04.06.2016
Сообщений: 18
25.08.2016, 13:05  [ТС] 18
Уже нет необходимости. Переключил функцию с Create на OnActivate. Все работает. Всем спасибо за помощь!
0
25.08.2016, 13:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2016, 13:05
Помогаю со студенческими работами здесь

Работа с глобальными переменными
Всем привет. Подскажите, пожалуйста, допустим у меня есть много классов в программе, в каких то...

Проблема с глобальными переменными
Итак, имеется программа - Математическая Модель движения движения объекта. В ней планируется...

Осложнения с глобальными переменными
Мне необходимо взять переменную из form1 и поместить ее в form8 Я пытался это сделать но все мои...

Работа с переменными типа string!
Выделить в строке текста, состоящей только из одних цифр и раз-делителей слова (допустимые...


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

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

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