?? vfp設計豪華封面.txt
字號:
在Visual FoxPro中設計豪華封面
廣東肇慶加美海外學校
張鏡明 劉杰
---- 當你歷盡千辛萬苦寫完一個應用程序后,肯定是希望它倍受歡迎;一個既有美感又有動感的漂亮封面定會令你的軟件魅力倍增。設計封面的一般做法是借助3DS、PowerPoint、3DCool等工具制作一個可執行文件,然后掛接在你的程序中。這樣做固然好,但也有不少缺點,比如會使你的軟件變得臃腫,連接有痕跡,效果不夠理想靈活等。下面介紹的是筆者在Visual FoxPro下設計封面的一些心得,主要探討的是如何通過編程的手段來實現動畫效果,原理很簡單,實現也比較容易,相信對各位同行會有一定的啟發作用。
---- 在Visual FoxPro中有個叫定時器(計時器)的控件(Timer控制),它能按一定的時間間隔規則地執行代碼,是實現動畫效果的“法寶”。 Timer控制有個屬性Interval用來指定計時器控制的 Timer 事件之間的時間間隔毫秒數,一般將這個屬性值設為10,也就是說每隔10毫秒,將會觸發一次計時器的Timer 事件;在Timer 事件中寫上有條件地改變某個控件的Height、Width、Top、Left、Visible等等屬性的代碼,就能讓這個控件按我們的要求動起來。
---- 我們借助PowerPoint的一些術語來具體看看各種效果的實現方法:
---- 一、 緩慢移入和飛入:
---- 這是最容易實現的一種,只需要編程改變控件的Top或Left屬性即可。例如,現有一個名為Form1的表單里,已經建立了一個名為Image1的圖象控制,此控件的Picture屬性已設好,想讓這幅圖片從底部緩慢移入屏幕,要做那些工作呢?首先,將Image1的Top屬性設為450(或根據你屏幕設置改為別的數字),也就是說,讓圖片的頂部剛好位于屏幕的下邊界;然后,建立一個名為Timer1的計時器,并將Timer1的Interval屬性設為10;接著,在Timer1的Timer事件中,寫上幾行這樣的代碼:
stayposition=100
speed=3
If Thisform.Image1.top
---- 其中,變量stayposition用于控制圖片最后停留的位置,變量speed用于控制圖片的移動速度。運行這個表單,將會看到一幅圖片以你需要的速度,從屏幕底部出發,一直移動到你所需要的位置,然后停下來。如果你想程序運行時,要有一定的動作(例如單擊屏幕),圖片才開始移動,我們可以先把Timer1的Enabled屬性設為.F.,然后在Fomr1的Click事件上寫上代碼:Thisform.Timer1.enabled=.T.即可。
---- 當你真正理解底部緩慢移入的原理和實現方法時,所謂的底部飛入、從右下角緩慢移入、從頂部飛入、從右側飛入等等效果就輕而易舉了,這里簡單地說一下:飛入,將speed的值改大即可;從頂部移入,稍為復雜一點,要將語句If Thisform.Image1.top",并將語句Thisform.Image1.top=Thisform.Image1.top-speed中的“-"改為“+",還要修改圖片初始的top屬性,讓圖片開始時是處于屏幕的頂部;從右側移入,需要修改圖片的初始left屬性,并將上面程序中的所有top改為left;而從左上角、右下角等處斜斜移入,則在程序中需要同時改變圖片的top和left屬性。不過,所有這些的道理都是一樣的。
---- 二、 切入:
---- 以右側切入為例。這種效果看起來是從右到左將圖片拉來出來。實現的方法是:先將圖片的width屬性設為0;建立并設好計時器控件;在計時器的timer事件中寫上如下代碼:
stopwidth=170
speed=12
If Thisform.Image1.width >stopwidth then
Thisform.Timer1.enabled=.F.
Else
Thisform.Image1.width=Thisform.Image1.width+speed
Thisform.Image1.left=Thisform.Image1.left-speed
Endif
---- 這里,變量stopwidth的值等于圖片的原始寬度。同理,上側切入的效果只需將上述代碼中的width改為height,將left改為top,并將圖片的height屬性設為0即可。但由于VFP的一些限制,左側切入和下側切入的效果比較難于實現。
---- 三、 擦除:
---- 向右擦除的效果與從右側切入非常相象,只是向右擦除看起來是將圖片從左往右攤開,而從右側切入看起來是將圖片從右往左拉出來。它們的實現方法也幾乎一樣,僅將語句Thisform.Image1.left=Thisform.Image1.left-speed去掉就行了。同樣,向上擦除也是類似的,但向左、向下擦除的效果不易實現。
---- 四、 伸展:
---- 伸展跟切入的效果的區別在于:伸展過程中,整幅圖片都能看見,不過是變了形的;而切入的過程中,只能看見圖片的一部分。伸展與切入的實現也幾乎完全相同,唯一的改動是將圖片的stretch屬性設為2(等比填充)。同樣,其它方向的伸展也是類似的。
---- 五、 閃爍:
---- 這個效果很容易實現。建立計時器,根據你所需要的閃爍速度設好它的Interval屬性,一般可設成500。在計時器的timer事件中寫上如下代碼:
if thisform. Image1.visible=.f. then
thisform. Image1.visible=.t.
else
thisform. Image1.visible=.f.
endif
---- 圖片Image1就能按你的需要閃爍起來,想停止閃爍,將計時器的enabled屬性設為.f.即可。
---- 六、 百葉窗:
---- 這個效果要實現比較復雜,我們先看水平百葉窗。首先,在圖片上面建幾個白色的空白橫條標簽,剛好能將圖片蓋住,這些標簽的名字分別取成“label1"、“label2"......;然后建立并設好計時器控件,并在計時器的timer事件中寫上如下代碼:
speed=3
number=5
if thisform.label1.height >=speed then
for i=1 to number
j=str(i,int((int(i/10)+9)/10)+1)
thisform.label&j..height=
thisform.label&j..height-speed
next i
endif
---- 其中,變量speed用于控制圖片出現的速度,number表示標簽的個數。一般來說標簽的height屬性要設成speed的倍數,而語句j=str(i,int((int(i/10)+9)/10)+1),是用于根據i的值來確定字符j的長度,避免出錯。至于垂直百葉窗效果,將水平百葉窗效果中的橫條標簽變成豎條標簽,再將代碼中的所有height改為width即可。
---- 七、 棋盤式:
---- 棋盤式的實現方法幾乎和百葉窗一樣,只是空白標簽蓋在圖片上面的方式不同。在棋盤式中,要先建立許多個標簽,但這些標簽并不完全把圖片遮住,而是設計成國際象棋的棋盤那樣,一個格上放標簽,另外一個格露出圖片,標簽依然取名為“label1"、“label2"......代碼則和百葉窗中的完全相同。
---- 八、 回旋: 表面看來,回旋這種
---- 效果是圖片在繞著一根軸在旋轉,但實際我們可以通過改變圖片的width屬性來實現這種效果。這時最好建立兩個計時器,分別命名為timer1、timer2;timer2用于控制減少圖片的寬度,其timer事件的代碼為:
speed=4
if thisform.image1.width<=speed then thisform.timer1.enabled=".t." thisform.timer2.enabled=".f." else thisform.image1.left="thisform.image1.left+speed/2" thisform.image1.width="thisform.image1.width-speed" endif timer1用于控制增加圖片的寬度,其timer事件的代碼為: imagewidth="200" speed="4" if thisform.image1.width>=imagewidth then
thisform.timer1.enabled=.f.
thisform.timer2.enabled=.t.
else
thisform.image1.left=thisform.image1.left-speed/2
thisform.image1.width=thisform.image1.width+speed
endif
---- 其中,變量speed控制回旋的快慢,值要求是偶數, imagewidth代表圖片的原始寬度,圖片的strecth屬性要設成2-變比填充。想停止回旋,將timer1和timer2的enabled屬性都設為.f.即可。
---- 九、 放大縮小:
---- 這種效果雖然看起來與回旋相差甚遠,但實現方法卻與回旋幾乎一樣,只需要把圖片的strecth屬性改為1-等比填充即可,代碼不必做任何改動。
---- 十、 變色:
---- 變色效果一般只應用于文字。變色有許許多多的方式,這里介紹的是隨機方式。建立標簽對象label1,設好其caption屬性;建立計時器,其Interval屬性根據需要而設,一般可設為500,在timer事件中寫上代碼:
i=int(rand()*255)
j=int(rand()*255)
k=int(rand()*255)
thisform.label1.forecolor=rgb(i,j,k)
---- 以上是本人在使用VFP3.0編程中所積累的一點粗淺經驗,使用上述方法所設計出來的軟件封面的確堪稱豪華。其實,只要懂得了原理,我們可以盡情發揮想象力,設計出各種各樣的漂亮效果。而且這個道理還可以應用于VB編程。最后,需要補充的一點是,如果想為你的效果增添一點聲音,請加上代碼:
SET BELL TO '你需要的聲音.WAV', 0
?? CHR(7)
--------------------------------------------------------------------------------
中國計算機世界出版服務公司版權所有
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -