##HIDEME##

2007年8月13日 星期一

[BCB] 土法煉鋼式的視窗顯現動畫

小豬爸常常在電影裡或是Apple電腦中可以看到
擴張式的視窗顯示方法
很遺憾的,在Windows中小豬爸並沒有發現這個功能(WinXP)
所以豬爸就想說來試試看能不能用程式(BCB, OWL, VCL)的方法來達成,
結果是可以的,雖然效果差強人意了點~
首先要拉一個Timer的VCL到Form裡面來
並且在這個程序中加進下面的程式碼(需依程式不同去修改裡面的值)
Form1->Width = Form1->Width + 32 ; Form1->Height = Form1->Height + 32 ; //32的值可以一速度去調整,因為我們用Timer來計時,所以理論上應該不同速度的電腦 //每次呼叫這個程序的間隔應該是相同的。 if(Form1->Width > iORGWindowWidth){ Form1->Width = iORGWindowWidth ; WWidthOK = true ; }//處理當寬度已經到達我們所設定的值之後,將Window的寬度設定為我們要的值,並且設定旗標
if(Form1->Height > iORGWindowHeigh){ Form1->Height = iORGWindowHeigh ; WHeiOK = true ; }//處理當高度已經到達我們所設定的值之後,將Window的高度設定為我們要的值,並且設定旗標
if((WWidthOK == true) && (WHeiOK == true)){ WPosTOK = true ; WPosLOK = true ; //如果高寬都已經到達我們所設定的目標,就將視窗位置旗標設定為 true
}else{ Form1->Top = Form1->Top - 16 ; Form1->Left = Form1->Left - 16 ; if(Form1->Top < iORGPosTop){ Form1->Top = iORGPosTop ; WPosTOK = true ; } if(Form1->Left < iORGPosLeft){ Form1->Left = iORGPosLeft ; WPosLOK = true ; } } //更該視窗的位置,這樣才能營照出從中間放射出來的顯現方式,16 的值恰好為 32/2 if((WWidthOK == true) && (WHeiOK == true) && (WPosTOK == true) && (WPosLOK == true)){ Timer1->Enabled = false ; } //如果上面的條件都達到了,即表示視窗已經顯示到我們要的狀態,所以將Timer關閉
另外,在FormShow這個程序中,我們要加進下面的程式碼,
主要都是在做一些參數的初始化。
iORGWindowWidth = Form1->Width ; iORGWindowHeigh = Form1->Height ; iORGPosTop = Form1->Top ; iORGPosLeft = Form1->Left ; Form1->Width = 2 ; Form1->Height = 2 ; Form1->Top = iORGPosTop + (iORGWindowHeigh / 2) ; Form1->Left = iORGPosLeft + (iORGWindowWidth / 2) ; WWidthOK = false ; WHeiOK = false ; WPosTOK = false ; WPosLOK = false ; Timer1->Enabled = true ; 這樣就可以在視窗開啟的時候有一個小動畫了~ 試試吧~ 下次我在把視窗結束的部份貼上來~