<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424578&amp;view=findpost&amp;p=3888906</guid>
        <pubDate>Thu, 30 Mar 2023 20:12:42 +0000</pubDate>
        <title>TChart, TGanttSeries: как самому отрисовать серию</title>
        <link>https://forum.sources.ru/index.php?showtopic=424578&amp;view=findpost&amp;p=3888906</link>
        <description><![CDATA[MaIron: Проблема, вероятно, в том, что при расчете позиции прямоугольника вы используете только значения осей X и Y, но не учитываете толщину линии. Для решения этой проблемы вам нужно добавить толщину линии при расчете позиции прямоугольника.<br>
<br>
Ниже приведен пример функции, которая рассчитывает координаты прямоугольника для отображения значения в графике Гантта. Функция учитывает толщину линии и размеры указателя.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">CollapsedWrap disabledLine numbers off</div><div class="code_line">void __fastcall TMуGanttSeries::DrawValue(int ValueIndex)</div><div class="code_line">{</div><div class="code_line">if (isMy)</div><div class="code_line">{</div><div class="code_line">int yT;</div><div class="code_line">TRect rc;</div><div class="code_line">&nbsp;</div><div class="code_line">int thickness = ParentChart-&#62;Canvas-&#62;Pen-&#62;Width;</div><div class="code_line">int pointerSize = Pointer-&#62;VertSize;</div><div class="code_line">&nbsp;</div><div class="code_line">rc.Left &nbsp;= ParentChart-&#62;BottomAxis-&#62;CalcPosValue(StartValues-&#62;Value[ValueIndex]) - thickness / 2;</div><div class="code_line">rc.Right = ParentChart-&#62;BottomAxis-&#62;CalcPosValue(EndValues-&#62;Value[ValueIndex]) + thickness / 2;</div><div class="code_line">&nbsp;</div><div class="code_line">yT = ParentChart-&#62;LeftAxis-&#62;CalcYPosValue(YValues-&#62;Value[ValueIndex]);</div><div class="code_line">&nbsp;</div><div class="code_line">rc.Top &nbsp; &nbsp;= yT - pointerSize - thickness / 2;</div><div class="code_line">rc.Bottom = yT + pointerSize + thickness / 2;</div><div class="code_line">&nbsp;</div><div class="code_line">// Отрисовка прямоугольника</div><div class="code_line">ParentChart-&#62;Canvas-&#62;ReferenceCanvas-&#62;Brush-&#62;Color = SeriesColor;</div><div class="code_line">ParentChart-&#62;Canvas-&#62;ReferenceCanvas-&#62;FillRect(rc);</div><div class="code_line">}</div><div class="code_line">else</div><div class="code_line">{</div><div class="code_line">TGanttSeries::DrawValue(ValueIndex);</div><div class="code_line">}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Этот код должен учитывать толщину линии и размеры указателя, чтобы правильно расположить прямоугольник в графике Гантта. Попробуйте использовать этот код в своем проекте и посмотрите, решает ли он вашу проблему.]]></description>
        <author>MaIron</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424578&amp;view=findpost&amp;p=3855830</guid>
        <pubDate>Tue, 07 Dec 2021 16:31:03 +0000</pubDate>
        <title>TChart, TGanttSeries: как самому отрисовать серию</title>
        <link>https://forum.sources.ru/index.php?showtopic=424578&amp;view=findpost&amp;p=3855830</link>
        <description><![CDATA[vlad2: Нужно самому отрисовать прямоугольники в графике Гантта. Для этого пишу свой класс от TGanttSeries, в котором есть функция отрисовки DrawValue(int ValueIndex)(она protected).<br>
Проблема в определении прямоугольника, в котором рисую. Делаю так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void __fastcall TMуGanttSeries::DrawValue(int ValueIndex)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;if (isMy)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int yT;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TRect rc;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;rc.Left &nbsp;= ParentChart-&#62;BottomAxis-&#62;CalcPosValue(StartValues-&#62;Value[ValueIndex]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;rc.Right = ParentChart-&#62;BottomAxis-&#62;CalcPosValue(EndValues-&#62;Value[ValueIndex]);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;yT &nbsp;= ParentChart-&#62;LeftAxis-&#62;CalcYPosValue(YValues-&#62;Value[ValueIndex]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;rc.Top &nbsp; &nbsp;= yT - Pointer-&#62;VertSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp;rc.Bottom = yT + Pointer-&#62;VertSize;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ParentChart-&#62;Canvas-&#62;ReferenceCanvas-&#62;Brush-&#62;Color = SeriesColor; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;для примера</div><div class="code_line">&nbsp;&nbsp; &nbsp;ParentChart-&#62;Canvas-&#62;ReferenceCanvas-&#62;FillRect(rc); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;для примера</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;TGanttSeries::DrawValue(ValueIndex);</div><div class="code_line">}</div></ol></div></div></div></div><br>
Всё похоже на стандартную отрисовку TGanttSeries::DrawValue(ValueIndex), но не всегда совпадают по одному пикселу по горизонтали.<br>
Не смог найти исходник функции DrawValue, чтобы увидеть, как они рисуют. Т.е. мне нужно узнать точные координаты прямоугольника для закраски.<br>
<br>
Может, кто-то поможет или даст ссылку на исходник этой функции?<br>
Спасибо.]]></description>
        <author>vlad2</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      </channel>
      </rss>
	