全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1829
推到 Plurk!
推到 Facebook!

請教有關快捷鍵的托出吸附功能?

尚未結案
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-13 18:44:46 IP:61.220.xxx.xxx 未訂閱
BCB編輯程式介面中,程式編輯器,左方視窗可以托出,也可以吸附的功能!! 以及功能列上的快捷鍵可以托出及吸附. 如果要做到幾乎一樣.請問能提供語法或方式嗎? 站上蠻多都是Delphi的語法及檔案. 但BCB無法開啟該檔.
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-13 22:21:47 IP:59.115.xxx.xxx 未訂閱
pireer 您好:    BCB 的許多元件都有提供 DOCK 功能,您可以做個簡單的範例當作瞭解這項功能的起頭,請按下列方式進行測試: 1. 建立一個新專案。 2. 拉兩個 Panel 元件到 Form 上,分別設定 Align 為 alLeft 及 alRight,讓這兩個 Panel 分別貼在 Form 的左右兩側。 3. 設定前述那兩個 Panel 的 DockSite 屬性為 true。 4. 拉一個 ListBox 元件到 Form 上,並設定其 DragKind 屬性為 dkDock,然後接著再將它的 DragMode 屬性設為 dmAutomatic。 5. 編譯程式並執行它。 6. 在 ListBox 元件上按下滑鼠左鍵不放,輪流拖動 ListBox 到不同的 Panel 位置處,看看是否會有 Docking 的動作? 當您能夠正確的執行前述的範例程式後,您大概就會對 DOCK 的運作方式有個初淺的概念了,您可以透過 Help 的說明,以及到網路上找一些相關的資訊,來對那幾個相關屬性與事件做更進一步的瞭解。 7 天天敲鍵盤 v 時時按滑鼠 8
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-14 09:46:50 IP:61.220.xxx.xxx 未訂閱
RedSnow兄: 您的教學真的是蠻清楚的..在請教一下 如果我程式一RUN就要像下圖1的地方.在ListBox1上面有出現關閉按鈕? 當ListBox1移出去時.要讓Panel1隱藏.如圖2紅色部分? 當ListBox1移回去時.要像圖3一樣?     發表人 - pireer 於 2005/09/14 09:47:35
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-14 15:28:36 IP:61.230.xxx.xxx 未訂閱
pireer 您好:
引言:如果我程式一RUN就要像下圖1的地方.在ListBox1上面有出現關閉按鈕? 當ListBox1移出去時.要讓Panel1隱藏.如圖2紅色部分? 當ListBox1移回去時.要像圖3一樣?
回覆以下資訊供您參考:
  1. 您可以先將 ListBox1 設在 Panel1 上面,並將 ListBox1 的 Align 屬性設為 alClient,或者是經由程式碼來設定 (請見後附範例)。
  2. 在兩個 Panel 元件的 OnExit 或 UnDock 事件中設定 Panel 的 Width 為 0 或將 AutoSize 屬性設為 true 都可以在 UnDock 後將 DockSite 隱藏起來。
  3. 透過 DockSite (本例中的 Panel 元件) 的 OnGetSiteInfo 與 OnDockOver 事件可以偵測並繪製準備 Dock 的方框區域。
  4. 給您一個範例如下,程式稍長了一點點,因此偷個懶不對所有敘述都加上註解,如果對某段程式碼有疑問的話,再另外討論好了: int PWIDTH = 120; // ListBox1 崁入 DockSite 後的使用寬度 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // 將 ListBox1 起始位置崁在 Panel2 內 Panel2->AutoSize = false; ListBox1->Dock(Panel2, TRect(0, 0, PWIDTH, Panel2->ClientHeight)); } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel1GetSiteInfo(TObject *Sender, TControl *DockClient, TRect &InfluenceRect, TPoint &MousePos, bool &CanDock) { TWinControl *Docksite = reinterpret_cast (Sender); if (Docksite->DockClientCount < 1) { TPoint p = Docksite->Parent->ClientToScreen(TPoint(0,0)); InfluenceRect = TRect(p.x, p.y, (p.x PWIDTH), (p.y Docksite->Parent->ClientHeight)); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel1DockDrop(TObject *Sender, TDragDockObject *Source, int X, int Y) { TPanel *Docksite = reinterpret_cast (Sender); Docksite->AutoSize = false; Docksite->Width = PWIDTH; Docksite->Parent->Realign(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel1UnDock(TObject *Sender, TControl *Client, TWinControl *NewTarget, bool &Allow) { TPanel *DockSite = reinterpret_cast (Sender); if (DockSite->DockClientCount == 1) { DockSite->AutoSize = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel1DockOver(TObject *Sender, TDragDockObject *Source, int X, int Y, TDragState State, bool &Accept) { TWinControl *Docksite = reinterpret_cast (Sender); if (Docksite->DockClientCount < 1) { TPoint p = Docksite->Parent->ClientToScreen(TPoint(0,0)); Source->DockRect = TRect(p.x, p.y, (p.x PWIDTH), (p.y Docksite->Parent->ClientHeight)); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel2GetSiteInfo(TObject *Sender, TControl *DockClient, TRect &InfluenceRect, TPoint &MousePos, bool &CanDock) { TWinControl *Docksite = reinterpret_cast (Sender); if (Docksite->DockClientCount < 1) { TPoint p = Docksite->ClientToScreen(TPoint(0,0)); InfluenceRect = TRect((p.x - PWIDTH), p.y, p.x, (p.y Docksite->ClientHeight)); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel2DockOver(TObject *Sender, TDragDockObject *Source, int X, int Y, TDragState State, bool &Accept) { if (Panel2->DockClientCount < 1) { TPoint p = Panel2->ClientToScreen(TPoint(0,0)); Source->DockRect = TRect((p.x - PWIDTH), p.y, p.x, (p.y Panel2->ClientHeight)); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel2DockDrop(TObject *Sender, TDragDockObject *Source, int X, int Y) { TPanel *Docksite = reinterpret_cast (Sender); Docksite->AutoSize = false; Docksite->Width = PWIDTH; Docksite->Parent->Realign(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel2UnDock(TObject *Sender, TControl *Client, TWinControl *NewTarget, bool &Allow) { TPanel *DockSite = reinterpret_cast (Sender); if (DockSite->DockClientCount == 1) { DockSite->AutoSize = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::ListBox1EndDock(TObject *Sender, TObject *Target, int X, int Y) { if (Target != Panel1 && Panel1->DockClientCount < 1) { Panel1->Refresh(); } if (Target != Panel2 && Panel2->DockClientCount < 1) { Panel2->Refresh(); } } //---------------------------------------------------------------------------
7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/09/14 15:36:59
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-14 15:53:05 IP:61.220.xxx.xxx 未訂閱
RedSnow兄: 依照您的方法以解決我的問題. SourceCode部份我先研究您的寫法. 如果有不懂的地方在傳訊給您.. 感謝您無私的指導..
系統時間:2024-04-27 22:56:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!