亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Delphi > 正文

Delphi中的窗體移動(dòng)

2019-11-18 18:54:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
如果你在開(kāi)發(fā)圖形或多媒體應(yīng)用程序,你可能正在為如何不使用窗體的標(biāo)題欄而移動(dòng)窗體發(fā)愁。其實(shí)只需用鼠標(biāo)拖動(dòng)窗體的客戶區(qū)就可以了。

方法一
  以下是完成上述功能最普通的方法:在窗體的PRivate聲明部分加入以下過(guò)程聲明:

  procedure WMNCHitTest(var Msg:TWMNCHitTest);message WM_NCHITTEST;

  然后在implementation部分加入以下代碼:

procedure TForm1{或你定義的Form名}.WMNCHitTest(var Msg:TWMNCHitTest);
begin
DefaultHandler(Msg);
if Msg.Result = HTCLIENT then
Msg.Result:= HTCAPTION;
end;

  此方法中使當(dāng)鼠標(biāo)點(diǎn)擊窗體客戶區(qū)時(shí),令Windows認(rèn)為被點(diǎn)擊的是標(biāo)題欄。

方法二
  以下是另一個(gè)實(shí)現(xiàn)用鼠標(biāo)移動(dòng)普通窗體的方法。

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if (ssLeft in Shift) then begin
ReleaseCapture;
SendMessage(Form1.Handle,WM_SYSCOMMAND,SC_MOVE+1,0);
end;
end;

以上方法不完善之處
  當(dāng)把“拖動(dòng)窗口的過(guò)程中顯示其內(nèi)容”的選項(xiàng)取消時(shí),讓我們看看會(huì)發(fā)生什么。這是Windows窗口的一項(xiàng)設(shè)置,你可以在“開(kāi)始菜單-->設(shè)置-->文件夾選項(xiàng)-->查看-->高級(jí)設(shè)置”中找到該屬性。在Windows95中,你需要修改注冊(cè)表。當(dāng)此屬性被設(shè)為無(wú)效,拖動(dòng)窗體時(shí)窗體會(huì)變?yōu)橐粋€(gè)正方形輪廓線。也許你使用一個(gè)不規(guī)則窗體,但它仍然會(huì)顯示輪廓線。
  當(dāng)你想要讓你的窗體停靠在屏幕的邊緣(如:WinAmp,當(dāng)你拖動(dòng)窗體進(jìn)入屏幕頂部某一特定位置時(shí),窗體便緊靠在屏幕頂部),如果你使用以上第二種方法,在鼠標(biāo)按鈕放開(kāi)前,你將無(wú)法處理窗體位置,并無(wú)法處理??繂?wèn)題。
  下面我會(huì)用簡(jiǎn)單的方法解決兩個(gè)問(wèn)題:
  第一,無(wú)論設(shè)置為何,在拖動(dòng)窗體時(shí)都不顯示輪廓線;
  第二,移動(dòng)窗體時(shí)進(jìn)行位置檢測(cè),并在位置適當(dāng)時(shí)??吭谀骋惶囟ㄎ恢?。
  很多人也許已經(jīng)解決了這些問(wèn)題,但是也許下面的代碼對(duì)你會(huì)有幫助。

方法三
  以下代碼可以直接復(fù)制到Delphi中,前提是你將Form1存為uMain.pas,F(xiàn)orm2存為uDock.pas。用到的事件是:OnMouseDown,OnMouseMove,OnMouseUp,OnShow(Form1)。
  這是一個(gè)根據(jù)鼠標(biāo)的移動(dòng)移動(dòng)窗體的方法,包含兩個(gè)窗體,uMain和uDock(Form1和Form2)。Form2通過(guò)Form1打開(kāi),并可以??吭贔orm1的底部。??亢螅現(xiàn)orm2將隨Form1一起移動(dòng),直到你將Form2移開(kāi)。

Form1

unit uMain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormMouseDown(Sender:TObject; Button:TMouseButton;Shift:TShiftState;X,Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState;X,Y: Integer);
procedure FormMouseUp(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y: Integer);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
DocktoForm: Boolean;
{ Public declarations }
end;

var
Form1: TForm1;
CanMove, CanMoveX, CanMoveY: Boolean;
OldX, OldY: Integer;
F1X,F1Y,F2X,F2Y: integer;
WorkArea : TRect;

implementation

