unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TWmMoving =
record
uMsg : UINT;
wParam: WPARAM;
lParam: ^TRect;
Result: HRESULT;
end;
type
TForm1 =
class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure WmMoving(
var Message: TWmMoving);
message WM_MOVING;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WmMoving(
var Message: TWmMoving);
var
WorkArea: TRect;
begin
inherited;
if SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0)
then
with Message do
begin
if lParam.Right > WorkArea.Right
then
OffsetRect(lParam^, WorkArea.Right - lParam.Right, 0);
if lParam.Left < WorkArea.Left
then
OffsetRect(lParam^, WorkArea.Left - lParam.Left, 0);
if lParam.Bottom > WorkArea.Bottom
then
OffsetRect(lParam^, 0, WorkArea.Bottom - lParam.Bottom);
if lParam.Top < WorkArea.Top
then
OffsetRect(lParam^, 0, WorkArea.Top - lParam.Top);
Result := HRESULT(True);
end;
end;
end.