在类中有TCanvas成员,
如果将其Handle=窗体中的Handle(Fomr1.Canvas.Handle),那么类中的画图操作都应当在窗体上 
可是这个handle的是变化的?导致图形不能显示或不能正确显示,
 
有什么方法可以实现用窗体的参数给类成员赋值在窗体上画图呢?

解决方案 »

  1.   


    procedure TCanvas.RequiredState(ReqState: TCanvasState);
    var
      NeededState: TCanvasState;
    begin
      NeededState := ReqState - State;
      if NeededState <> [] then
      begin
        if csHandleValid in NeededState then
        begin
          CreateHandle;  //HANDLE是每次GETCAVASHANDLE時分配的。
          if FHandle = 0 then
            raise EInvalidOperation.CreateRes({$IFNDEF CLR}@{$ENDIF}SNoCanvasHandle);
        end;
        if csFontValid in NeededState then CreateFont;
        if csPenValid in NeededState then CreatePen;
        if csBrushValid in NeededState then CreateBrush;
        State := State + NeededState;
      end;
    end;   為什麼不直接使用  form1.canvs.handle 來柄來畫呢? 你也可翠聲明一個類成員變量,通過屬性每次使用時獲得  form1.canvas.handle