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