Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопросы по графику 
:(
    Опции темы
gordmiand
Дата 17.7.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



по п.2 - все верно - после if (LabelText==m[i]) LabelText=mas[i]; цикл и завершается (что и написано в пред. моем сообщении вне выделенного кода проги)....
вообще задача такая:

int a[11]={0, 1.23, 4.32, 6.75, 8.66, 9, 11, 12.44, 13.55, 14, 16.2};
при построении этих данных по ОХ (массив a), не важно с каким OY, шкала ОХ градуируется целыми значениями-метками - т.е. для этой Top-оси  Labels->Style=Auto (или Value)...
мне надо эти выведенные целые метки заменить на соответствующие значения из массива b[]:
AnsiString b[11]={"0", "A", "A","B","b","C","C","H","H","D","D"}; - i-му элементу из данного массива b соответствует i-ый элемент из массива a...


PM MAIL   Вверх
Usper
Дата 17.7.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



То есть после выполнения этого кода
Код
if(Sender->Horizontal)   
 for (int i=1; i<=10  ; i++) 
     {
       if (LabelText==m[i]) LabelText=mas[i];

          // else  LabelText="";
    } 

стираются все метки? Или строчка  else  LabelText=""; всё-таки раскоментирована?


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
gordmiand
Дата 17.7.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



да, все метки стираются при откомментированной строке else.... правда непонятно почему так происходит...то есть явно надо как-то обращаться к каждой имеющейся метке...и обязательно ли метки надо заменять в соотношении 1:1 - то есть например 5 меток заменяются на 5 других или нет?
PM MAIL   Вверх
Usper
Дата 18.7.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Я так и не понял, строка с else закоментирована или нет. Если эта строка не закоментирована то тогда всё ясно...


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
gordmiand
Дата 19.7.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



строка с else НЕ ЗАКОММЕНТИРОВАНА...- и тогда ВСЕ метки становятся почему-то пустыми ("")...как быть? 
PM MAIL   Вверх
Usper
Дата 19.7.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Тогда всё ясно. Как только срабатывает обработчик, значение метки в первом проходе цикла сравнивается с m[1], если значение метки не равно m[1], метке присваивается пустое значение. Во втором проходе цикла значение метки уже равно пустой строке, и эта пустая строка сравнивается с m[2], если m[2] не равное пустой строке (а очевидно, что так и есть), то метке опять присваивается пустая строка. И так 10 раз. Однако, если волшебным образом при первом проходе метка будет равна m[1], то второй проход цикла всё равно выполнится и метке присвоится значение "". Таким образом этот цикл в любом случае присовит метке пустую строку. Цикл надо подправить:
Код

void __fastcall TForm1::Chart1GetAxisLabel(TChartAxis *Sender,
      TChartSeries *Series, int ValueIndex, AnsiString &LabelText)
{
if(Sender==Chart1->TopAxis)   
 for (int i=1; i<=10  ; i++)     
       if (LabelText==m[i]) {LabelText=mas[i]; return;}            
LabelText="";
}

Я модернизировал готовый пример, но с нуля я бы написал, что-нибудь другое.

Это сообщение отредактировал(а) Usper - 19.7.2009, 22:05


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Usper
Дата 19.7.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Поправил предыдущий пост.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
gordmiand
Дата 19.7.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



понятно....а что именно другое Вы написали бы с нуля?
PM MAIL   Вверх
Usper
Дата 20.7.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Да нет, и так сойдёт smile Переписать следовало код, который был до поправки. Но я уже это сделал, к тому же он не работал smile.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
gordmiand
Дата 20.7.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Код

AnsiString mas[20]={0,"A","B","C","D","E","F","G","H","I","J" };
int m[20], k=0;
  
for (i=7500; i<=8000  ; i+=50)
  {   k++;
     m[k]=i;     }

      for (int i=1; i<=10  ; i++)
      Series1->AddXY(m[i], 15+i, "", clBlack);



void __fastcall TForm1::Chart1GetAxisLabel(TChartAxis *Sender,
      TChartSeries *Series, int ValueIndex, AnsiString &LabelText)
{
if(Sender==Chart1->TopAxis)

  for (int i=1; i<=10  ; i++)
        if (LabelText==FormatFloat(Chart1->TopAxis->AxisValuesFormat,m[i]))

        {LabelText=mas[i]; return;}

 LabelText="";
}



на малых числах метки выводятся верно…а при больших значениях (см. инициализацию массива 
m[i]) – нет (пропадают метки по обеим (???) осям- см. рисунок)…..почему так происходит и как это исправить?









Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  new_ris.JPG 13,93 Kb
PM MAIL   Вверх
Usper
Дата 20.7.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



А... ну да, надо код после условия в блок поместить:
Код
void __fastcall TForm1::Chart1GetAxisLabel(TChartAxis *Sender,
      TChartSeries *Series, int ValueIndex, AnsiString &LabelText)
{
    if(Sender==Chart1->TopAxis)
    {
        for (int i=1; i<=10  ; i++)
        if (LabelText==FormatFloat(Chart1->TopAxis->AxisValuesFormat,m[i]))
        {LabelText=mas[i]; return;}
        LabelText="";
    }
}

Но это влияет только на отображение меток на остальных осях... У меня при заданных значениях (от 7500 до 8000) метки выводятся. Правда нестабильно, чуть изменил масштаб и они могут пропасть.

Это сообщение отредактировал(а) Usper - 20.7.2009, 13:22


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
gordmiand
Дата 20.7.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



и? взятие в { } кода из Chart1GetAxisLabel дает только простановку меток по LeftAxis...TopAxis все равно пуста....  как же так? 
а также допустим:
Код

AnsiString mas[20]={0,"A","A","C","D","E","C","G","C","E","J" };

мне надо выводить только разные метки из массива mas[] на top-ось...т.е. не должно быть двух меток A, A и т.п.  как это сделать???

Это сообщение отредактировал(а) gordmiand - 20.7.2009, 21:42
PM MAIL   Вверх
gordmiand
Дата 21.7.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Usper: подскажите пож-та...см. предыдущее мое сообщение...
PM MAIL   Вверх
gordmiand
Дата 21.7.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



так все-таки - почему при использовании последнего из приведенных в данном посте кода Usper-a  вообще не выводятся метки на Top-ось?  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.