Поиск:

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


Опытный
**


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

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



Это именно Chart1->LeftAxis->Minimum. По-крайней мере в 2009 билдере после изменения масштаба, это значение примерно соответствует отображаемой картине.


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


Опытный
**


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

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



подскажите еще пож-та по чарту:

1. Как программно узнать размер (длину) выбранного пользователем участка (прямоугольника) зумирования?

2. Как программно добраться до цвета текста метки СЕРИИ (в свойствах графика- это Series_n-вкладки Marks-Text-Font-Color)?

3. Каким образом можно(?) программно поменять цвет какой-либо ОДНОЙ имеющейся метки (например метки “5”) на ОСИ графика и как их ВСЕ можно перекрасить в один цвет? (в свойствах это Chart-Axis (например TopAxis)-Labels-Text-Font-Color) 



Это сообщение отредактировал(а) gordmiand - 8.7.2009, 05:59
PM MAIL   Вверх
gordmiand
Дата 8.7.2009, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



очень надо...помогите плиз ответами на вопросы из моего предыдущего сообщения в данной теме....заранее спасибо всем ответившим....
PM MAIL   Вверх
Usper
Дата 8.7.2009, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2. Series1->Marks->Font->Color=clGreen.
3. Покраска всех меток оси Chart1->LeftAxis->LabelsFont->Color=clGreen.


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


Опытный
**


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

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



спасибо, Usper, за ответы...еще хотелось бы получить ответ на первую часть п.3 (про цвет ОДНОЙ конкретной метки)...... но мне главное решить п.1 (про программное определение длины прям-ка зумирования)....не подскажете способ их решения?


и еще:
Код

TColor cvet;
 for (int i=1; i<=10; i++)
    {
        if  (i<=5) cvet=clBlue; else cvet=clGreen;
        Series1->Marks->Font->Color=cvet;
        Series1->AddXY(i, i+2, i, cvet);
    } 

почему половина МЕТОК не окрашивается в синий цвет, а все выводится зеленым? (методы Repaint();  Refresh() не помогают…) а с окраской ТОЧЕК графика проблем нет…

+как программно добраться до заданной метки (например “5”) на ОСИ графика? мне нужно ее (и только ее !!!) покрасить в произвольный цвет…


Это сообщение отредактировал(а) gordmiand - 8.7.2009, 16:31
PM MAIL   Вверх
gordmiand
Дата 12.7.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



неужели нельзя выводить на одной серии графика метки разного цвета (или прямоугольники заданных цветов на серии типа Gantt)??? подскажите как это сделать программно.......
PM MAIL   Вверх
Usper
Дата 13.7.2009, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А что в этом удивительного? Не могут же разработчики предусмотреть всё. Надо это реализовывать вручную. А в чём загвоздка с выводом разноцветных прямоугольников на сириес типа Gantt?


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


Опытный
**


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

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



то есть все-таки нельзя выводить метки разного цвета на одной серии? 
а что в Вашем понятии означает "реализовывать вручную"? например создавать динамически сириесы и для каждого из них указывать свой цвет меток? или можно как-то проще решить данную проблему?
и при сириесе типа Gantt не получается выводить заданным цветом токо один выбранный прямоугольник (подскажите код...)

Это сообщение отредактировал(а) gordmiand - 13.7.2009, 21:49
PM MAIL   Вверх
Usper
Дата 14.7.2009, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что-то я уже запутался в терминологии. Метки по-английски как называются? Marks? Простыми способами изменить цвет одной такой метки для серии не получится. Как это реализовать - не знаю. А про Gantt опять ничего не понял. Требуется вывести прямоугольники для Gantt разных цветов? В чём проблема? Series1->AddGanttColor(-1,2,4,"Метка",clRed).


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


Опытный
**


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

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



понятно...такого метода (AddGanttColor) я не знал....

подскажите еще:
1. можно ли (как именно?) на ОДНОМ чарте вывести ДВЕ оси TopAxis (и одну LeftAxis)… график строится без участия второй Top-оси.. она используется для визуализации других единиц измерения данных, нежели по первой Top-оси…  


2. мне надо нарисовать ломаную линию вида “|_|”:
   
Код

//1
   Series1->AddXY(5, 17, "", clBlack);
   Series1->AddXY(5, 0.5, "", clBlack);
   Series1->AddXY(10, 0.5, "", clBlack);
   Series1->AddXY(10, 17, "", clBlack);

///////////////////////////////////////////////////////////////////////////
//2    
     Series1->AddXY(10, 17, "", clBlack);
     Series1->AddXY(10, 0.5, "", clBlack);
     Series1->AddXY(5, 0.5, "", clBlack);
     Series1->AddXY(5, 17, "", clBlack);


1 вариант – рисование слева направо (все верно рисуется), 2 – справа налево - фигура перевернута…. Почему так происходит (ведь если строить по точкам, то все должно быть верно) и как это исправить???

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


Опытный
**


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

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



