Delphi7 視窗停靠效果

2021-04-16 19:27:46 字數 3369 閱讀 8097

實現目的:

實現mainform

中對dockform

的停靠,相當於vc中的工具欄停靠。

結果先讓大家看看:

(靠!看不到!)

說明:在開始停靠的時候我們先了解一下下停靠在

delphi

7,在delphi7

中原來就有對

form

等有依靠功能,分別是以下屬性:屬性值

說明drawmode

dmautomatic

是否是拖放

drawkind

dkdock

拖拽,停靠方法

docksite

true

是否允許被停靠

了解了以上屬性我們再來了解一下下停靠的幾個過程:1.

ondockover(sender: tobject;

source: tdragdockobject;

x, y: integer;

state: tdragstate; var accept: boolean);//

當你把要停放的物件劃過停放區時會有的效果

你一定希望會有乙個框可以讓你看到停放後會有什麼效果吧2.

ondockdrop(sender: tobject; source: tdragdockobject;

x, y: integer);//

當你放手讓你要把停放的東西停放下來時也就是最後時出現的效果

你一定會希望他可以停放出乙個你希望的效果吧 3.

ongetsiteinfo(sender: tobject; dockclient: tcontrol;

var influencerect: trect; mousepos: tpoint; var candock: boolean);//

這是在移動時觸發的 4.

onstartdock(sender: tobject;

var dragobject: tdragdockobject);//

開始放工具欄時你希望出現的效果 5.

onenddock(sender, target: tobject; x, y: integer);//

放好工具欄時你希望出現的效果 6.

onundock(sender: tobject; client: tcontrol;

newtarget: twincontrol; var allow: boolean);//

當你移走你的工具欄時希望有的效果

在以上上面的幾個函式最重要的是

ondockover,ondockdrop

和onundock

這是必要的東西的幾個過程

ondockover(sender: tobject;

source: tdragdockobject;//

這是你要停靠的資訊資訊,其停靠效果全由他來定

x, y: integer; //

這是滑鼠所在的地方

state: tdragstate;//

這裡可以判斷你當前的動作是進入還是移出

var accept: boolean);//accept

這是為false

就是不可以停靠,為

true

就是可以停靠。

介紹上了面大家應該還是不很理解吧!那我在進一步解說我說的程式,你可以在我上傳的**中找到你想要的程式(「停靠視窗」)。

我在這裡說明我是如何處理的:

第一步:在

mainform

(我的mainform

就是你們的

form1

)中加入乙個

leftdockpanel(

是你們的

panel1)

再加入乙個

leftsplitter

(是你們的

splitter

)除了mainform

外其他的

align

都設定為

alleft

全是靠左邊的,

leftdockpanel

的width

設定為0

不要讓別人看到他,我們主要是讓

dockform(

這是你們的

form2)

放置在leftdockpanel

上,做到乙個假的停靠效果。對了屬性還沒有設定把

leftdockpanel

的docksite

設定為true

讓別人可以依靠。

dockform

的drawkind

設定為dkdock,

還有drawmode

設定為dmautomatic

。好累完事了第一步。

第二步:現在是**啦

procedure tmainform.leftdockpaneldockover(sender: tobject;

source: tdragdockobject; x, y: integer; state: tdragstate;

var accept: boolean);

vararect:trect;

begin

accept:=true;

arect.topleft:=leftdockpanel.clienttoscreen(point(0,0));

arect.bottomright:=leftdockpanel.clienttoscreen(

point(self.clientwidth div 3, leftdockpanel.height));

source.dockrect:=arect;

end;

procedure tmainform.leftdockpaneldockdrop(sender: tobject;

source: tdragdockobject; x, y: integer);

begin

leftdockpanel.width:=clientwidth div 3;

leftsplitter.left:=leftdockpanel.width+leftsplitter.width;

end;

以上**是在

leftdockpanel

中的event

找到的dockover

和dockdrop

兩個方法。加上以上**試一試,

mainform

和dockform

我就不介紹怎麼動態建立了在我上傳的**裡面有!

第三步:不是還有很

onundock

沒做麼!?你自己看著辦吧!我的**裡面有!嘻嘻!

在這裡感謝

Delphi7遠端除錯

自己的開發機器稱為主機,執行程式的機器稱為目標機 一 在主機編譯執行程式 1 project options linker中的exe and dll options選項組中的include remote debug symbols打上勾,這樣就可以生成rsm為副檔名的檔案,該檔名稱於你的專案同名。2...

Delphi7 動態陣列

初學delphi,感覺.這感覺就是寫 太費勁了,已經習慣了c 那種信手拈來,不能說pascal不適應只能說還是費勁,可能是d7太老了,也可能是我還沒有上道兒,就這麼著吧,下面簡單的寫倆函式作為參考,修改修改可以當c 中的list 用arr array of string procedure add ...

Delphi7的IDE概述 一

ideograph margin 0cm 10.8pt 0pt 13.2pt text align justify mso para margin top 0cm mso para margin right 9gd mso para margin bottom 0001pt mso para mar...