Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 设置Canvas.LineTo的线端样式_Delphi_Winapi_Gdi_Tcanvas - Fatal编程技术网

Delphi 设置Canvas.LineTo的线端样式

Delphi 设置Canvas.LineTo的线端样式,delphi,winapi,gdi,tcanvas,Delphi,Winapi,Gdi,Tcanvas,是否有任何方法可以为TCanvas.LineTo方法设置lineends的样式?它似乎默认为圆角,当Pen.Width设置为较大值(例如9)时,这对于一行不同颜色的几行来说非常糟糕 它看起来像这样(圆的末端): (其中*为蓝色,.为黄色) 如果在中间线之后绘制两条外线,则情况更糟: ********........****** **********......******** **********......******** ********........****** 我希望它看起来像这

是否有任何方法可以为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;