通过老蔡的指点,把我的程序改了一下,变少了一些,呵呵
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
i: Integer;
ClientMousePos: TPoint;
begin
for i := 0 to ComponentCount - 1 do //编历所有组件
begin
if Components[i].ClassName = 'TImage' then //判断是否是Image组件
begin
ClientMousePos := ScreenToClient(MousePos); //将鼠标指示转成相对位置
with TImage(Components[i]) do
begin
if ((ClientMousePos.X > Left) and (ClientMousePos.X < Width)) and
((ClientMousePos.y > Top) and (ClientMousePos.y < Height))
then
Proportional := true; //锁定纵横比
if WheelDelta = 120 then Width := Width - 1 else Width := Width + 1
end;
end;
end;
end;
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
i: Integer;
ObjRect: TRect;
begin
for i := 0 to ComponentCount - 1 do //遍历Form1中的所有组件
begin
if Components[i].ClassName = 'TImage' then //判断是否是 Timage组件
begin
with ObjRect do
begin
//为Image创建一个相对于全屏的区域
Left := Form1.Left + TImage(Components[i]).Left;
Top := Form1.Top + TImage(Components[i]).Top;
Right := Left + TImage(Components[i]).Width;
Bottom := Top + TImage(Components[i]).Height;
//判断鼠标是否在这个Image的区域中
if (MousePos.X > Left) and (MousePos.X < Right) then
if (MousePos.Y > Top) and (MousePos.Y < Bottom) then
//跟据上下滚动来实现放大或宿小Image对象。
case WheelDelta of
120: TImage(Components[i]).Width := TImage(Components[i]).Width - 1;
-120: TImage(Components[i]).Width := TImage(Components[i]).Width + 1;
end;
end;
end;
end;
end;