Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521

OnGetAxisLabel

13.06.2013, 07:17. Показов 1540. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему выдает ошибку в Project.cpp в строке Application->Run?
Вот код в обработчике OnGetAxisLabel
C++
1
if (Sender==Chart1->LeftAxis) LabelText=FloatToStrF(StrToFloat(LabelText)/20, ffFixed,10,2);
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
13.06.2013, 10:24
почему ошибка в Application->Run, а вы приводите код OnGetAxisLabel?
да и вообще на вопрос
Цитата Сообщение от Simply me Посмотреть сообщение
выдает ошибку
могу легко ответить
держите решение
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
13.06.2013, 11:17  [ТС]
AntonChik, просто если убрать этот оператор из обработчика события, то ошибка не возникает.
Вот текст ошибки:
Project Project1.exe raised exception class EConvertError with message ''1 733' is not a valid floating point value'
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
13.06.2013, 11:37
ну вам же "русским" языком написано, что в вашем LabelText записано число "1 733" которое не является числом типа float, т.к. нет разделителя (точки), а есть, например, пробел
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
13.06.2013, 12:14  [ТС]
Я просто не понимаю, как задаются подписи к осям. Я на вкладке Chart->Axis-> Labels ничего не меняла, Style: Auto. В коде тоже не трогала. Откуда могли появиться косячные числа?

Еще не пойму, отчего зависит, сколько значений будет подписано на оси. Например, я меняю значение одной переменной, и меняется количество значений на оси. Increment: 0
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
13.06.2013, 12:29
Цитата Сообщение от Simply me Посмотреть сообщение
Я просто не понимаю...
Цитата Сообщение от Simply me Посмотреть сообщение
Еще не пойму...
а не пробовали почитать про Values Format (##0,###) ?

Цитата Сообщение от Simply me Посмотреть сообщение
ничего не меняла, Style: Auto
это нисколько не гарантирует, что все будет так как вам надо
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
13.06.2013, 13:08  [ТС]
Не уверена, что дело в этом. Просто этот же оператор для BottomAxis работает. Сравниваю по всем вкладкам. Не вижу принципиальных различий. Values Format у этих осей тоже одинаковый.

Еще мне кажется странным, что это зависит от переменной n. n - это размер массива znach.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Построение графика
  r=(MAX(znach,n)-MIN(znach,n))/inter;
  for (i=0; i<=inter; i++)
  {
    interval[i]=MIN(znach,n)+r*i;
    ch[i]=0;
  }
  for (i=0;i<n;i++)
  {
    if (znach[i]<=interval[1])
      ch[0]++;
    for (j=1;j<(inter-1);j++)
    {
      if ((znach[i]>interval[j]) && (znach[i]<=interval[j+1]))
      ch[j]++;
    }
    if (znach[i]>interval[inter-1]) ch[inter-1]++;
  }
 //Поделила этот массив на интервалы. Посчитала сколько значений попало в эти интервалы.
 //По частоте и интервалам строю график
   for (i=0; i<=inter;i++)
    Series1->Add(ch[i],interval[i]);
И при n = 5711 еще работает, а при n >= 5712 выдает эту ошибку
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33407 / 21517 / 8236
Регистрация: 22.10.2011
Сообщений: 36,919
Записей в блоге: 12
13.06.2013, 23:45
Simply me, а ты полюбопытствуй, какое значение у тебя передается в параметр ValueIndex обработчика OnGetAxisLabel, и есть ли там вообще что-то отличное от (-1). Чтобы в LeftAxis передавалось что-то кроме (-1), LabelStyle для этой оси должен быть выставлен либо в talPointValue, либо в talText. Насколько я понимаю, у тебя не сделано ни одно ни другое.

Еще один вопрос, на засыпку: что передается первым параметром, и что - вторым при вызове
C++
1
Series1->Add(ch[i],interval[i]);
, ты в курсе?
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
14.06.2013, 11:36  [ТС]
Первый параметр по оси у, второй параметр по оси х.
LabelStyle пробовала в Auto ставить и в Value, все равно ошибка.
UI, может можно как-то проще сделать то, что я хочу, чтоб на оси у отображались проценты, но равномерно, а не для моих точек?
Миниатюры
OnGetAxisLabel   OnGetAxisLabel  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33407 / 21517 / 8236
Регистрация: 22.10.2011
Сообщений: 36,919
Записей в блоге: 12
14.06.2013, 13:16
Simply me, смотри (чистая TLineSeries и чистый TChart, никаких изменений никуда в настройки не вносил. Вообще. И никаких OnGetAxisLabel):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    const int inter = 20;
    int ch[inter] = // Это твои частоты, вместо подсчета задал их константой
    {
        //
        1, 5, 6, 9, 12, 20, 30, 40, 70, 90,
        90, 70, 40, 30, 20, 12, 9, 6, 5, 1
    };
 
    int max_ch = 90; // Максимум среди частот, у тебя вроде есть MAX для этого
    Chart2->LeftAxis->AxisValuesFormat = "#.###%"; // Выставляем формат левой оси
    for (int i=0; i<inter;i++)
        Series2->Add(100.0 * ch[i] / max_ch, FloatToStr(ch[i])); // И выводим в чарт уже в процентах !!!
}
Что имеем?



Это нужно было? (Вторым параметром можешь добавлять что угодно, это просто строка...)
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
14.06.2013, 15:36  [ТС]
Почти. Все-таки у меня вероятность пикового значения была примерно 21%, а теперь 100%. Нельзя сделать так, чтобы на оси были подписаны только допустим 0, 5, 10, 15, 20, 25, 30, 35, 40 (больше 40 не понадобится), а точки попадали в свои настоящие проценты? Наверное, чтобы придумать какое-то лин. преобразование, нужно знать сколько значений будет отмечено на оси. А это почему-то зависит от числа испытаний (n). Например, когда n=30000, подписей 13, когда n=20000, 21.

Еще вот так пробовала, тоже не получается:
C++
1
2
for (int i=0; i<inter;i++)
        Series2->Add(ch[i] / n, FloatToStr(ch[i]));
Миниатюры
OnGetAxisLabel   OnGetAxisLabel  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33407 / 21517 / 8236
Регистрация: 22.10.2011
Сообщений: 36,919
Записей в блоге: 12
14.06.2013, 16:12
Цитата Сообщение от Simply me Посмотреть сообщение
Все-таки у меня вероятность пикового значения была примерно 21%, а теперь 100%
Это вообще не проблема. В моих данных вероятность пика = 90 / Sum(ch), то есть 90/566 = 15.9%, делаю вот так:
C++
1
2
3
4
5
6
#include <Math.hpp>
// ...
    int total = SumInt(ch, inter - 1);
    // У тебя сумма всех значений в ch - это N, я правильно понимаю?
    for(int i = 0; i < inter; i++)
        Series2->Add(100 * (double)ch[i] / total, FloatToStr(ch[i]));
, и получаю свои 16% на пике:
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
14.06.2013, 16:39  [ТС]
Спасибо, UI, как раз так, как я хотела!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru