如何画虚线(200分)

  • 主题发起人 qiaoda_ly
  • 开始时间
Q

qiaoda_ly

Unregistered / Unconfirmed
GUEST, unregistred user!
如何画宽度大于2的虚线
 
宽度为1的虚线可以通过设置pen的style.如
image1.canvas.Pen.Width:=1;
image1.canvas.Pen.Style:=psDash;
image1.canvas.MoveTo(0,0);
image1.canvas.LineTo(100,100);
但当宽度大于1时,Dotted or dashed pen styles无效。不过你
可以一段一段的画来实现
 
这个答案其实我也想过,也这么实现过,但仍对wind_cloudy表示感谢
 
画多条虚线可能更好一些,如
image1.canvas.Pen.Width:=1;
image1.canvas.Pen.Style:=psDash;
for i:=0 to 5 do
begin
image1.canvas.MoveTo(i,0);
image1.canvas.LineTo(100+i,100);
end;
 
画宽度大于1的虚线是没有直接的方法的,看帮助 :
Note: Dotted or dashed pen styles are not available when the Width property is not 1.
但是你可以通过在同一位置稍微偏移的地方画2次来实现!
 
用OpenGL可以做到! 不过我想这可能已经偏离了你的原意。
有几个CAD软件可以做到,我估计是自己重定义的结果!
 
Try to use Canvas.Pixels[..];
 
自己写个函数,定好起点、终点、线段间的水平距离、垂直距离,
就可以画2个宽度以上的虚线了
 
这个:
function CreateMyPen(const Width:integer):HPEN;
var myStyle: DWORD;
myBrush: TLogBrush;
begin
PenStyle := PS_GEOMETRIC or PS_ENDCAP_FLAT or PS_JOIN_ROUND or PS_DOT;
with myBrush do
begin
lbStyle := BS_SOLID;
lbColor := GetColor;
lbHatch := HS_BDIAGONAL;
end;
result := ExtCreatePen(PenStyle, DWORD(3), PenBrush, 0, nil);
end;
////

canvas.pen := CreateMyPen(4)
canvas.MoveTo(10,10);
canvas.LineTo(100,100);
 
顶部