http://www.cnblogs.com/del/archive/2008/05/31/1211441.html
相关函数: OffsetViewportOrgEx
本例效果图:
代码文件:
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
cvs: TCanvas;
bit: TBitmap;
f: Boolean;
x1,y1: Integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
bit := TBitmap.Create;
bit.LoadFromFile('c:/temp/test.bmp'
);
cvs := TCanvas.Create;
cvs.Handle := GetDC(Handle);
end;
procedure TForm1.FormPaint(Sender: TObject);
const str = 'Delphi';
var x,y: Integer;
begin
{在图片中绘制文本}
bit.Canvas.Font.Size := 24;
bit.Canvas.Font.Style := [fsBold];
bit.Canvas.Font.Color := 0;
bit.Canvas.Brush.Style := bsClear;
x := (bit.Width - bit.Canvas.TextWidth(str)) div 2;
y := (bit.Height - bit.Canvas.TextHeight(str)) div 2 + 32;
bit.Canvas.TextOut(x, y, str);
{在窗体上绘制图片}
x := (ClientWidth - bit.Width) div 2;
y := (ClientHeight - bit.Height) div 2;
cvs.Draw(x, y, bit);
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
f := True;
x1 := X;
y1 := Y;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if f then
begin
OffsetWindowOrgEx(cvs.Handle, -(X-x1), -(Y-y1), nil);
x1 := X;
y1 := Y;
Repaint;
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
f := False;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bit.Free;
cvs.Free;
end;
end.
窗体文件: