Delphi 设置Canvas.LineTo的线端样式
是否有任何方法可以为TCanvas.LineTo方法设置lineends的样式?它似乎默认为圆角,当Pen.Width设置为较大值(例如9)时,这对于一行不同颜色的几行来说非常糟糕 它看起来像这样(圆的末端): (其中*为蓝色,.为黄色) 如果在中间线之后绘制两条外线,则情况更糟:Delphi 设置Canvas.LineTo的线端样式,delphi,winapi,gdi,tcanvas,Delphi,Winapi,Gdi,Tcanvas,是否有任何方法可以为TCanvas.LineTo方法设置lineends的样式?它似乎默认为圆角,当Pen.Width设置为较大值(例如9)时,这对于一行不同颜色的几行来说非常糟糕 它看起来像这样(圆的末端): (其中*为蓝色,.为黄色) 如果在中间线之后绘制两条外线,则情况更糟: ********........****** **********......******** **********......******** ********........****** 我希望它看起来像这
********........******
**********......********
**********......********
********........******
我希望它看起来像这样(streight ends):
Pen似乎没有为此提供任何设置,LineTo方法也没有。是否可以调用windows API函数?可能有帮助。检查PS\u ENDCAP.*
和PS\u JOIN.*
标志。中的示例代码
这似乎就是我要寻找的,但它也不容易集成到TCanvas方法中。从来没有试过,但可能在这段时间内有效?
********........******
**********......********
**********......********
********........******
********........******
********........******
********........******
********........******
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;