如何对动态产生的图片进行拖动和改变大小? ( 积分: 100 )

  • 主题发起人 主题发起人 anymei
  • 开始时间 开始时间
A

anymei

Unregistered / Unconfirmed
GUEST, unregistred user!
将动态生成的图片显示在PANEL中,怎样通过鼠标的拖动来改变图片的大小啊?以及通过鼠标的拖动改变它在PANEL中的位置?
请高手帮忙!
 
将动态生成的图片显示在PANEL中,怎样通过鼠标的拖动来改变图片的大小啊?以及通过鼠标的拖动改变它在PANEL中的位置?
请高手帮忙!
 
type
TForm1 = class(TForm)
...
private
Jpg: TJpegImage;
StartX, StartY, px, py, mx, my: Integer;
MouseDown: Boolean;
procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND;
...
end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
Jpg := TJpegImage.Create;
Jpg.LoadFromFile(FileName);
px := 0;
py := 0;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Jpg.Free;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(px, py, Jpg);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
if Assigned(Jpg) then begin
mx := ClientWidth - Jpg.Width;
my := ClientHeight - Jpg.Height;
end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if not MouseDown then begin
MouseDown := True;
StartX := X;
StartY := Y;
end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MouseDown then begin
Dec(px, StartX - X);
Dec(py, StartY - Y);
if px > 0 then px := 0;
if px < mx then px := mx;
if py > 0 then py := 0;
if py < my then py := my;
StartX := X;
StartY := Y;
Refresh;
end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if MouseDown then MouseDown := False;
end;

procedure TForm1.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
begin
Msg.Result := -1;
end;
 
可以用这个控件DSNSYS
 
这个是全部的源代码吗?我试了下,好象还是拖不动啊,我是新手,还请多指点。
 
type
TForm1 = class(TForm)
Panel1: TPanel;
OpenPictureDialog1: TOpenPictureDialog;
Button1: TButton;
Label1: TLabel;
Button2: TButton;

procedure Button1Click(Sender: TObject);
procedure abc(sender:tobject);
procedure Button2Click(Sender: TObject);

private

{ Private declarations }
public
mousedown:boolean;
{ Public declarations }
end;

var
Form1: TForm1;
img:timage;
lab:array[1..8] of Tlabel;

implementation

{$R *.dfm}

procedure tform1.abc(sender:tobject);
begin
lab[1]:=tlabel.Create(self);
lab[1].Left:=img.Left-1;
lab[1].AutoSize:=false;
lab[1].Color:=clblack; //产生周围小点以拖动图片
lab[1].Height:=5;
lab[1].Width:=5;
lab[1].Top:=img.Top-lab[1].Height div 2;
lab[1].Cursor:=crsizenwse;
lab[1].Parent:=panel1;


lab[2]:=tlabel.Create(self);
lab[2].Left:=img.left+img.width div 2 -1;
lab[2].AutoSize:=false;
lab[2].color:=clblack;
lab[2].Height:=5;
lab[2].Width:=5;
lab[2].Top:=img.top-lab[2].Height div 2;
lab[2].Cursor:=crSizeNS;
lab[2].Parent:=panel1;

lab[3]:=tlabel.Create(self);
lab[3].Left:=img.left+img.width -1;
lab[3].AutoSize:=false;
lab[3].color:=clblack;
lab[3].Height:=5;
lab[3].Width:=5;
lab[3].Top:=img.top-lab[3].Height div 2;
lab[3].Cursor:=crSizenesw;
lab[3].Parent:=panel1;

lab[4]:=tlabel.Create(self);
lab[4].Left:=img.left+img.width -1;
lab[4].AutoSize:=false;
lab[4].color:=clblack;
lab[4].Height:=5;
lab[4].Width:=5;
lab[4].Top:=img.top-lab[4].Height div 2 +img.Height div 2;
lab[4].Cursor:=crSizewe;
lab[4].Parent:=panel1;

lab[5]:=tlabel.Create(self);
lab[5].Left:=img.left+img.width -1;
lab[5].AutoSize:=false;
lab[5].color:=clblack;
lab[5].Height:=5;
lab[5].Width:=5;
lab[5].Top:=img.top-lab[5].Height div 2 +img.Height -1 ;
lab[5].Cursor:=crSizenwse;
lab[5].Parent:=panel1;

lab[6]:=tlabel.Create(self);
lab[6].Left:=img.left+img.width div 2 -1;
lab[6].AutoSize:=false;
lab[6].color:=clblack;
lab[6].Height:=5;
lab[6].Width:=5;
lab[6].Top:=img.top-lab[6].Height div 2 +img.Height -1;
lab[6].Cursor:=crSizens;
lab[6].Parent:=panel1;

lab[7]:=tlabel.Create(self);
lab[7].Left:=img.left -1;
lab[7].AutoSize:=false;
lab[7].color:=clblack;
lab[7].Height:=5;
lab[7].Width:=5;
lab[7].Top:=img.top-lab[7].Height div 2 +img.Height -1;
lab[7].Cursor:=crSizenesw;
lab[7].Parent:=panel1;

lab[8]:=tlabel.Create(self);
lab[8].Left:=img.left -1;
lab[8].AutoSize:=false;
lab[8].color:=clblack;
lab[8].Height:=5;
lab[8].Width:=5;
lab[8].Top:=img.top-lab[8].Height div 2 +img.Height div 2;
lab[8].Cursor:=crSizewe;
lab[8].Parent:=panel1;
img.Cursor:=crsizeall;

end;
procedure TForm1.Button1Click(Sender: TObject);
begin //动态产生图片
img:=timage.Create(self);
img.Top:=100;
img.Left:=100;
img.AutoSize:=true;

if openpicturedialog1.Execute then begin
img.Picture.LoadFromFile(openpicturedialog1.FileName);
img.Parent:=panel1;
img.OnClick:=abc;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
img.Free;
lab[1].Free;
lab[2].Free;
lab[3].Free;
lab[4].Free;
lab[5].Free;
lab[6].Free;
lab[7].Free;
lab[8].Free;
close;
end;
end.
这是我先做的,可是要拖动我真的不知道该怎么写.请高手帮忙写一下.
 
后退
顶部