在一些常用的看圖軟件中都帶有一個可以放大局部圖像的功能
本實例就是為模仿這一功能開發的
向窗體上添加兩個TImage組件
其中一個TImage組件的Name屬性設置為Image
它充當原圖片顯示的載體
另一個TImage組件的Name屬性設置為Image
它可以顯示放大後的圖像
添加組件後的窗體如圖
所示
[[The No Picture]]
圖 添加組件後的窗體 本例的核心是StretchBlt函數
利用StretchBlt函數實現局部圖像放大
響應代碼如下
procedure TForm
Image
MouseMove(Sender: TObject; Shift: TShiftState; X
Y: Integer);
begin
StretchBlt(Image
Canvas
Handle
Image
Width
Image
Height
Image
Canvas
Handle
X
Y
SRCCOPY);
Image
Refresh;
Screen
Cursors[
]:=LoadCursorFromFile(
MAGNIFY
CUR
);
Self
Cursor:=
;
end;
程序首先會調用StretchBlt函數
以鼠標當前位置作為中心點
以邊長為
選中Image
組件上的局部圖像
並放大此局部圖像到Image
組件上
然後通過調用Image
組件的Refresh方法以刷新Image
組件的顯示
最後設置鼠標指針為新的形狀
程序代碼如下
unit Unit
;
interface
uses
Windows
Messages
SysUtils
Variants
Classes
Graphics
Controls
Forms
Dialogs
ExtCtrls
StdCtrls;
type
TForm
= class(TForm)
Image
: TImage;
Image
: TImage;
procedure Image
MouseMove(Sender: TObject; Shift: TShiftState; X
Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form
: TForm
;
implementation
{$R *
dfm}
procedure TForm
Image
MouseMove(Sender:TObject;Shift:TShiftState;X
Y: Integer);
begin
StretchBlt(Image
Canvas
Handle
Image
Width
Image
Height
Image
Canvas
Handle
X
Y
SRCCOPY);
Image
Refresh;
Screen
Cursors[
]:=LoadCursorFromFile(
MAGNIFY
CUR
);
Self
Cursor:=
;
end;
procedure TForm
FormMouseMove(Sender: TObject; Shift: TShiftState; X
Y: Integer);
begin
Screen
Cursors[
]:=crDefault;
Self
Cursor:=
;
end;
end
保存文件
然後按F
鍵運行程序
程序運行結果如圖
所示
[[The No Picture]]
圖 程序運行結果
From:http://tw.wingwit.com/Article/program/Delphi/201311/8410.html