Показать сообщение отдельно
  #2  
Старый 10.03.2008, 19:23
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

За это отвечает системный параметр 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 и отрисовке собственной рамки.
Ответить с цитированием