不好意思,是我弄错了。
看看这样行不行,代码你需要整理一下拉,我没整理。
也许这种方法不好,但能达到你说的效果
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure FormDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
procedure drawRectOnForm(x1,y1,x2,y2 : integer);
procedure clearRectOnForm(x1,y1,x2,y2: integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
xMouse,yMouse : integer;
xOld,yOld,xDownOld,yDownOld : integer;
{$R *.DFM}
procedure TForm1.clearRectOnForm(x1, y1, x2, y2: integer);
begin
with Canvas do
begin
pen.Color := form1.Color;
Pen.Style := psSolid;
Brush.Style := bsClear;
Rectangle(x1,y1,x2,y2);
end;
end;
procedure TForm1.drawRectOnForm(x1, y1, x2, y2 : integer);
begin
with Canvas do
begin
pen.Color := clgraytext;
Pen.Style := psDot;
Brush.Style := bsClear;
Rectangle(x1,y1,x2,y2);
end;
end;
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
panel1.Left := X- xMouse;
panel1.Top := Y- yMouse;
panel1.EndDrag(true);
end;
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if source is tpanel then
begin
//self.Canvas.
clearRectOnForm(xOld,yOld,xDownOld,yDownOld);
drawRectOnForm(X - xMouse ,Y - yMouse ,
X - xMouse + panel1.Width,
Y - yMouse + panel1.Height);
xOld := x - xMouse;
yOld := y - yMouse;
xDownOld := X - xMouse + panel1.Width;
yDownOld := Y - yMouse + panel1.Height;
accept := true;
end;
end;
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
xMouse := X;
yMouse := y;
panel1.BeginDrag(true);
end;
end.