发现用Canvas.StretchDraw(re,g);绘制出来的.会被覆盖.要怎么样解决 ..

解决方案 »

  1.   

    你用的是谁的Canvas? Form的还是Image的?Canvas.StretchDraw(re,g) 这么写的话,是在Form的Canvas上画图,你在Form上面在放个Image,当然会盖住;
    而且如果你准备画的话,干嘛还要用image,直接在Form的Canvas上画就行了呗~
      

  2.   


    描述不清楚,究竟是几个Image,如果是一个Image,那么你在这个Image中执行Canvas.StretchDraw(re,g)当然会被覆盖了,或者是你准备画在这个页面上的东西有透明部分,那么你就先把Canvas.Brush.Style设置为bsClear,试试看呢?
      

  3.   

    背景放 在Timage中.然后.把panitBox放在panel上.图画在panitBox上,会被覆盖的
      

  4.   

    唉,怎么又出来了一个Panel呢?你的叠放次序是如下的吗?
    PaintBox
      ↑
     Image
      ↑
     Panel
    如果是这样的话,那么你就在PaintBox的OnPaint事件里面先设置Canvas.Brush.Style为bsClear,再画图。
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    var
      FImg: TBitmap;
    begin
      with (Sender as TPaintBox) do
      begin
        //先禁止填充
        Canvas.Brush.Style := bsClear;
        //再开始画图
        Canvas.Pen.Style   := psSolid;
        Canvas.Pen.Color   := clNavy;
        Canvas.Pen.Mode    := pmBlack;
        //画一条直线
        Canvas.MoveTo(5, 5);
        Canvas.LineTo(100, 100);
        //画一个矩形
        Canvas.Rectangle(40, 10, 60, 20);
        //复制图片
        FImg := TBitmap.Create;
        try
          FImg.LoadFromFile('globe.bmp');      //导入源图
          FImg.TransparentColor := clPurple;   //设置透明色
          FImg.Transparent      := True;       //设置透明
          Canvas.StretchDraw(Rect(20, 70, 52, 86), FImg);
        finally
          FreeAndNil(FImg);
        end;
      end;
    end;
    其中globe.bmp是Delphi自带的图片(尺寸:32*16)