uses uDock;

{$R *.DFM}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
CanMoveX := true;
CanMoveY := true;
CanMove := true;
OldX := X;
OldY := Y;

if DocktoForm then
begin
F1X := Form1.Left;
F1Y := Form1.Top;
F2X := Form2.Left;
F2Y := Form2.Top;
end;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if (CanMove) then
begin
if CanMoveX then
Form1.Left := Form1.Left + (X - OldX);

if CanMoveY then
Form1.Top := Form1.Top + (Y - OldY);

//This section latches to the top
if (Form1.Top < WorkArea.Top + 10) and (Form1.Top > WorkArea.Top-10) then
begin
Form1.Top := WorkArea.Top;
if (Y-OldY > 10) or (Y-OldY < -10) then
CanMoveY := true
else
CanMoveY := False;
end;

//This section latches to the left side
if (Form1.Left < WorkArea.Left+10) and (Form1.Left > WoskArea.Left-10) then
begin
Form1.Left := WorkArea.Left;

if (X-OldX > 10) or (X-OldX < -10) then
CanMoveX := true
else
CanMoveX := False;
end;

//This section latches to the right side
if (Form1.Left > WorkArea.Right-Form1.Width-10) and (Form1.Left < WorkArea.Right-Form1.Width+10) then
begin

Form1.Left := WorkArea.Right-Form1.Width;

if (X-OldX > 10) or (X-OldX < -10) then
CanMoveX := true
else
CanMoveX := False;
end;

//This section latches to the TaskBar
if DocktoForm then
begin
if (Form1.Top > WorkArea.Bottom-Form1.Height-Form2.Height-10) and (Form1.Top < WorkArea.Bottom-Form1.Height-Form2.Height+10) then
begin
Form1.Top := WorkArea.Bottom-Form1.Height-Form2.Height;
if (Y-OldY > 10) or (Y-OldY < -10) then
CanMoveY := true
else
CanMoveY := False;
end;
end
else begin
if (Form1.Top > WorkArea.Bottom-Form1.Height-10) and (Form1.Top < WorkArea.Bottom-Form1.Height+10) then
begin
Form1.Top := WorkArea.Bottom-Form1.Height;
if (Y-OldY > 10) or (Y-OldY < -10) then
CanMoveY := true
else
CanMoveY := False;
end;
end;

if DocktoForm then
begin
Form2.Left := Form1.Left - (F1X-F2X);// + (X-OldX);
Form2.Top := Form1.Top+Form1.Height;
exit;
end;

//This section latches playlist in center of Form1
if (Form2.Left > Form1.Left + ((Form1.Width div 2)-(Form2.Width div 2))-10) and (Form2.Left < Form1.Left + ((Form1.Width div 2)-(Form2.Width div 2))+10) and
(Form2.Top > Form1.Top+Form1.Height-10) and (Form2.Top < Form1.Top+Form1.Height+10) then
begin
Form2.Left := Form1.Left + ((Form1.Width div 2)-(Form2.Width div 2));
DocktoForm := True;
F1X := Form1.Left;
F1Y := Form1.Top;
F2X := Form2.Left;
F2Y := Form2.Top;
end;

end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
CanMove := false;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
//Get Work Area Parameters
SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0 );
Form2.Show;
end;

end.


Form2

unit uDock;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm2 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
CanMove, CanMoveX, CanMoveY, DocktoForm: Boolean;
OldX, OldY: Integer;

implementation

uses uMain;

{$R *.DFM}

procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
CanMoveX := true;
CanMoveY := true;
CanMove := true;
OldX := X;
OldY := Y;
end;

procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if (CanMove) then
begin

if CanMoveX then
Form2.Left := Form2.Left + (X - OldX);
if CanMoveY then
Form2.Top := Form2.Top + (Y - OldY);

//This section latches to the top
if (Form2.Top < WorkArea.Top + 10) and (Form2.Top > WorkArea.Top-10) then
begin
Form2.Top := WorkArea.Top;
if (Y-OldY > 10) or (Y-OldY < -10) then
CanMoveY := true
else
CanMoveY := False;
end;

//This section latches to the left side
if (Form2.Left < WorkArea.Left+10) and (Form2.Left > WorkArea.Left-10) then
begin
Form2.Left := WorkArea.Left;

if (X-OldX > 10) or (X-OldX < -10) then
CanMoveX := true
else
CanMoveX := False;
end;

