我从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);
....
下面的部分代码:
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);
....
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