Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 15.03.2014
Сообщений: 42
1

Не выводит 2 Shape на форму, ошибка в функции - " is not valid integer value

14.04.2015, 23:26. Показов 607. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть функция:
C++
1
2
3
4
5
6
7
8
9
10
11
double readCoord(UnicodeString iskomoe, String coord)
{
        String whatFind = coord + "=";
        int startPos = PosEx(whatFind, iskomoe);
        int endPos = PosEx(";", iskomoe, startPos);
        String pos = iskomoe.SubString(startPos+2, endPos - startPos-2);
        double posConverted = StrToInt(pos);
        // ShowMessage(pos);       // LOG
        return posConverted;
 
}
C++
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
void __fastcall TForm1::Start1Click(TObject *Sender)
{
 
    StatusBar1->Panels->Items[0]->Text = "Добро пожаловать";
    Memo1->Lines->LoadFromFile("1.txt");      // Вот так выгружаю файл   // Для лога
 
 
    int coutLines = Memo1->Lines->Count;
    Label9->Caption = coutLines;
 
    if (coutLines != 0)
    {       // if (coutLines <> 0)
 
 
        while (i < coutLines)
        {              // while (i < coutLines)
        UnicodeString XX = Label3->Caption;         // Вот так ПРИСВАИВАЮ данные в String
        Label3->Caption=Memo1->Lines->Strings[i];  // Вот так ВЫВОЖУ первую строку
 
        double posX = readCoord(XX, "x");
            Label4->Caption = posX;    // Для лога
        double posY = readCoord(XX, "y");
            Label5->Caption = posY;    // Для лога
        double posR = readCoord(XX, "R");
            Label6->Caption = posR;    // Для лога
 
        Shape[i] = new TShape(this);
        Shape[i]->Parent = this;
        Shape[i]->Visible = true;
        Shape[i]->Brush->Style=stCircle;
        Shape[i]->Brush->Color=clBlack;
 
        double cX = posX;
        double cY = posY;
        double cR = posR;
        Shape[i]->Top = cY;
        Shape[i]->Left = cX;
        Shape[i]->Height=cR;  // *2  NE ZABIT'
        Shape[i]->Width=cR;   // *2  NE ZABIT'
        Shape[i]->Shape = stCircle;
        Shape[i]->OnMouseEnter = MouseEnter;
        Shape[i]->OnMouseLeave = MouseLeave;
 
        Label2->Caption=i;   // Для лога
           StatusBar1->Panels->Items[0]->Text = posR;
             i++;
        }          // while (i < coutLines)
 
    }
else {
        ShowMessage("Файл пустой");
     }       // if (coutLines <> 0)
 
 
}
При первом нажатии на Start - выбивает окно с ошибкой " " is not valid integer value ". При повторном нажатии - всё работает, НО рисует только 7 из 9 кругов. Почему 7, а не 8 хотя бы - не пойму.
Вот так координаты заданы в 1.txt:
x=45; y=45; R=50;
x=0; y=0; R=50;
x=100; y=100; R=65;
x=450; y=450; R=50;
x=125; y=125; R=25;
x=10; y=10; R=50;
x=175; y=175; R=20;
x=150; y=150; R=15;
x=200; y=200; R=200;

Такая же история, даже если не использовать функцию readCoord, а пустить всё в void __fastcall TForm1::Start1Click(TObject *Sender).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2015, 23:26
Ответы с готовыми решениями:

Проблема:при выводе массива выводит ошибку '' is not a valid integer value
Дана матрица A размера N на M элементов, содержащая вещественные числа. Сформировать из нее массив...

Ошибка '' is not valid integer value
Што делать если ошибка '' is not valid integer value. Помогите. unit Unit4; interface ...

Ошибка: Is not a valid integer value
Помогите пожалуйста разобраться unit Unit1; interface uses Windows, Messages, SysUtils,...

Ошибка is not a valid integer value
Прога должна создать массив, а затем вывести сумму всех отрицательных элементов. При запуске...

Ошибка: ''is not a valid integer value
Помогите пожалуйста. Мне надо было создать программу, которая находит индекс числа в массиве...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
14.04.2015, 23:33 2
Для начала: переменная i где инициализируется?
0
0 / 0 / 1
Регистрация: 15.03.2014
Сообщений: 42
14.04.2015, 23:35  [ТС] 3
В Unit.h:

C++
1
2
#endif
    int i = 0;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
