乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      delphi技巧

       frie 2005-08-09

      delphi技巧——移動(dòng)無(wú)標(biāo)題窗口

      關(guān)鍵詞:移動(dòng),消息,無(wú)標(biāo)題

                            作者:朱能文

         我們都知道windows是通過(guò)標(biāo)題欄來(lái)移動(dòng)窗體的,當(dāng)我們?cè)跇?biāo)題欄上按下鼠標(biāo)左鍵時(shí),windows將發(fā)送wM_NCHitTest消息,來(lái)告訴系統(tǒng)要移動(dòng)窗體。但我們?cè)趯?shí)際編程時(shí),有時(shí)為了界面的需要或特殊的要求,窗體沒(méi)有標(biāo)題欄,我們必須通過(guò)程序來(lái)移動(dòng)窗體。下面我將介紹幾種移動(dòng)窗體的方法和技巧。

         方法一:根據(jù)鼠標(biāo)按下和移動(dòng)時(shí)的位置差,來(lái)計(jì)算窗體的位置。需要定義的變量如下:

        var

         Opos, Cpos: Tpoint; 

         Flag: boolean = false;

         處理OnMouseDown事件代碼:

         Flag := true;

         Opos.X := X;

         Opos.Y := Y;

         處理OnMouseMove事件代碼:

         if Flag then

          begin

              Cpos.X := X;

              Cpos.y := Y;

              Left := Left + Cpos.X - Opos.X;

              Top := Top + Cpos.Y - Opos.Y;

          end;

         處理OnMouseMove事件代碼:

         Flag := false;

         方法二:用戶自定義消息,攔截“wM_NCHitTest”消息,將消息值“htclient”轉(zhuǎn)為“htcaption”。實(shí)現(xiàn)如下:

         先定義一消息常量:const WM_MyTest = WM_User+200;

         在private部分聲明過(guò)程:

         procedure MoveClient(var message: Tmessage);  message wM_NCHitTest;

         過(guò)程的實(shí)現(xiàn):

           inHerited;//繼承,窗體可以繼續(xù)處理以后的事件

           if Message.Result=htclient then

            Message.Result := htcaption;

          方法三:直接向窗體發(fā)送一條“wm_SysCommand”消息,需要使用未歸檔的“sc_DragMove”標(biāo)志,定義如下:

         const sc_DragMove = $f012;

         我們只能向TWinControl派生組件發(fā)送該消息,而且只能響應(yīng)鼠標(biāo)按下事件,因?yàn)橄到y(tǒng)會(huì)在此時(shí)捕獲鼠標(biāo)(當(dāng)釋放鼠標(biāo)鍵時(shí),拖動(dòng)操作是沒(méi)有意義的)。在窗體的OnMouseDown事件處理代碼:

         ReleaseCapture; //釋放鼠標(biāo)的捕獲狀態(tài);

         (Sender as TWinControl).PerForm(wm_SysCommand,sc_DragMove,0);//向窗體發(fā)送移動(dòng)消息;

         上面我提供了三種移動(dòng)無(wú)標(biāo)題欄窗體的方法,方法一比較容易理解,且不需要理解windows消息處理機(jī)制,但此方法需要對(duì)窗體的鼠標(biāo)事件處理太多,顯得不夠簡(jiǎn)潔。方法二通過(guò)消息轉(zhuǎn)換,這種方法比較容易實(shí)現(xiàn),但有一個(gè)缺點(diǎn),窗體將不再響應(yīng)鼠標(biāo)其他消息,如果窗體上有鼠標(biāo)右鍵處理,那么右鍵將得不到響應(yīng)。方法三是最好的一種方法,通過(guò)定義sc_DragMove消息,注意sc_DragMove的值必須是$f012或$f011,通過(guò)PerForm方法發(fā)送sc_DragMove消息,這種方法窗體還可以處理其他鼠標(biāo)事件,而不象方法二,所以我建議大家可以用方法三來(lái)移動(dòng)無(wú)標(biāo)題的窗體比較好。(以上幾種方法我都在delphi6.0+windows2k上通過(guò))。


        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多