//This section latches to the right side
if (Form2.Left > WorkArea.Right-Form2.Width-10) and (Form2.Left < WorkArea.Right-Form2.Width+10) then
begin

Form2.Left := WorkArea.Right-Form2.Width;

if (X-OldX > 10) or (X-OldX < -10) then
CanMoveX := true
else
CanMoveX := False;
end;

//This section latches to the TaskBar
if (Form2.Top > WorkArea.Bottom-Form2.Height-10) and (Form2.Top < WorkArea.Bottom-Form2.Height+10) then
begin
Form2.Top := WorkArea.Bottom-Form2.Height;
if (Y-OldY > 10) or (Y-OldY < -10) then
CanMoveY := true
else
CanMoveY := False;
exit;
end;

//This section latches to the Player Bottom
if (Form2.Top > Form1.Top+Form1.Height-10) and (Form2.Top < Form1.Top+Form1.Height+10) and (Form2.Left > Form1.Left-Form2.Width) and (Form2.Left < Form1.Left + Form1.Width) then
begin
Form2.Top := Form1.Top+Form1.Height;
if (Y-OldY > 10) or (Y-OldY < -10) then begin
CanMoveY := true;
Form1.DockToForm := False;
end
else begin
CanMoveY := False;
Form1.DockToForm := True;
end;
end;

//This section latches playlist in center of Form1
if (Form2.Left > Form1.Left + ((Form1.Width div 2)-(Form2.Width div 2))-10) and (Form2.Left < Form1.Left + ((Form1.Width div 2)-(Form2.Width div 2))+10) and
(Form2.Top > Form1.Top+Form1.Height-10) and (Form2.Top < Form1.Top+Form1.Height+10) then
begin

Form2.Left := Form1.Left + ((Form1.Width div 2)-(Form2.Width div 2));

if (X-OldX > 10) or (X-OldX < -10) or (Y-OldY > 10) or (Y-OldY < -10) then
CanMoveX := true
else
CanMoveX := False;
end;

end;
end;

procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
CanMove := false;
end;

end.


  我希望以上內(nèi)容對(duì)那些正面臨類似內(nèi)容困擾的人有所幫助。


上一篇:在Delphi中編寫控件的基本方法(1)

下一篇:Delphi菜單如何做成word2000的可停靠樣子

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

