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

Я не понял вопроса.
Какая связь между цеплянием к краям экрана и отображением рамки при перетаскивании? Проверяйте в ходе перетаскивания насколько близко форма оказалась к краю экрана и в случае, если это расстояние меньше предельного - прижимайте ее принудительно. Контролировать это можно при получении сообщения WM_WINDOWPOSCHANGING. А рамка тут, по-моему, совсем ни при чем.

Вот, посмотрите ссылку, тут описаны сообщения окна:
http://www.cyberguru.ru/programming/...truct-msg.html

Вот форма, которая прилипает к правому краю экрана, если подвести ее ближе чем на DRAG_DELTA пикселей. Кроме того, она не выходит за правый край экрана.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure WndProc(var Msg: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

const
  DRAG_DELTA = 20;

procedure TForm1.WndProc(var Msg: TMessage);
var
  Data: PWindowPos;
begin
  if Msg.Msg = WM_WINDOWPOSCHANGING then begin
    Data := PWindowPos(Msg.LParam);

    if Data^.x + Data^.cx > Screen.Width then
      Data^.x := Screen.Width - Data^.cx;
    if Screen.Width - Data^.x - Data^.cx <= DRAG_DELTA then
      Data^.x := Screen.Width - Data^.cx;
  end;

  inherited;
end;

end.
Ответить с цитированием