За это отвечает системный параметр Windows "Перетаскивать содержимое окна" (Drag Full Window), который можно установить либо узнать функцией SystemParametersInfo. Т.е. можно посоветовать при активации приложения устанавливать его в значение False, а при деактивации - возвращаеть обратно.
Т.е. при создании главной формы запоминаем как было; при активации приложения ставим False; при деактивации и при завершении приложения возвращаем "как было".
Вот примерно так:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, AppEvnts, StdCtrls;
type
TForm1 = class(TForm)
ApplicationEvents1: TApplicationEvents;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ApplicationEvents1Activate(Sender: TObject);
procedure ApplicationEvents1Deactivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
SysParam: Boolean;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, Ord(SysParam), nil, SPIF_SENDCHANGE);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @SysParam, SPIF_SENDCHANGE);
end;
procedure TForm1.ApplicationEvents1Activate(Sender: TObject);
begin
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 0, nil, SPIF_SENDCHANGE);
end;
procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, Ord(SysParam), nil, SPIF_SENDCHANGE);
end;
end.
Это работает, но нужно помнить, что если ваше приложение вылетит, например, при exception, то установка останется и будет действовать на все окна системы.
Другой способ, видимо, состоит в перехвате событий WM_SIZE и WM_SIZING и отрисовке собственной рамки.