Canvas.Brush.Style := bsClear;
Canvas.Pen.Width := 4;
Canvas.Pen.Style := psDot;
Canvas.Pen.Color := clRed;
Canvas.Pen.Mode := pmNotXor;
Canvas.MoveTo(5,5);
Canvas.LineTo(20,20);
我用以上代码画虚线,为啥出来的是实线呢

解决方案 »

  1.   

    宽度为1的虚线可以通过设置pen的style.如
    image1.canvas.Pen.Width:=1;//宽度为1的
    image1.canvas.Pen.Style:=psDash;
    image1.canvas.MoveTo(0,0);
    image1.canvas.LineTo(100,100);
    但画宽度大于一的虚线就得用别的方法:
    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);