使用API,我的主页有VB的程序:
http://www.applevb.com/sourcecode/dockbarapp.zip

解决方案 »

  1.   

    vb中我会。delphi我刚上手帮不了你了。
      

  2.   


    一点提示:
    首先要知道屏幕的边的位置:winapi GetWorkArea
    接下来可以在OnMove事件中或者用个定时器判断离那条边近了。
      

  3.   

    判断窗体在屏幕的坐标
    form1.align:=albottom;
                 alleft;
                 alright;
                 altop;
                  
      

  4.   

    给你举个例子:拦截WM_MOVE消息type
      TForm1 = class(TForm)
      private
        procedure WMMOVE(var Msg: TMessage); message WM_MOVE;
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.DFM}
    { TForm1 }
    procedure TForm1.WMMOVE(var Msg: TMessage);
    begin
      Inherited;
      //在这里扩充你的程序
      if (Left < 10) and (Top < 10) and 
         (Left <> 0) and (Top <> 0) then // 设定移动到左上角 10 点范围内时贴到边上去
      begin
        Left := 0;
        Top := 0;
        Msg.Result := 0;
      end;
    end;
    end.
      

  5.   

    to javis(蓝枫):
    这种方法确实可行,但把窗体向外拖时闪烁的厉害。
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
      TForm1 = class(TForm)
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
     MPos:TPoint;
    implementation{$R *.DFM}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      MPos.X := X;
    MPos.Y := Y;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      var i:integer;
    begin
    if ssLeft in Shift then
      begin
       i:=50;
       if  (Form1.Left - (MPos.X-X))>i then
           Form1.Left := Form1.Left - (MPos.X-X)
        else  Form1.Left :=0;    if  (Form1.Top - (MPos.Y-Y))>i then
           Form1.Top := Form1.Top - (MPos.Y-Y)
        else  Form1.Top := 0;  end;end;end.