您说的“Menu”是指什么?delphi的控件基本都可以拖动。

解决方案 »

  1.   

    可以用TOOLBAR的哪个TOOLBUTTON来达到目的,他的MenuItem和对应的Menu里的按纽关联,在把Menu的AutoMerge改为TRUE就可以了,把TOOLBAR的对齐方式改为Alnone就可以了
      

  2.   

    看看下文对你有没有帮助:
    用DELPHI实现窗体标题栏上的按钮  摘要:要在标题栏放置按钮(非系统按钮),用普通的方法是无法实现的,因为我们无法将DELPHI提供的按钮控件放置到标题栏上。DELPHI提供了一个很好用的函数DrawButtonFace,它允许用户在任何画布(canvas)上画出一个按钮,而标题栏也是画布,因此在标题栏上画出一个按钮也就不是很困难的事了,本文给出一个
    示例,供感兴趣的朋友参考。  曾见到过一个软件在标题栏放置了按钮(非系统按钮),那么这种技术如何实现的呢?用普通的方法是无法实现的,因为我们无法将DELPHI提供的按钮控件放置到标题栏上。DELPHI提供了一个很好用的函数DrawButtonFace,它允许用户在任何画布(canvas)上画出一个按钮,而标题栏也是画布,因此在标题栏上画出一个按钮也就不是很困难的事了,本文给出一个示例,供感兴趣的朋友参考。  要在标题栏上画按钮,还有一些事情需要考虑,我们必须考虑各种消息事件,比如窗体从后台激活到前台时、窗体的Paint消息等,遇到这些消息就必须重画按钮,否则按钮将会消失,但这些不会对系统造成过多的负担。为方便大家使用,给出完整的源程序并给出注释。unit Unit1;interfaceuses
    Windows, Buttons, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
    TForm1 = class(TForm)
    procedure FormResize(Sender: TObject);
    private
    CaptionBtn : TRect;
    procedure DrawCaptButton;
    procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPaint;
    procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE;
    procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT;
    procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;
    procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
    public
    { Public declarations }
    end;var
    Form1: TForm1;implementationconst
    htCaptionBtn = htSizeLast + 1;
    {$R *.DFM}procedure TForm1.DrawCaptButton;
    var
    xFrame,
    yFrame,
    xSize,
    ySize : Integer;
    R : TRect;
    begin
    //获取窗体的边框尺寸
    xFrame := GetSystemMetrics(SM_CXFRAME);
    yFrame := GetSystemMetrics(SM_CYFRAME);//获取标题按钮的尺寸
    xSize := GetSystemMetrics(SM_CXSIZE);
    ySize := GetSystemMetrics(SM_CYSIZE);//定义一个新的标题按钮(非系统按钮)
    CaptionBtn := Bounds(Width - xFrame - 5*xSize + 2,
    yFrame + 2, xSize + 2, ySize - 4);
    //获取窗体画布的句柄
    Canvas.Handle := GetWindowDC(Self.Handle); //定义画布的属性
    Canvas.Font.Name := '宋体';
    Canvas.Font.Color := clBlue;
    Canvas.Pen.Color := clYellow;
    Canvas.Brush.Color := clBtnFace;try
    //画按钮 
    DrawButtonFace(Canvas, CaptionBtn, 1, bsAutoDetect, False, False, False);
    //在按钮中定义一个范围用来输出按钮标题信息
    R := Bounds(Width - xFrame - 5 * xSize + 2,
    yFrame + 3, xSize +10, ySize - 7);
    with CaptionBtn do
    Canvas.TextRect(R, R.Left + 2, R.Top , '你好');
    finally
    ReleaseDC(Self.Handle, Canvas.Handle);
    Canvas.Handle := 0;
    end;
    end;
    //接收到Paint消息时重画按钮
    procedure TForm1.WMNCPaint(var Msg : TWMNCPaint);
    begin
    inherited;
    DrawCaptButton;
    end;
    //激活时重画
    procedure TForm1.WMNCActivate(var Msg : TWMNCActivate);
    begin
    inherited;
    DrawCaptButton;
    end;
    //接收到WM_SETTEXT消息时重画按钮
    procedure TForm1.WMSetText(var Msg : TWMSetText);
    begin
    inherited;
    DrawCaptButton;
    end;
    //捕获鼠标消息,检查是否按了按钮
    procedure TForm1.WMNCHitTest(var Msg : TWMNCHitTest);
    begin
    inherited;
    with Msg do
    if PtInRect(CaptionBtn, Point(XPos - Left, YPos - Top)) then
    Result := htCaptionBtn;
    end;
    //鼠标按下的相应操作,用户可添加各种代码,这里只显示一个对话框作例子
    procedure TForm1.WMNCLButtonDown(var Msg : TWMNCLButtonDown);
    begin
    inherited;
    if (Msg.HitTest = htCaptionBtn) then
    ShowMessage('你好,你按的是标题栏上的按钮!');
    end;//窗体改变大小时强制重画标题栏
    procedure TForm1.FormResize(Sender: TObject);
    begin
    //Force a redraw of caption bar if form is resized
    Perform(WM_NCACTIVATE, Word(Active), 0);
    end;end.  用户可根据需要自己定义按钮的大小及用来输出按钮标题的范围。启动DELPHI,
    用上面的代码替换缺省窗体FORM1中的UNIT1中的代码,运行就可以得到图1的界面,按一下“你好”按钮,看有没有反应。
      

  3.   

    用toolbar加上menu就可以做呀
    toolbar可以放在form的任何位置(标题栏除外)