精心編寫的Windows程序顯示啟動注意事項,稱之為濺射屏幕(splash screen)。利用一點兒小小的內容,即可給程序的顯示添加不少色彩。
由於工程本身創建程序的主窗口,且啟動濺射屏幕必須在創建主窗口之前出現,所以工程文件必須創建自己的啟動屏幕。這意味著用戶必須修改源代碼來創建工程文件,而這通常在Delphi編程中是不需要的。下面的過程介紹了濺射屏幕的建立過程。
1、開始一個新的工程。將窗體命名為mainform,同時將其caption屬性設置為splashindemo。把這個工程保存在一個目錄中,如c:\projects\splashin。把mainform的單元命名為main,把工程文件命名為splashin。
2、在mainform中插入一個button組件。將button的name屬性改為exitbutton,而將其caption屬性改為exit。為exitbutton的onclick事件創建一個處理器,在過程的begin和end關鍵詞之間插入close;語句。
3、選取file new form命令,或者單擊new form速度按鈕。添加一個新的窗體。
4、將這個窗體的name屬性改變為splashform,刪除其caption屬性。此外,將其borderstyle屬性改變為bsnone,同時將bordericons下的三個子值設置為false。
5、保存這個工程。當Delphi提示讀者提供單元文件名時,要確信當前目錄為正確的目錄。為splashform的單元文件名輸入splash。
6、將splashform的enabled屬性設置為false。這裡不想讓用戶能夠給窗口提供鍵盤和鼠標命令,這是極少見的情況之一。在這個例子中,我們想讓程序對splashform的顯示擁有完全的控制權。
7、由於窗口沒有輪廓,所以從additional組件類中插入一個bevel組件對象。這有助於定義窗口的邊緣。將bevel1的align屬性設置為alclIEnt。同時,將對象的shape屬性改變為bsframe,將其style屬性改變為bsraised。這些值由使用者來確定。
8、在splashform中插入想使用的組件,在這裡不要插入任何按鈕或者其他相互作用的控件。應用程序本身顯示和去除啟動濺射對話框。
9、選擇project菜單。高亮顯示splash工程個彈出式菜單。選擇options命令。在所產生的project options對話框中,選取forms頁標簽。注意,mainform和splashform位於自動創建的窗體列表中。高亮顯示每個窗體並單擊鼠標右按鈕來將其移動到available窗體。所有的Delphi窗體在運行時都是在內存中自動創建的,這要消耗內存和系統資源。在這樣的一個案例中,程序是在運行時創建窗體的,讀者應該從自動創建的列表中刪除窗體。關閉projectoptions窗口。
10、接下來,修改工程的源代碼,以便在顯示主窗口之前顯示濺射對話框。這裡需要在工程文件中插入語句,以便與splash.dpr工程文件相匹配。工程源代碼如下:
program project3;
uses
forms,
main in 'main.pas' {mainform},
splash in 'splash.pas' {splashform};
{$r *.res}
begin
splashform:=tsplashform.create(application);
splashform.show;
splashform.update;
application.createform(tmainform,mainform);
splashform.close;
application.run;
end.
11、如果這時編譯和運行程序,它就非常快速地顯示和去除啟動濺射對話框,以至用戶可能沒機會見到它。為了強迫對話框保持幾秒鐘的可見時間,請選取程序的mainform。為窗體的oncreate命令創建一個處理器。在關鍵詞的前面添加一個名為stoptime的長整型變量。在begin和end之間插入兩個語句:一個為對windows gettickcount函數的調用。來將stoptime設置為Windows已在運行的秒數;另一個語句為while語句,這個語句另外延遲2秒鐘。程序清單如下:
unit main;
interface
uses
Windows, messages, sysutils, classes, graphics, controls, forms, dialogs,
stdctrls;
type
tmainform = class(tform)
exitbutton: tbutton;
procedure exitbuttonclick(sender: tobject);
procedure formcreate(sender: tobject);
private
{ private declarations }
public
{ public declarations }
end;
var
mainform: tmainform;
implementation
{$r *.dfm}
procedure tmainform.exitbuttonclick(sender: tobject);
begin
close;
end;
procedure tmainform.formcreate(sender: tobject);
var
stoptime:longint;
begin
stoptime:=gettickcount div 1000;
while ((gettickcount div 1000)<(stoptime+2)) do
sleep(1);
end;
end.
12、按f9編譯、運行程序。