更改线条虚线的大小是否可能?

4

我正在TImage画布上绘制虚线,发现破折号的大小远远超出了绘图区域。有没有办法改变在画布上绘制的虚线的破折号大小呢?
这是我所做的为了能够绘制虚线。

Canvas.Pen.Style := psDash;
Canvas.Polyline(myPoints);

我没有找到任何可以更改虚线大小/长度的Pen属性。谢谢。
2个回答

6
根据http://docwiki.embarcadero.com/VCL/e/index.php/Graphics.TPenStyle,您可以使用psUserStyle。
ExtCreatePen的文档位于http://msdn.microsoft.com/en-us/library/dd162705(VS.85).aspx
以下是我对如何将ExtCreatePen与TPen结合使用的解释。
const
  NumberOfSections = 8;
  LineLengths: array[0..NumberOfSections-1] of DWORD =
    (20, 15, 14, 17, 14, 8, 16, 9);
var
  logBrush: TLogBrush;
begin

  logBrush.lbStyle := BS_SOLID;
  logBrush.lbColor := DIB_RGB_COLORS;
  logBrush.lbHatch := HS_BDIAGONAL; // ignored

  Canvas.Pen.Handle := ExtCreatePen(PS_GEOMETRIC or PS_USERSTYLE or PS_ENDCAP_ROUND or PS_JOIN_BEVEL,
                      4, logBrush, NumberOfSections, @LineLengths[0]);
  // now Canvas.Pen.Style = psUserStyle

  Canvas.Polyline([Point(0,0), Point(100,100), Point(200, 100)]);

end;

0

我不知道Polyline()的实现是什么?当你按住control键并单击它时,你看到的是哪些代码?它是否使用了一个公开的属性变量?如果是这样,你可以设置它,否则-如果它是硬编码的-你将看到它,并知道你不能。


当然,Canvas.Polyline 只是调用了 Windows.Polyline: Windows.Polyline(FHandle, PPoints(@Points)^, High(Points) + 1); (还有通常的 changing 等等)。请参见 http://msdn.microsoft.com/en-us/library/dd162815(VS.85).aspx。 - Andreas Rejbrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接