5

有没有办法为 TCanvas.LineTo 方法设置线端的样式?它似乎默认为圆形末端,当 Pen.Width 设置为较大的值(例如 9)时,对于一行不同颜色的几行来说,这看起来非常糟糕。

它看起来像这样(圆形末端):

 ********........******
**********........******
**********........******
 ********........******

(其中 * 是蓝色,. 是黄色)

如果在中间线之后画两条外线,那就更糟了:

 ********........******
**********......********
**********......********
 ********........******

我希望它看起来像这样(直线结束):

 ********........******
 ********........******
 ********........******
 ********........******

Pen 似乎没有为此提供任何设置,LineTo 方法也没有。是否有我可以调用的 Windows API 函数?

4

2 回答 2

4

也许ExtCreatePen 有帮助。检查PS_ENDCAP_*PS_JOIN_*标志。

于 2008-12-15T14:56:18.520 回答
1

DelphiPraxis 论坛的示例代码(德语)

procedure TForm1.FormCreate(Sender: TObject);
   var LogBrush:TLOGBRUSH;
begin
   ZeroMemory(@LogBrush, SizeOf(LogBrush));
   LogBrush.lbColor:=ColorToRGB(Canvas.Pen.Color);
   LogBrush.lbHatch:=0;

   DeleteObject(Canvas.Pen.Handle);
   Canvas.Pen.Handle:=ExtCreatePen(PS_Geometric or PS_Solid or PS_EndCap_Square or PS_Join_Miter, 10, LogBrush, 0, nil);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
   Canvas.MoveTo(0, 0);
   Canvas.LineTo(50, 50);
end; 
于 2019-11-28T12:42:48.413 回答