我在使用RAVE打印的时候,产生了canvas dose not allow drawing错误。
请问canvas dose not allow drawing错误是由于什么原因产生的。

解决方案 »

  1.   

    canvas dose not allow drawing说明不能使用canvas
    具体看canvas帮助
      

  2.   

    提示不能重画canvas ,估计需要设置什么属性才可以吧。去查查资料
      

  3.   

    //canvas dose not allow drawing
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      FCanvas : TCanvas;
    begin
      FCanvas := TCanvas.Create;
      FCanvas.MoveTo(10,10);
      FCanvas.LineTo(200,200);
      FCanvas.Free;
    end;
    OK
    procedure TForm1.Button1Click(Sender: TObject);
    var
      rect1, rect2: trect;
      mCanvas: TCanvas;
      mHDC: HDC;
      bitmap : tbitmap;
    begin
      bitmap := tbitmap.create;
      bitmap.loadfromfile('C:\Documents and Settings\Administrator\My Documents\first.bmp');
      mCanvas := TCanvas.Create;
      mHDC := GetDC(button1.Handle);
      mCanvas.Handle := mHDC;
      rect1 := bitmap.Canvas.ClipRect;
      rect2 := Rect(0, 0, button1.Handle, button1.Handle);
      mCanvas.copyrect(rect2, bitmap.canvas, rect1);  bitmap.free;
      mCanvas.Free;
      ReleaseDC(button1.Handle, mHDC);
    end;
      

  4.   

    TO: flyinwuhan(制怒·三思而后行)确实是多线程出的问题,我在一个线程调用RAVE进行打印。能解决一下吗?
      

  5.   

    是不是线程同步,或者调用RAVE控件的问题?
      

  6.   

    vcl不是线程安全的.
    你可以在线程中postmessage(wm_print)给一个窗体(例如创建线程的窗体),然后再这个窗体中截取wm_print消息,并进行处理(打印)
      

  7.   

    TO: chw_csdn_chw(chw)——————————————————————————————————————你说的又道理,我试一下,希望能好用。
      

  8.   

    应该是VCL同步问题,使用下面的方法看看。procedure TMyTreadPrint.Execute;
    begin
      inherited;
      try
         Synchronize(自己写的过程);
      except
        on Ex:exception do
          fExceptionMessage:=Ex.Message;
      end;
    end;