Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3

TChart и Гантта

28.11.2018, 18:21. Показов 4135. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
В графике ганта необходимо устоновить минимальную и максимальную дату и отключи автомаштаб, что бы можно было ползунками листать, возможно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2018, 18:21
Ответы с готовыми решениями:

Диаграмма Гантта
Диаграмма Ганта создается при открытии текстового файла с помощью кода: if (Name == "Игрок 1") { if...

Вывод диаграммы Гантта в TChart
Доброго времени суток, господа программисты! Подскажите кому несложно, как вывести диаграмму Гантта в TChart? Для вывода использую...

Построение диаграммы Гантта
Здравствуйте! Кто-нибудь в курсе как можно реализовать диаграмму Ганта в Delphi ? Добавлено через 19 минут Ну или вообще какую...

9
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
29.11.2018, 11:54
Лучший ответ Сообщение было отмечено Dinkin как решение

Решение

Можно. Билдера под рукой нет, есть только Дельфи, но это неважно. Кладем на форму TChart и под ним - TScrollBar. И делаем вот так:

Delphi
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
uses DateUtils;
 
var
  dtBegin : TDateTime;
  dtEnd : TDateTime;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  dtBegin := EncodeDate(2012, 1, 1); // задаем диапазон возможных значений для данных
  dtEnd := EncodeDate(2019, 1, 1);
  Chart1.BottomAxis.Automatic := false;
  Chart1.BottomAxis.SetMinMax(dtBegin, IncYear(dtBegin)); // показываем только первый год
  ScrollBar1.Min := 0;
  ScrollBar1.Max := YearsBetween(dtEnd, dtBegin); // если нужно листать по месяцам - то MonthsBetween, по дням - DaysBetween
 
  Series1.AddGantt(EncodeDate(2012, 4, 20), EncodeDate(2012, 8, 2), 1);
  Series1.AddGantt(EncodeDate(2012, 6, 12), EncodeDate(2013, 5, 11), 2);
  Series1.AddGantt(EncodeDate(2017, 4, 11), EncodeDate(2018, 1, 2), 3);
  Series1.AddGantt(EncodeDate(2014, 4, 20), EncodeDate(2015, 1, 12), 4);
end;
 
// а по изменению позиции скролла - отображаем нужное время на чарте...
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
  Chart1.BottomAxis.SetMinMax(IncYear(dtBegin, ScrollPos), IncYear(dtBegin, Succ(ScrollPos)));
  // соответственно, если месяцы - то IncMonths, если дни - то IncDays...
end;
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
29.11.2018, 12:03  [ТС]
volvo, да спасибо, сейчас под себя сделаю.
И такой вопрос, еще, можно ли ка кто стабильно задать ширину LeftAxis... так ак ккогда я на нее меняю названию, она то меньше то больше. И Вобще шикарно было бы, если ка кто элементы на LeftAxis выделять, шрифтом, цветом, не важнго, просто хоть как то.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
29.11.2018, 12:57
Цитата Сообщение от Dinkin Посмотреть сообщение
сли ка кто элементы на LeftAxis выделять, шрифтом, цветом, не важнго, просто хоть как то.
Выделяй:

Delphi
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
procedure TForm1.FormCreate(Sender: TObject);
var ai : TAxisItem;
begin
  dtBegin := EncodeDate(2012, 1, 1);
  dtEnd := EncodeDate(2019, 1, 1);
  Chart1.BottomAxis.Automatic := false;
  Chart1.BottomAxis.SetMinMax(dtBegin, IncYear(dtBegin));
  ScrollBar1.Min := 0;
  ScrollBar1.Max := YearsBetween(dtEnd, dtBegin);
 
  Series1.AddGantt(EncodeDate(2012, 4, 20), EncodeDate(2012, 8, 2), 1, 'First');
  Series1.AddGantt(EncodeDate(2012, 6, 12), EncodeDate(2013, 5, 11), 2, 'Second');
  Series1.AddGantt(EncodeDate(2017, 4, 11), EncodeDate(2018, 1, 2), 3, 'Third');
  Series1.AddGantt(EncodeDate(2014, 4, 20), EncodeDate(2015, 1, 12), 4, 'Fourth');
 
  with Chart1.Axes.Left do // <---
  begin
    Items.Clear;
    ai := Items.Add(1, 'First');
    ai.Format.Font.Color := clRed; ai.Format.Font.Style := [fsBold];
    ai := Items.Add(2, 'Second');
    ai := Items.Add(3, 'Third');
    ai := Items.Add(4, 'Fourth');
    ai.Format.Font.Color := clBlue; ai.Format.Font.Style := [fsItalic];
  end;
end;
Миниатюры
TChart и Гантта  
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
29.11.2018, 15:30  [ТС]
Разными вариациями и точ в точ, выше способ на билрере не работает.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
29.11.2018, 15:47
Лучший ответ Сообщение было отмечено Dinkin как решение

Решение

Вот же собака... Почему у меня работает?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    dtBegin = EncodeDate(2012, 1, 1);
    dtEnd = EncodeDate(2019, 1, 1);
    Chart1->BottomAxis->Automatic = false;
    Chart1->BottomAxis->SetMinMax(dtBegin, IncYear(dtBegin));
    ScrollBar1->Min = 0;
    ScrollBar1->Max = YearsBetween(dtEnd, dtBegin);
 
    Series1->AddGantt(EncodeDate(2012, 4, 20), EncodeDate(2012, 8, 2), 1, "First");
    Series1->AddGantt(EncodeDate(2012, 6, 12), EncodeDate(2013, 5, 11), 2, "Second");
    Series1->AddGantt(EncodeDate(2017, 4, 11), EncodeDate(2018, 1, 2), 3, "Third");
    Series1->AddGantt(EncodeDate(2014, 4, 20), EncodeDate(2015, 1, 12), 4, "Fourth");
 
    TAxisItems *it = Chart1->Axes->Left->Items;
    it->Clear();
    TAxisItem *ai = it->Add(1, "First");
    ai->Format->Font->Color = clRed; ai->Format->Font->Style = TFontStyles() << fsBold;
    ai = it->Add(2, "Second");
    ai = it->Add(3, "Third");
    ai = it->Add(4, "Fourth");
    ai->Format->Font->Color = clBlue; ai->Format->Font->Style = TFontStyles() << fsItalic;
}
Результат:
Миниатюры
TChart и Гантта  
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
29.11.2018, 17:33  [ТС]
Попробова на новом проекте, срабатывает. На боевом не срабатывает. Грешу, что на данный функционал влияет какое то измененое свойство у компонента (а я их там ой как наковырял).