14.04.2015, 23:53 4
Прелестно. Значит, нажал я на кнопку, и у меня начиная с прошлого значения i будет заполняться еще coutLines элементов массива Shape? А их есть столько? Может, нужно при нажатии на кнопку обнулить i?
0
0 / 0 / 1
Регистрация: 15.03.2014
Сообщений: 42
15.04.2015, 02:21  [ТС] 5
Цитата Сообщение от volvo Посмотреть сообщение
Прелестно. Значит, нажал я на кнопку, и у меня начиная с прошлого значения i будет заполняться еще coutLines элементов массива Shape? А их есть столько? Может, нужно при нажатии на кнопку обнулить i?
Если честно, все равно не понял что от этого изменится, но всё же:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Start1Click(TObject *Sender)
{
    int i = 0;
    StatusBar1->Panels->Items[0]->Text = "Добро пожаловать";
    Memo1->Lines->LoadFromFile("1.txt");      // Вот так выгружаю файл   // Для лога
 
 
    int coutLines = Memo1->Lines->Count;
    Label9->Caption = coutLines;
и т.д.


Вот Unit.h:
C++
1
2
3
4
5
6
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
 
    TShape* Shape[50];
Всё так же - срабатывает при втором клике на Start.
Если что, в итого выводит:
Label9->Caption = coutLines; - 9 , как и должно
Label2->Caption=i; - 8.
Вот не доходит до меня...

Добавлено через 22 минуты
еще:
C++
1
 while (i < coutLines)
Надо изменить на:
C++
1
 while (i <= coutLines)
Добавлено через 1 час 25 минут
Ошибка где-то здесь...
C++
1
2
UnicodeString XX = Label3->Caption;         // Вот так ПРИСВАИВАЮ данные в String
        Label3->Caption=Memo1->Lines->Strings[i];  // Вот так ВЫВОЖУ первую строку
Добавлено через 24 минуты
Методом проб и ошибок получилось так:
C++
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
double readCoord(UnicodeString iskomoe, String coord)
{
        String whatFind = coord + "=";
        int startPos = PosEx(whatFind, iskomoe);
        int endPos = PosEx(";", iskomoe, startPos);
        String pos = iskomoe.SubString(startPos+2, endPos - startPos-2);
        double posConverted = StrToInt(pos);
        // ShowMessage(pos);       // LOG
        return posConverted;
 
}
 
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Start1Click(TObject *Sender)
{
 
    int i = 0;
    StatusBar1->Panels->Items[0]->Text = "Добро пожаловать";
    TStringList *file= new TStringList;//массив элементов где каждый элемент - строка
    file->LoadFromFile("1.txt"); // Загружаем файл
    int coutLines = file->Count;
 
    Label9->Caption = coutLines;
 
    if (coutLines != 0)
    {       // if (coutLines <> 0)
 
 
        while (i < coutLines)
        {              // while (i < coutLines)
        UnicodeString XX = file->Strings[i];    // Вот так ПРИСВАИВАЮ данные в String
        double posX = readCoord(XX, "x");
            Label4->Caption = posX;    // Для лога
        double posY = readCoord(XX, "y");
            Label5->Caption = posY;    // Для лога
        double posR = readCoord(XX, "R");
            Label6->Caption = posR;    // Для лога
 
        Shape[i] = new TShape(this);
        Shape[i]->Parent = this;
        Shape[i]->Visible = true;
        Shape[i]->Brush->Style=stCircle;
        Shape[i]->Brush->Color=clBlack;
 
        double cX = posX;
        double cY = posY;
        double cR = posR;
        Shape[i]->Top = cY;
        Shape[i]->Left = cX;
        Shape[i]->Height=cR;  // *2  NE ZABIT'
        Shape[i]->Width=cR;   // *2  NE ZABIT'
        Shape[i]->Shape = stCircle;
        Shape[i]->OnMouseEnter = MouseEnter;
        Shape[i]->OnMouseLeave = MouseLeave;
 
        Label2->Caption=i;   // Для лога
           StatusBar1->Panels->Items[0]->Text = posR;
             i++;
        }          // while (i < coutLines)
 
    }
else {
        ShowMessage("Файл пуст.");
     }       // if (coutLines <> 0)
 
 
}
Из серии "если работает - не трогай". Без ошибок, рисует - правильно.
0
15.04.2015, 02:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2015, 02:21
Помогаю со студенческими работами здесь

Ошибка 'is not a valid integer value'
Нужно перемножить каждый элемент строки квадратной матрицы на элемент одномерного массива, ...

Ошибка: '[' is not a valid integer value
При отправки с клиента на сервер на серверной стороне вылетает ошибка: 'http://pblog.ru/?p=100 ...

Ошибка: Is not a valid integer value
Люди добрые объясните из за чего ошибка. Есть вот такой кусок кода for i := 0 to ComponentCount -...

Ошибка: '' is not a valid integer value
Вот какая ошибка First chance exception at $753FD36F. Exception class EConvertError with message...

Ошибка: '' is not a valid integer value
Подскажите пожалуйста при вводе в memo чисел выдает ошибка Задание такое: Упорядочить массив из...

Ошибка . is not a valid integer value
var Form17: TForm17; var A:array of integer; N,i: integer; implementation {$R...


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

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