Поиск:

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


Опытный
**


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

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



Значение этого свойства программно считывать отсюда: Series1->Pointer->VertSize. Как написано в справке, это свойство задано в "логических пикселях" не знаю что это, но похоже что эти пиксели примерно равны процентам от высоты области куда выводится график.
З.Ы. кстати говоря, практически ничего из того что я Вам наотвечал я не знал до того как был задан вопрос. Всё это или ищется в справке, или додумывается самостоятельно.
З.З.Ы. а зачем Вы вообще используете чарт типа Gantt? Прямоугольник можно и просто на канве нарисовать. А если уж используете, то зачем Вам выводить текст отдельно? Gantt позволяет выводить метку внутри прямоугольника.

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


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


Опытный
**


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

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



я рисую прямоугольники с помощью серий gantt, так как рисованное на канве изображение пропадает при прокрутке графика (так как нужны координатыне оси и возможность зумирования) или его масштабировании + рисунок не прокручивается вместе с прокруткой графика....графиком проще и надежнее...а выводить мне надо несколько меток - по краям  прямоугольника и над ним (при масштабировании и возникает проблема  - надо, чтобы метка была строго над(на) прямоугольником и в нем слева и справа по краям)...поэтому использую серию типа Point с невидимыми точками и видимыми метками...
PM MAIL   Вверх
Usper
Дата 26.6.2009, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так проблема решена? 
Для вывода всяких геометрических фигур есть стиль чарта Shapes, он же позволяет выводить и текст внутри (слева, справа) фигуры.
Да, кстати, цвет рабочей зоны графика, на самом деле, меняется элементарно: Chart1->BackColor=clRed.

Это сообщение отредактировал(а) Usper - 26.6.2009, 09:02


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


Опытный
**


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

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



в принципе нет...см. рисунок - надо сделать так, чтобы при масштабировании/ прокрутке графика или изменении размеров формы метки не прыгали (см. справа) а оставались как на левом рисунке...

и цвет методом Chart1->BackColor=clRed не меняется...вообще ничего не происходит.....может еще какие операции нужны.....

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  myris.JPG 61,37 Kb
PM MAIL   Вверх
Usper
Дата 29.6.2009, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Shapes или Gantt с текстом внутри не подходят?
Для закраски рабочей зоны графика попробуйте в обработчик OnBeforeDrawAxes чарта написать это:
Код

Chart1->Canvas->Brush->Color=clYellow;
Chart1->Canvas->FillRect(Chart1->ChartRect);



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


Опытный
**


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

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



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


Опытный
**


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

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



Из рисунка как раз понятно, что текст должен быть один, и находится он должен внутри, по центру прямоугольника. Этот прямоугольник должен быть привязан к координатам или находится просто где-то области для вывода графика? Он должен изменять размеры при изменении масштаба?


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


Опытный
**


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

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



текст не обязательно один и не обязательно по центру...но это не суть...главное,  чтобы при масштабировании (например увеличении) чарта (а соответственно и прямоугольника) текст находился строго внутри прямоугольника и над ним (т.е. текст выводится внутри прям-ка и над его верхней "границей")...прямоугольник конечно строится по координатам...

+ попутно подскажите как сделать так, чтобы вне зависимости от выводимых данных и текущего масштаба графика по оси (например левой) выводились только целые числа (например 1,2,3.....10) и не было дробных отметок на оси....

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


Опытный
**


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

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



Отменить дробные отметки можно так: Chart1->LeftAxis->Increment=1;
А по-поводу прямоугольника буду думать как это нарисовать на канве.

Это сообщение отредактировал(а) Usper - 2.7.2009, 16:28


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


Опытный
**


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

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



Ну вот например так:
Код

int X0,Y0,X1,Y1;
AnsiString TopText,LeftText,RightText,InnerText;

