定制了一些功能线  
要求在使用画笔绘图时不要覆盖功能线  
需要怎样定制功能线  
才能使功能线生成后使用画笔绘图不会覆盖功能线  
下面是功能线生成代码:  
procedure TfrmNewImg.DrawOptionLine;
var
  i:longint;
  ccode:TColorCode;
  x:Longint;
  y:Longint;
  y1:longint;
begin
  x := 4+39-1;
  y := 34;
  y1 := m_Bmp.Height;  with m_Bmp.Canvas do
  begin
    for i:= 1 to 20 do
    begin
      ccode := m_ColorCodeList.ColorCodeOf(i);
      Pen.Color := ccode.Color;
      MoveTo(x,y);
      LineTo(x,y1);
      dec(x,2);
    end;    x := m_Bmp.Width -(4+39);
    for i := 1 to 20 do
    begin
     ccode := m_ColorCodeList.ColorCodeOf(i);
     Pen.Color := ccode.Color;
     MoveTo(x,y);
     LineTo(x,y1);
     inc(x,2);
    end;    ccode := m_ColorCodeList.ColorCodeOf(1);
    Pen.Color := ccode.Color;
    MoveTo(43,32);
    LineTo(43 + 14 + m_DataWidth,32);    ccode := m_ColorCodeList.ColorCodeOf(edtStartPin.Value );
    SetPixel(Handle,41,32,ccode.Color);
  end;
end;

解决方案 »

  1.   

    可以模仿photoshop得图层概念,把功能线画到一个背景得image上,相当于背景图层,然后在把其他得线画到上面得image上,最后利用copyrect把两付图片合并。
      

  2.   

    wudi_1982(︻┳═一酒可千日不饮,但不可一饮不醉)的思想可以考虑,
    但可把功能线画的image层设置为top层(而不是背景),但让此层顶层保持透明,
    这样一来就无须copy了.
      

  3.   

    试验了一下,完全正确,步骤如下:在Form1上设置2个Image组件: Image1和Image2,Image1放在底层,设置成不透明,用来画图,如黑色的矩形或椭圆.
    (为了看得清楚,可以先将Image1整个设置为白底.)Image2放在其上,设置成透明,用来画功能线,红色;
    (为了看清上下关系,可将红线设置为粗线条)然后你在Image1上无论怎样画图(矩形或椭圆),都不会覆盖红色的功能线.
      

  4.   

    设置penmode不行吗
      TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy,
        pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge,
        pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor);
      

  5.   

    设置penmode不行,
    画布本来就分了三层,再加一层更复杂
    而且画布类是自定义的,不是可视化控件
    要把它放在最上层不会调用(有哪位前辈会的话,还请指教)
    现在思路是在功能线区域使用画笔
    奇数行画,偶数行不画这个怎么实现
    还请各位前辈指教!