Две оси TopAxis вывести не получится, но можно воспользоваться событием OnGetAxisLabel для коррекции выводимого значения на ось (подправить можно только само значение, но не цвет).
А фигура переворачивается потому что TChart по-умолчанию сортирует выводимые точки по возрастанию. Выключение сортировки:
Код

Series1->XValues->Order=loNone;
Series1->YValues->Order=loNone;



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


Опытный
**


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

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



спасибо за ответ про рисование ломаной линии...
по п.1 хотел бы уточнить:

Код

int m[11]={0, 11, 22, 33, 44, 55, 66, 77, 88, 99, 100};

  for (int i=1; i<= 10 ; i++)
   Series1->AddXY(i, 2+i, "", clBlack);


Подскажите как программно с помощью события OnGetAxisLabel можно поменять все выведенные только на Top-ось данные-метки (i) на другие (массив m) или только несколько значений изменить (например метки № 3,4,5 на Top-оси)??? хотелось бы получить эффект такой, что график строится по одним данным, а подписи по одной из осей (Top-ось) были другие...
PM MAIL   Вверх
Usper
Дата 16.7.2009, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как я понимаю, метки на ось выводятся динамически и заранее нет никакого списка меток потому что заранее невозможно понять сколько меток будет выводится и в каком диапазоне. Поэтому доступа по индексу к метке нет. Есть доступ только по значению. Перед тем, как метка выведется, срабатывает событие OnGetAxisLabel. И уже в обработчике события надо проверить чему равен LabelText и если требуется, подправить это значение.
Код

void __fastcall TForm1::Chart1GetAxisLabel(TChartAxis *Sender,
      TChartSeries *Series, int ValueIndex, AnsiString &LabelText)
{
    if(Sender->Horizontal && Sender->OtherSide && LabelText=="5")
        LabelText="5+";
}


Этот пример отслеживает метку "5" и заменяет её на "5+". Условия Sender->Horizontal && Sender->OtherSide определяют является ли текущая ось верхней осью. Наверное можно опредлить текущую ось как-нибудь поизящнее.


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


Опытный
**


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

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



По методу Chart1GetAxisLabel у меня опять несколько вопросов:
1.      
в ButtonClick(): 
Код

for (i=500; i<=3500  ; i+=500)
    Series1->AddXY(i, 15+i, "", clBlack);


в Chart1GetAxisLabel:
Код

if(Sender->Horizontal && LabelText=="1600") LabelText="hello"; 

почему метка “1600” не меняется на “hello”??? (как такую замену осуществить???) ведь такая метка есть на Top-оси….см.рис. …а если в коде все сократить например на 10 или в условии поставить “==600” или “==800” (эти метки тоже есть на графике) – все нормально проходит…то есть я так понимаю, что метка на оси “1 600” и  “1600” – не одно и тоже…но если я в условии ставлю “ ..==”1 600” ” – это тоже не помогает… как же тогда быть???


2.
Код

AnsiString mas[20]={0,"A","B","C","D","E","F","G","H","I","J" };
 int m[20];

в ButtonClick(): 
{  int i=0, k=0;

  for (i=750; i<=800  ; i+=5)
  {    k++;    m[k]=i;      }

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


мне надо вместо текущих меток (m[i]) по Top-оси проставить метки массива mas…то есть каждому i-му элементу массива m соответствует свой i-ый элемент массива mas…:
я пытаюсь так:
Код

в Chart1GetAxisLabel:
  if(Sender->Horizontal)   
 for (int i=1; i<=10  ; i++) 
     {
       if (LabelText==m[i]) LabelText=mas[i];

          // else  LabelText="";
  - а остальные метки я хочу “убрать”, но по этой строке “убираются” все метки…у меня Increment для Top-оси=0, минимум и максимум для данной оси задаются программно…(для Top-оси  Labels->Style=Auto)
      } 

3. Как использовать параметр ValueIndex из Chart1GetAxisLabel? может для моих целей его как-то получится  применить… 


Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  grafik.JPG 54,25 Kb
PM MAIL   Вверх
Usper
Дата 17.7.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проверка на нужную ось: if(Sender==Chart1->TopAxis...
Метки на ось выводятся в формате, записанном в свойстве AxisValuesFormat для кажой оси. Поэтому сравнивать значения, на самом деле, надо так:
Код
if(Sender==Chart1->TopAxis && LabelText==FormatFloat(Chart1->TopAxis->AxisValuesFormat,1500))
        LabelText="Hello";

По-поводу пункта 2, вроде всё логично, но я не вижу что происходит после сравнения if (LabelText==m[i]) LabelText=mas[i]; по идее после этой строчки надо завершить цикл...
По-поводу пункта 3:
Цитата
There are two different uses for OnGetAxisLabel:
1) :  Axis Labels are Values. Is this case, the Series parameter will be nil, and the ValueIndex will be -1.
2) :  Axis Labels are Series points. The Series parameter will be a valid TChartSeries, and the ValueIndex will be the current Series point position. You can change the LabelText referred parameter for drawing a different Axis Label.


Это сообщение отредактировал(а) Usper - 17.7.2009, 08:39


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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