Subscribe

RSS Feed (xml)

Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

星期三, 10月 03, 2007

圖片掌形拖曳工具 (圖片中間有小手)


首先新增
1個TScrollBox; AutoScroll屬性False;
1個TImage; Cursor屬性crHandPoint; Pitcher屬性加入自己的圖片;
1個TScrollBar; Min屬性1; LargeChange屬性10;
1個TScrollBar; Min屬性1; LargeChange屬性10; Kind屬性sbVertical

事件
在兩個TScrollBar物件都點兩下。
TImage的OnMouseDown、OnMouseMove及OnMouseUp都點兩下
TForm的OnCreate

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Image1: TImage;
ScrollBar1: TScrollBar;
ScrollBar2: TScrollBar;
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure ScrollBar2Change(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var CanMove:boolean;
OldX,OldY:Integer;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
temp:Integer;
begin
if CanMove then //可以開始移動
begin

//往左右移判斷
temp:=Image1.Left+X-OldX;
if temp > -1 then
Image1.Left := -1
else if temp < ScrollBox1.Width-Image1.Width then
Image1.Left := ScrollBox1.Width-Image1.Width
else
Image1.Left := temp;
ScrollBar1.Position:=-Image1.Left;

//往上下移判斷
temp:=Image1.Top+Y-OldY;
if temp > -1 then
Image1.Top := -1
else if temp < ScrollBox1.Height-Image1.Height then
Image1.Top := ScrollBox1.Height-Image1.Height
else
Image1.Top := temp;
ScrollBar2.Position:=-Image1.Top;

end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CanMove:=true; //設定可以開始
OldX:=X; //OldX為滑鼠點下去的X位置
OldY:=Y; //OldX為滑鼠點下去的Y位置

end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CanMove:=False; //設定不可以開始
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ScrollBox1.DoubleBuffered:=True;

ScrollBar1.Max:=Image1.Width-ScrollBox1.Width+(ScrollBox1.Width*ScrollBox1.Width div Image1.Width);
ScrollBar1.Pagesize:=ScrollBox1.Width*ScrollBox1.Width div Image1.Width;

ScrollBar2.Max:=Image1.Height-ScrollBox1.Height+(ScrollBox1.Height*ScrollBox1.Height div Image1.Height);
ScrollBar2.Pagesize:=ScrollBox1.Height*ScrollBox1.Height div Image1.Height;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
if ScrollBar1.Position > Image1.Width-ScrollBox1.Width then
ScrollBar1.Position:=Image1.Width-ScrollBox1.Width;
Image1.Left:=-ScrollBar1.Position;
end;

procedure TForm1.ScrollBar2Change(Sender: TObject);
begin
if ScrollBar2.Position > Image1.Height-ScrollBox1.Height then
ScrollBar2.Position:=Image1.Height-ScrollBox1.Height;
Image1.Top:=-ScrollBar2.Position;
end;

end.

沒有留言: