问题已经解决,代码如下
function CreateWidthPen(w:Cardinal; Color:Cardinal):HPen;
var LogBrush : tLogBrush;
Userstyle : array[0..1] of integer;
begin
UserStyle[0]:=18+w div 4;
UserStyle[1]:=5+w;
LogBrush.lbStyle := BS_Solid;
LogBrush.lbColor := Color;
LogBrush.lbHatch := 0;
Result:=ExtCreatePen(PS_GEOMETRIC or PS_USERSTYLE,
w, LogBrush, 2, @Userstyle);
end;
此处用的PS_USERSTYLE说明了会使用最后一个参数中的数组的样子作画,倒数第2个元素说明了Userstyle数组的元素是2个(2个不停的循环,0个是画实线,1是不画线,如此往复形成虚线)
使用此函数用以下方法:
with XXX.Canvas do
begin
OW:=Pen.Width; OC:=Pen.Color;
Pen.Handle:=CreateWidthPen(OW,OC);
MoveTo(P1.X,P1.Y);
LineTo(P2.X,P2.Y);
DeleteObject(Pen.Handle);
Pen.Width:=OW; Pen.Color:=OC;
end;
另外问一个可能挺愚蠢的问题,为什么这样写不行?
with XXX.Canvas do
begin
oldPen:=TPen.Create;
oldPen:=Pen;
Pen.Handle:=CreateWidthPen(oldPen.Width,oldPen.Color);
MoveTo(P1.X,P1.Y);
LineTo(P2.X,P2.Y);
DeleteObject(Pen.Handle);
Pen:=oldPen;
end;
oldPen:=Pen;
这样不能赋值啊? 只是引用? 如何赋值?
用Assign?