<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      用Delphi完成無邊界窗體的移動

      [摘要]在用Delphi制作Windows程序的窗體時,窗體的邊界有四種選擇:對話框式(bsDialog), 單邊固定式(bsSingle),雙邊可變式(bsSizeable),無邊界式(bsNone)。當...
      在用Delphi制作Windows程序的窗體時,窗體的邊界有四種選擇:對話框式(bsDialog),
      單邊固定式(bsSingle),雙邊可變式(bsSizeable),無邊界式(bsNone)。當設置為
      bsNone時,窗體也就沒有標題條,很顯然,程序運行以后就無法移動窗體了。事實上,無邊界
      窗體是很有用的,例如,象Word里面的浮動式工具箱其實就是無邊界窗體,它可以大大節約屏
      幕空間。那么,如何用Delphi實現這個功能呢?顯然,這需要修改Windows的內部消息,也就
      是說,需要把“MouseDownonForm”這個消息改為“MouseDownonCaption”,這其中有三個關鍵:
      捕捉MouseDown消息、判斷光標位置、發送MouseDown消息。如果光標在窗體中,則發送
      MouseDownonCaption消息。

        在Delphi的對象巡檢器中列出的所有事件是不能捕捉到Windows消息的,因為這些都是已
      經發出的消息,無法修改了。捕捉Windows消息有兩種辦法:一個就是增加一個消息處理句
      柄,直接處理Windows消息;另一個是對消息進行過濾,濾出所需消息。第二個辦法比較常用,
      適用于各種情況,下面就是移動無邊界窗體程序片斷,加注釋部分是手動加入的:

        unitUnit1;

       。

        type

        TForm1Κclass(TForm)

        procedureFormCreate(Sender:TObject);

       。

        public

       。昝飨⑦^濾過程}

        procedureAppMessage(varMsg:TMsg;varHandled
      :Boolean);

       。

        implementation

        procedureTForm1.FormCreate(Sender:TObject)
      ;

        begin

       。蹲较ⅲ簩⒊绦虻氖盏较⑹录c消息過濾過程
      關聯起來}

        Application.OnMessage:ΚAppMessage;

        end;

        procedureTForm1.AppMessage(varMsg:TMsg;var
      Handled:Boolean);

        begin

       。绻髽俗箧I按下的話}

        ifMsg.messageΚWM—LButtonDownthen

        begin

       。袛喙鈽耸欠裨谟脩艄ぷ鲄^內}

        ifDefWindowProc(Handle,WM—NCHitTest,0,Get
      MessagePos)ΚHTClientthen

        begin

       。l出鼠標在用戶標題欄內被按下的消息}

        SendMessage(Handle,WM—NCLButtonDown,

        HTCaption,GetMessagePos);

        Handled:Κtrue;{消息處理完畢,窗體不再接受M
      ouseDown及Click事件,如果為false,程序的運行稍微有
      些不正常。}

        end;

        end;

        end;

        end.

        程序在Delphi1.0、中文Windows3.2下運行通過。


      日韩精品一区二区三区高清