我从Twincontrol继承的组件,想动态显示图像(因别的原因不能从TGraphiControl控件继承),但是显示的图像要随控件的大小而缩放,类似image的stretch属性设置成true后的功能.怎么实现?
下面的部分代码:
FBitmap.create;   
FBitmap.LoadFromfile('C:\tmp.bmp');
.....
   Canvas.Brush.Style:=bsSolid;
   Canvas.Brush.Color :=clwhite;
   Canvas.FillRect(Canvas.ClipRect);
   Canvas.TextOut(0,0,'图像');
   Canvas.Draw(0, 0, FBitmap);
....

解决方案 »

  1.   

    1.Canvas.Handle:=GetDC(xxx.Handle);
    2.拦截WM_PAINT进行重画!当然如过你是写组件的话,当然也可以将
    FCanvas: TCanvas;
    property Canvas: TCanvas read FCanvas;constructor Txxx.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FCanvas := TControlCanvas.Create;
      TControlCanvas(FCanvas).Control := Self;
    end;procedure Txxx.WMPaint(var Message: TWMPaint);
    begin
      if Message.DC <> 0 then
      begin
        Canvas.Lock;
        try
          Canvas.Handle := Message.DC;
          try
            Paint;
          finally
            Canvas.Handle := 0;
          end;
        finally
          Canvas.Unlock;
        end;
      end;
    end;
    ...
    等代码写入缩放当然可用StretchDraw