我想和大家讨论一下关于拖放问题,类似于蚂蚁一样,但要比它复杂。
我写了一个拖放窗口下面是原代码
private
    { Private declarations }
    //创建拖放窗口
    procedure Createparams(Var Params:TCreateParams);override;
   //拖放窗口的移动
    procedure WMNCHitTest( var Msg : TWMNCHitTest );message wm_NCHitTest;
………………
//在窗口上按下鼠标移动窗口
procedure TfrmDarg.WMNCHitTest( var Msg : TWMNCHitTest );
begin
  if  GetAsyncKeyState(VK_LButton) < 0 then
     Msg.Result := HTCaption
  else
     Msg.Result := HTCLient;
end;
//创建窗口
procedure TfrmDarg.Createparams(var Params:TCreateParams);
begin
  Inherited CreateParams(Params);
  With Params do
  begin
    //Width:=40;
    //Height:=40;
    Style :=WS_CAPTION;
    Style :=WS_POPUP;
    EXStyle:=ExStyle or WS_EX_TOPMOST;// OR WS_EX_ACCEPTFILES or WS_DLGFRAME or WM_NCHITTEST;
    WndParent:=GetDeskTopWindow();
  end;
end;
这是窗口代码,现在让我们来讨论一下拖放的问题吧!

解决方案 »

  1.   

    拖窗体只需:
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
            ReleaseCapture;
            Perform(WM_SYSCOMMAND, $F009, 0);
    end;
      

  2.   

    我知道,我现在的问题是不是窗口
    而是拖放,比如文本、文件等
    我写了另外一段代码,我们付伦吧
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ShellApi, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure CreateParams(var Params:TCreateParams);override;
      private
        { Private declarations }
        procedure WMDropFiles(var Msg:TWMDropFiles);message WM_DROPFILES;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
      inherited CreateParams(Params);
      Params.ExStyle:=Params.ExStyle or WS_EX_ACCEPTFILES;
    end;procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
    var
      FCount:integer;
      i:integer;
      P:pchar;
    begin
      GetMem(P,MAX_PATH);
      try
        FCount:=DragQueryFile(Msg.Drop,DWORD(-1),nil,0);
        for i:=0 to FCount-1 do
        begin
          DragQueryFile(Msg.Drop,i,P,MAX_PATH);
          Memo1.Lines.Add(StrPas(P));
        end;
        DragFinish(Msg.Drop);
      finally
        FreeMem(P);
      end;
      inherited;
    end;end.
      

  3.   

    {
    //本函数作用和DragAcceptFiles(Handle, true);
    //相同所以注释
    procedure TForm_Main.CreateParams(var Params: TCreateParams);
    begin
      inherited CreateParams(Params);
      Params.ExStyle:=Params.ExStyle or WS_EX_ACCEPTFILES;
    end;}formCreate事件里调用就可以了,简单点,只是怎样支持拖放文本,比如Web链接?