void __fastcall TForm1::Chart1AfterDraw(TObject *Sender)
{
    int XL,YL,XR,YR; //координаты прямоугльника на канве
    XL=Chart1->BottomAxis->CalcXPosValue(X0); //пересчёт координат на графике в координаты на канве
    YL=Chart1->LeftAxis->CalcYPosValue(Y0);
    XR=Chart1->BottomAxis->CalcXPosValue(X1);
    YR=Chart1->LeftAxis->CalcYPosValue(Y1);
    Chart1->Canvas->Rectangle(XL,YL,XR,YR);
    int InnerTextX, InnerTextY, InnerTextWidth;
    InnerTextWidth=Chart1->Canvas->TextWidth(InnerText);
    if(InnerTextWidth<(XR-XL)) //если текст не влезает по-горизонтали - то и не выводим
    {
        InnerTextX=XL+(XR-XL)/2-InnerTextWidth/2; //рассчёт координаты Х для внутреннего текста
        InnerTextY=YL+(YR-YL)/2-Chart1->Canvas->TextHeight(InnerText)/2;
        Chart1->Canvas->TextOutA(InnerTextX,InnerTextY,InnerText);
    }
    int LeftTextX,LeftTextY;
    LeftTextY=YL+(YR-YL)/2-Chart1->Canvas->TextHeight(LeftText)/2;
    LeftTextX=XL-Chart1->Canvas->TextWidth(LeftText)-2;
    Chart1->Canvas->TextOutA(LeftTextX,LeftTextY,LeftText);
}


Проект на всякий случай прилагаю
Это просто пример, неплохо бы сделать всё это по-красивее. Избавится от глобальных переменных например. Вывод прямоугольника и текста не проверяется на выход за границы рабочей области. Так же не проверяются габариты внутреннего текста по высоте прямоугольника.
Габариты прямоугольника тоже не проверяются: Х0 должен быть левее Х1, а Y0 ниже чем Y1.

Это сообщение отредактировал(а) Usper - 2.7.2009, 16:27

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  Project.zip 4,34 Kb


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


Опытный
**


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

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



спасибо за ответ....

1.Подскажите как программно узнать минимальное значение текущей метки по оси (например левой) графика (но это не Chart1->LeftAxis->Minimum (на рисунке в эдитах), так как я могу прокручивать по вертикали график и надо знать минимальное значение метки по оси в данный момент времени) – см. рисунок

2. Как можно, например по кнопке, зумировать в обе стороны изображение графика с заданным масштабным коэффициентом?

2. Как вывести текст на канву графика так, чтобы он не стирался при манипуляциях с графиком(прокрутка, зумирование) и прокручивался вместе с ним…

Таким образом
  
Код

 Chart1->Repaint();
 Chart1->Canvas->TextOutA(100,100,"hello");

не получается нужный эффект – при прокрутке графика текст стирается…


Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  risunok.JPG 16,09 Kb
PM MAIL   Вверх
Usper
Дата 3.7.2009, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вы мои ответы как то проверяете или просто коллекционируете? В моём предыдущем посте осуществляется вывод прямоугольника и текста и текст при прокрутке/зуме не стирается. Вывод на канву надо делать в обработчиках AfterDraw или BeforeDraw чарта или сириеса и тогда они стираться не будут. Координаты для вывода текста осуществлять с помощью CalcXPosValue(), CalcYPosValue() соответствующей оси. По пункту 1 и 2 - отвечу в понедельник, так как билдера дома нет.


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


Опытный
**


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

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



Usper:Ваш последний пост ott просто не проверял...заранее спасибо...
           буду ждать Вашего ответа на п.п. 1 и 2....
PM MAIL   Вверх
Usper
Дата 6.7.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как пишут в справке к компоненту, есть два метода изменения масштаба: зум по прямоугольнику (неважно как задаётся прямоугольник: с помощью мыши или программно) и зум в процентах от текущего размера рабочей области.
Соответственно Chart1->ZoomPercent(50) уменьшает масштаб в два раза от текущего мастштаба, а Chart1->ZoomPercent(200) увеличивает в два раза. Chart1->UndoZoom() - устанавливает исходный масштаб (100%).
А по-поводу первого пункта, я честно говоря не понял, что требуется. Что такое минимальное значение метки?


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


Опытный
**


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

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



спасибо, Usper, за ответ...
а под понятием "минимальное значение метки" я имел ввиду минимальное значение по оси (например левой), видимое в данный момент на экране (на рисунке ранее - это примерно 7.5)...как его программно определить? (это не минимальное значение по всей оси в принципе, а минимальное в данный момент времени - то, которое видно на экране сейчас...)...
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.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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