免费观看一区二区三区毛片| 国产精品日韩在线观看| 成人午夜剧场视频网站| 欧美交换配乱吟粗大25p| 91久久久久久久一区二区| 国产精品免费观看视频| 国产成人自拍高清视频在线免费播放| 最近2019中文字幕在线高清| 国产精品久久久久久久久粉嫩av| 国产精自产拍久久久久久蜜| 播金莲一级淫片aaaaaaa| 在线午夜影院| 亚洲国产美女搞黄色| 99久久婷婷国产精品综合| 国产一区二区三区综合| 国产日韩欧美一区二区三区四区| 欧美成人精品一区| 精品国产青草久久久久96| 国产精品一区=区| 丝袜美腿亚洲一区二区图片| 国产又粗又猛又爽又| 日韩精品久久久久久久电影99爱| 亚洲一区二区三区成人在线视频精品| 亚洲伦理中文字幕| 成人欧美一区二区三区在线湿哒哒| 任我爽精品视频在线播放| av欧美精品.com| 自拍亚洲欧美老师丝袜| 丰满岳乱妇一区二区三区| 成人四虎影院| 精品国产美女在线| 99热在线观看免费| 国产精品嫩草影院在线看| 狠色狠色综合久久| 日韩一区二区在线看片| 久久人人爽人人爽人人片av高清| 深夜福利日韩在线看| 国产女精品视频网站免费| 色一情一乱一伦一区二区三欧美| 国产精品一区二区三区精品| av电影免费在线看| 五月婷婷激情五月| 色综合五月天导航| 免费在线观看黄色小视频| 日本午夜精品视频| 免费97视频在线精品国自产拍| 黄色av地址| 在线h片观看| 一区二区小说| 国产精品密蕾丝视频下载| 日本福利专区在线观看| 国产一区二区三区精彩视频| 中文字幕一区二区三区人妻| 国产一区二区三区黄网站| 欧美亚洲另类色图| 欧美色图另类小说| 国产高潮失禁喷水爽到抽搐| 久久精品视频7| 538国产精品一区二区免费视频| 一区二区三区四区毛片| 亚洲一二三区精品| 一区二区三区欧美在线观看| 91插插插插插插| 成人在线综合网| 欧美在线观看一二区| 国产剧情久久久| 成视频免费在线看| 日韩成人a**站| 国产手机精品在线| 欧美日韩你懂的| 国产美女诱惑一区二区| 国产精品三p一区二区| 伊人青青综合网站| 久久久久久欧美| 久久国产精品成人免费观看的软件| 欧美日韩国产大片| 一本一道精品欧美中文字幕| 日本少妇一区二区| 最近免费中文字幕中文高清百度| 亚洲一区不卡| 精品久久久久中文字幕小说| 91免费国产在线观看| 亚洲色图欧美日韩| 国产精品毛片久久| 国产成人精品a视频一区www| 美国毛片一区二区三区| 亚洲人视频在线观看| 亚洲精选91| 中文精品一区二区三区| 国产欧美日韩不卡免费| 欧美搞黄网站| 东北少妇不带套对白| 亚洲宅男天堂在线观看无病毒| 亚洲自拍小视频| 欧美久久久影院| 国产精品影视在线| 国产精品xxx视频| 久久99精品国产一区二区三区| 国产日产欧美一区二区| 922tv免费观看在线| 国产精品115| 免费在线观看日韩欧美| 欧美亚洲成人xxx| 成人综合久久| www.嫩草免费在线观看| 国产日韩第一页| 欧美少妇一区二区| 亚洲黄色av片| 黄色国产精品视频| www国产91| 日韩欧美在线不卡| 欧美人与动性xxxxx杂性| 国产熟妇久久777777| 国内精品2019| 久久亚洲精品一区二区| 欧美日韩一区二区三区在线看| 欧美 中文字幕| 国产高清视频色在线www| 久久精品电影网| 先锋影音av男人站| 日批视频网站| 91精品在线免费观看| 日韩久久精品| 国产精品久久久久久久久免费相片| 国产呦精品一区二区三区网站| 国产精品欧美一区二区三区奶水| 91精品少妇一区二区三区蜜桃臀| 女同性恋一区二区三区| 欧美韩国日本精品一区二区三区| 欧美高清视频一区二区三区在线观看| 国产精品一区视频| 欧美激情在线一区| 国产手机精品在线| 亚洲美女视频在线观看| 高跟丝袜一区二区三区| 国产特级毛片| 乳色吐息在线观看| 卡一精品卡二卡三网站乱码| 午夜啪啪免费视频| 成人在线免费观看一区| 精品一区二区在线看| 91成人短视频| 一本大道香蕉久在线播放29| 婷婷六月综合| 北岛玲一区二区三区四区| 亚洲手机在线观看| 色噜噜狠狠狠综合曰曰曰88av| 欧美大片日本大片免费观看| 婷婷五月综合缴情在线视频| 亚洲免费视频网站| 一区二区三区视频网站| 久久精品国产精品亚洲色婷婷| 成人午夜又粗又硬又大| 日韩黄色碟片| 97se亚洲国产综合自在线不卡| 久久亚洲国产精品日日av夜夜| 中文字幕一区二区免费| 中文字幕亚洲国产| 色婷婷综合久久久久中文一区二区| 日韩av免费观影| 色综合久久久久综合体| 成人免费黄色在线| 国产午夜精品久久久| 欧美1区3d| www日本高清| 欧美日韩精品在线一区| 91亚洲精品一区二区| 国产精品三区四区| 日本三级很黄试看120秒| 亚洲国产精品一| 爆操欧美美女| 99久久婷婷国产综合精品电影√| 成年人av电影| 久久uomeier| 怡红院在线播放| 一区二区三区四区视频在线观看| 国产精品美女主播在线观看纯欲| 日本蜜桃在线观看| 日本高清不卡在线| 日韩亚洲精品视频| 久久久久久久影院| 日韩在线视频在线| 久久久久久久久久电影| 裸体大乳女做爰69| 亚洲永久无码7777kkk| 久久久久久久电影一区| 破处女黄色一级片| 久久久久久91香蕉国产| 91亚洲精品在线| 无码国产精品久久一区免费| 青青青手机在线视频观看| 亚洲人视频在线| 中国一区二区视频| 欧美精品入口蜜桃| 最近2019中文字幕大全第二页| 欧美猛烈性xbxbxbxb| 国产大尺度在线观看| 亚洲男人天堂av在线| 亚洲精品乱码久久久久久蜜桃动漫| 草裙成人精品一区二区三区| 亚洲狠狠婷婷综合久久久| 亚洲成人网上| 欧美日韩91| 精品国产一区二区三区不卡在线| 牛牛影视一区二区三区免费看| jizz18日本| 欧美亚洲一级二级| 欧美最新另类人妖| 在线免费观看h视频| 日本久久高清视频| 国产精品无码99re| 亚洲精品欧美专区| 成人18夜夜网深夜福利网| 97久久中文字幕| 91丨九色丨国产丨porny| 亚洲韩日在线| 欧美三区视频| 欧美在线观看视频一区二区三区| 久久久久久久久久久久久国产精品| 亚洲色图综合久久| 一区二区激情小说| av影院午夜一区| 日本伊人午夜精品| 国产免费一区二区三区网站免费| 肉大捧一出免费观看网站在线播放| 欧美va亚洲va在线观看蝴蝶网| 久久久久久久久91| 国产精品嫩草99av在线| 色在线视频观看| 亚洲欧美成人精品| 久久免费精彩视频| 欧美爱爱视频网站| 在线视频第一页| 国产伦视频一区二区三区| 国产免费视频在线| 精品久久久久国产| 久久久久亚洲av成人网人人软件| 亚洲中午字幕| 国产igao激情在线入口| 一区二区三区四区在线免费观看| 国产无套内射又大又猛又粗又爽| 亚洲专区第一页| 日本高清成人vr专区| 国产成人精品自线拍| 我看黄色一级片| 狠狠色2019综合网| 136福利视频导航| 日韩欧美在线免费观看视频| 成人bbav| 精品国产一区二区三区久久久狼| 日韩精品久久久久久久| 日韩成人在线观看视频| 在线午夜精品| 欧美一区中文字幕| 国产免费高清视频| 日韩国产中文字幕| 69174成人网| 天天舔天天操天天干| 欧美偷窥清纯综合图区| 玖玖综合伊人| 99精品国产在热久久| 欧美精品videos另类日本| 视频国产一区二区| 久久免费精品视频在这里| 国产精品99精品无码视| 国产精品一区二区婷婷| 麻豆传媒视频在线| 91超碰caoporn97人人| 韩国三级hd中文字幕| 国产又粗又长又爽又黄的视频| 亚洲性日韩精品一区二区| 欧美日韩情趣电影| 9l视频自拍蝌蚪9l视频成人| 亚洲精品1区2区3区| www.99精品| 一区二区不卡视频在线观看| 天天干天天玩天天操| 波多野结衣av在线观看| 精品人妻大屁股白浆无码| 黄色网页在线免费看| 91精品国产毛片武则天| 国产69精品久久久久9| 亚州av日韩av| 中文字幕在线观看第一页| 免费日韩成人| 精品亚洲a∨| 成人黄色av片| 一区二区在线免费观看| 久久精彩视频| 亚洲欧美日韩中文播放| 国内精品小视频在线观看| 日韩精品视频免费播放| 99re6这里只有精品视频在线观看| 91香蕉视频网址| 青青久久av| 欧美亚洲国产一区二区三区| 欧美国产一区视频在线观看| 奇米影视第四狠狠777| 最新国产在线| 亚洲国产精品久久不卡毛片| 亚洲一本大道在线| 国产毛片视频| 男人天堂网页| 日韩在线播放视频| 亚洲一区二区色| 深夜福利一区二区| 亚洲欧美日韩一区在线观看| 国产又爽又黄又嫩又猛又粗| 成人3d动漫在线观看| 黄av在线播放| 分分操这里只有精品| 搞黄在线观看| 国产精品免费91| 51国产成人精品午夜福中文下载| 在线观看av免费| 97碰碰碰免费色视频| 岛国av一区| 自拍电影在线观看| 亚洲国产精品综合久久久| 久久久久久国产精品无码| 亚洲bt天天射| 91视频播放| 丝袜足脚交91精品| 中文字幕日韩一区二区三区不卡| 成年免费视频| 92精品国产成人观看免费| 精品久久久免费视频| 国产真人做爰毛片视频直播|