不是很难,但是很烦人的问题,请教大家!(50分)

  • 主题发起人 主题发起人 gpolice
  • 开始时间 开始时间
G

gpolice

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在做一个程序,要把一个控件限制在另一个容器控件内
我在MouseMove里写了判断语句,可是效果总是不对,可能是我的算法有问题
那位大虾有没有现成的算法给我一个??
 
说清楚点
 
比如说在ScrollBox里面放个Button,我用鼠标移动Button,但是Button的移动范围必须在
ScrollBox里面
 
在开始移动时:
var r:TRect;
begin
计算可移动的范围;
ClipCursor(@r);
end;
 
用ClipCursor对控件比ScrollBox小的时候可以;
可是如果ScrollBox里面放的是张图片,并且图片比ScrollBox大,要限制移动图片的边界
就象ACDSee一样,怎么办?
 
我估计这位朋友是说的滚屏吧?

在ScrollBox里放一Image,设定 :Image.AutoSize :=True;

private
{ Private declarations }
procedure WMEraseBkgnd(var m:TWMEraseBkgnd); message WM_ERASEBKGND;

var
Form1: TForm1;
Draw : Boolean;
StartPt,MovePt : TPoint;

implementation

{$R *.DFM}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Draw :=True;
StartPt :=Point(x,y);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Draw then
begin
MovePt :=Point(x,y);
Form1.VertScrollBar.Position :=Form1.VertScrollBar.Position+StartPt.y-MovePt.y;
Form1.HorzScrollBar.Position :=Form1.HorzScrollBar.Position+StartPt.x-MovePt.x;
end;
Image1.Invalidate ;
end;

procedure TForm1.WMEraseBkgnd(var m:TWMERASEBKGND);
begin
m.Result := LRESULT(False);
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Draw := False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Draw := False;
end;
 
多人接受答案了。
 
后退
顶部