史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2008-02-25, 12:39 PM   #1
不知道
長老會員
榮譽勳章
UID - 548
在線等級: 級別:59 | 在線時長:3787小時 | 升級還需:53小時級別:59 | 在線時長:3787小時 | 升級還需:53小時級別:59 | 在線時長:3787小時 | 升級還需:53小時級別:59 | 在線時長:3787小時 | 升級還需:53小時級別:59 | 在線時長:3787小時 | 升級還需:53小時級別:59 | 在線時長:3787小時 | 升級還需:53小時級別:59 | 在線時長:3787小時 | 升級還需:53小時級別:59 | 在線時長:3787小時 | 升級還需:53小時級別:59 | 在線時長:3787小時 | 升級還需:53小時
註冊日期: 2002-12-06
住址: 桃園
文章: 8606
現金: 1491 金幣
資產: 1183995 金幣
預設 教學 - 使用BCB 2006的DockTabSet1元件,設計滑動效果



小弟是以C++ Builder 2006寫的
這兩天才研究出來,所以粗略的跟大家分享心得
參考資料http://dn.codegear.com/article/33446

首先開一個新專案
放入TDockTabSet(DockTabSet1)和TPanel(Panel1)元件
TDockTabSet(DockTabSet1)元件的屬性如下:
語法:
    ShrinkToFit = True
    Style = tsModernPopout
    TabPosition = tpRight
    DestinationDockSite = Panel1
TPanel(Panel1)元件的屬性如下:
語法:
    Align = alLeft
    DockSite = True
    Width = 0
再加入TSplitter(Splitter1)和TMemo(Memo1)元件
TMemo(Memo1)元件的屬性如下:
語法:
    Align = alClient
再新增一個表單TForm2(Form2),屬性如下:
語法:
  BorderStyle = bsSizeToolWin
  DockSite = True
  DragKind = dkDock
  DragMode = dmAutomatic
  OldCreateOrder = False
接著將Unit2.h檔案Include到Unit1.cpp
加入Form1的Show事件,程式碼如下:
語法:
	TForm2 *FD;
	int iFormCount = Screen->FormCount;

	// Clear existing forms (if they exist)
	for (int i=0; i < iFormCount; i++) {
		FD = dynamic_cast<TForm2 *>(Screen->Forms[i]);
		if (FD != NULL) {
			FD->Close();  // Forms are set to auto-free on close
		}
	}

	// Create New Forms

	// You can use either method; I just show both to show both.  ;-)
	// Static Method
	FD = TForm2::CreateDockForm(clBlue);
	FD->ManualDock(Panel1);

	// Constructor Method
	FD = new TForm2(this, clGreen);
	FD->Show();
	FD->ManualDock(Panel1, NULL, alTop);

	// Constructor Method
	FD = new TForm2(this, clRed);
	FD->ManualDock(Panel1, NULL, alRight);
	FD->Show();

	// Static Method
	FD = TForm2::CreateDockForm(clWhite);
	FD->ManualDock(DockTabSet1);
加入Panel1的DockDrop事件,程式碼如下:
語法:
	if (Panel1->Width == 0) {
		Panel1->Width = 150;
	}

	Splitter1->Visible = True;
	Splitter1->Left = Panel1->Width;
加入Panel1的UnDock事件,程式碼如下:
語法:
	if (Panel1->DockClientCount == 1) {
		Panel1->Width = 0;
		Splitter1->Visible = false;
	}
加入DockTabSet1的DockDrop事件,程式碼如下:
語法:
	DockTabSet1->Visible = true;
加入DockTabSet1的TabRemoved,程式碼如下:
語法:
	if (DockTabSet1->Tabs->Count > 0) {
		DockTabSet1->Visible = true;
	} else {
		DockTabSet1->Visible = false;
	}
加入DockTabSet1的DockOver事件,程式碼如下:
語法:
	TRect lRect;
	TPoint lPoint;
	TForm2 *TFD;

	TFD = dynamic_cast<TForm2 *>(Source->Control);

	if (TFD != NULL) {
		Accept = true;
		lPoint = Panel1->ClientToScreen(Point(0, 0));
		lRect.Top = lPoint.y;
		lRect.Left = lPoint.x;
		lPoint = Panel1->ClientToScreen(Point(150, Panel1->Height));
		lRect.Bottom = lPoint.y;
		lRect.Right = lPoint.x;
		Source->DockRect = lRect;
	}
再來修改Form2表單:
首先在Unit2.cpp檔案中TForm2 *Form2;下面加入
語法:
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner, const TColor aColor)
	: TForm(Owner)
{
	Color = aColor;
	Caption = ColorToString(aColor);
}
然後再TForm2 *Form2;前面加入//(亦即將TForm2 *Form2;標記)
再將Form2設為動態載入(將Project1.cpp檔案這行Application->CreateForm(__classid(TForm2), &Form2);刪除)
加入Form2的Close事件,程式碼如下:
語法:
	ManualFloat(Rect(0,0,0,0));
	Action = caFree;
加入Form2的StartDock事件,程式碼如下:
語法:
	DragObject = new TDragDockObjectEx(this);
	DragObject->Brush->Color = clAqua;
最後面加入:
語法:
TForm2 *TForm2::CreateDockForm(const TColor aColor)
{
	TForm2 *TCF;
	TCF = new TForm2(Application);
	TCF->Color = aColor;
	TCF->Caption = ColorToString(aColor);
	TCF->Show();

	return (TCF);
}
//---------------------------------------------------------------------------
最後修改Unit.h檔案,在 __fastcall TForm2(TComponent* Owner);下面加入
語法:
	__fastcall TForm2(TComponent* Owner, const TColor aColor);
	static TForm2 *TForm2::CreateDockForm(const TColor aColor);
<大功告成^_^>
__________________
地獄變現記
[人身得來不易,願大家能尊重生命--勿傷胎命][好淫者請好自為之吧--割鳥]
南泉禪師道:
道不屬知,不屬不知。知是妄覺,不知是無記。若真達不疑之道,猶如太虛,廓然蕩豁,豈可強是非邪?」
德山宣鑒禪師:
「如果明白無事,則勿妄求,妄求而得,亦非得也。汝但無事於心,無心於事,則虛而靈,空而妙。若毛端許,言之本末者,皆為自欺。何故?毫氂繫念,三塗業因。瞥爾情生,萬劫羈鎖。聖名凡號,盡是虛聲。殊相劣形,皆是幻色。汝欲求之,得無累乎?」
不知道 目前離線  
送花文章: 5469, 收花文章: 5341 篇, 收花: 24549 次
回覆時引用此帖
有 2 位會員向 不知道 送花:
mini (2008-02-25),tmsyy (2008-02-26)
感謝您發表一篇好文章
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
敎學 - 公開金鑰與數位憑證 Chin-Wei 網路疑難應用技術研討區 6 2007-07-14 09:44 AM
疑問 - 公司網站主機一直發生問題 smallear 網路疑難應用技術研討區 11 2006-12-08 01:11 PM


所有時間均為台北時間。現在的時間是 09:07 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1