//创建始终浮在所有窗口的最上面的窗口
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  private
    { Private declarations }
    procedure WMNCHITTEST(var Message:TMessage);Message WM_NCHITTEST;
//.......{$R *.DFM}
procedure TForm1.WMNCHITTEST(var Message:TMessage);
begin
 inherited;
 if Message.Result = htClient then
  Message.Result := htCaption;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 inherited;
 Params.Style := WS_POPUP or WS_DLGFRAME;
 Params.ExStyle := WS_EX_PALETTEWINDOW;
end;
//至于拖放处理,去下载个控件,http://vcl.vclxx.com/DELPHI/D32FREE/DRAGDROP.EXE,

解决方案 »

  1.   

    hehe, 直接设置为“总在最前”不就行了?
    setwindowpos(form1.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE)
    取消:
    setwindowpos(form1.Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE)
      

  2.   

    这个问题我已回答过我次,好像应该这样做:
    Public
      procedure Createparams(Var Params:TCreateParams);override;
    ...procedure TFormDrop.Createparams(var Params:TCreateParams);
    begin
      Inherited CreateParams(Params);
      With Params do
      begin
       EXStyle:=ExStyle or WS_EX_TOPMOST OR WS_EX_ACCEPTFILES or WS_DLGFRAME
       wndParnet:=GetDesktopWindow;  //关键一行,用SetParent都不行!!
      end;
    end;
    如果要移动窗体,可参照以上的办法,处理WM_NCHITTEST消息。