RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
pireer 您好: 引言:如果我程式一RUN就要像下圖1的地方.在ListBox1上面有出現關閉按鈕?
當ListBox1移出去時.要讓Panel1隱藏.如圖2紅色部分?
當ListBox1移回去時.要像圖3一樣? 回覆以下資訊供您參考:- 您可以先將 ListBox1 設在 Panel1 上面,並將 ListBox1 的 Align 屬性設為 alClient,或者是經由程式碼來設定 (請見後附範例)。
- 在兩個 Panel 元件的 OnExit 或 UnDock 事件中設定 Panel 的 Width 為 0 或將 AutoSize 屬性設為 true 都可以在 UnDock 後將 DockSite 隱藏起來。
- 透過 DockSite (本例中的 Panel 元件) 的 OnGetSiteInfo 與 OnDockOver 事件可以偵測並繪製準備 Dock 的方框區域。
- 給您一個範例如下,程式稍長了一點點,因此偷個懶不對所有敘述都加上註解,如果對某段程式碼有疑問的話,再另外討論好了:
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
|