Добавлено через 34 минуты
Да, это были индивидуальные настройки, сбросил и все собралось,спасибо.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
07.12.2018, 15:32  [ТС]
Появилась необходимость, так же в ганте, делать черту , котрая будет выделять сегодняшний день. Думаю может есть такая стндартная возможность? Так как в скудной документации этого не сказано.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
07.12.2018, 16:46
Лучший ответ Сообщение было отмечено Dinkin как решение

Решение

Цитата Сообщение от Dinkin Посмотреть сообщение
Думаю может есть такая стндартная возможность?
DoVertLine достаточно стандартно?
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Chart1AfterDraw(TObject *Sender)
{
    TChart *chart = static_cast<TChart*>(Sender);
    chart->Canvas->Pen->Color = clRed;
    chart->Canvas->DoVertLine(chart->Series[0]->CalcXPosValue(Today()),
        chart->LeftAxis->IStartPos, chart->LeftAxis->IEndPos);
}
Миниатюры
TChart и Гантта  
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
07.12.2018, 17:18  [ТС]
volvo, примного благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2018, 17:18
Помогаю со студенческими работами здесь

UDF для навороченной диаграммы Гантта
Доброго дня всем. По роду деятельности столкнулся с необходимостью планировать и отслеживать сложные проекты и решил что организую себе...

Tchart, как получить координату курсора по tchart?
На график наведен курсор, Tchart позволяет получить координату куда указывает курсор? с точностью все понятно, от разрешения зависит

Ошибка: E2316 'add' is not a member of 'TLineSeries'
Подскажите пожалуйста! есть вот такая программка! //--------------------------------------------------------------------------- ...

3D TChart
Подскажите пожалуйста, как постройть график поверхности в TChart, допустим полуокружности z=sqrt(R^2-x^2-y^2).

TChart, как изменить или скрыть отметки на графике?
Всем привет. На рисунке приложенному к данному тексту изображена диаграмма. Как можно изменить или скрыть обведенные значения? Либо...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru