Delphi作為新起的Windows程式語言,由於其集眾多的優秀特性於一身,因而越來越得到廣大程式設計人員和發燒友的青睞。以下十則技巧涉及的面比較廣泛,希望能對Delphi的愛好者有所裨益。
1.類似vb.中的doevents功能。
大家或許發現,在Delphi中沒有類似vb.中的doevents函數,這樣有的時候,我們將無法讓Windows回應多個同時發生的事件。其實,在Delphi的applica??tion物件中包含類似的一個方法:PRocessMessage,你可以透過呼叫application. ProcessMessage來完成像vb.中的doevents一樣的功能。
2.在Delphi中調用NetscapeNavigator。
隨著Internet的火爆,有沒有想過在你的Delphi程式中啟動Netscape瀏覽器,顯示出你指定的WWW位址的主頁。下面這個程式能夠完成這項功能。
programNetscape;
usesDDEMan;
procedureGo??toURL(sURL:string);
var
dde:TDDEClientConv;
begin
dde:=TDDEClientConv. Create(nil);
withddedo
begin
//specifythelocationofnetscape. exe
ServiceApplication:=′c: s32program etscape. exe′;
//activatetheNetscapeNavigator
SetLink(′Netscape′,′WWW―Activate′);
RequestData(′0xFFFFFFFF′);
//gotothespecifiedURL
SetLink(′Netscape′,′WWW―OpenURL′);
RequestData(sURL+′,,0xFFFFFFFF,0x3,,,′);
CloseLink;
end;
dde. Free;
end;
begin
GotoURL(′http://www.yahoo.com/′);
end.
3.格式化整數輸出。
比較大的數字在輸出時會顯得不易閱讀,在Delphi中顯示帶分節號的數字是相當簡單的一件事,如下即可:xxxxx. caption:ΚFormatFloat(′#′,524667500)。
4.在編譯時獲得提示。
在Delphi2.0中,編譯時,可以讓編譯器告訴你一些提示,例如哪些變數宣告了,卻從來沒有使用過。我們知道,可以透過選單中的選項來控制是否要Delphi這樣做,但如果因為一些特殊需要,你只要在指定的程式碼段需要Delphi這樣的提示,怎麼辦呢?請參考如下的程序。
{$HINTON}
procedureTform1. Button1Click(Sender:TObject);
var
X:integer;
begin
end;
{$HINTOFF}
5.更改Windows95的牆紙。
在Delphi中你可以很方便地更改牆紙,請參考以下的程序。
procedureChangeIt;
var
Reg:TregIniFile;
begin
Reg:ΚTRegIniFile. Create(′ControlPanel′)
;
Reg. WriteString(′desktop′,′Wallpaper′,
′c:pwin95forest. bmp′);
Reg. WriteString(′desktop′,′TileWallpaper
′,′1′);
Reg. Free;
SystemParametersInfo(SPI―SETDESKWALLPAPER,0
,nil,SPIF―SENDWININICHANGE);
end;
6.獲得最後使用文件的日期。
在Win95中有一項新的功能,就是可以取得存取檔案的最後日期。著名的CleanSweapforWin95軟體中就是靠這項功能來作為判斷某個檔案是否被經常存取的依據之一。在Delphi中,我們可以透過下面的程式來達到此功能。
functionGetFileLastaccessTime(sFileName:string):TDate??Time;
var
ffd:TWin32FindData;
dft:DWord;
lft:TFileTime;
h:THandle;
begin
//getfileinformation
h:ΚWindows. FindFirstFile(PChar(sFileName),ffd);
if(INVALID―HANDLE―VALUEΙΛh)then
begin
//we′relookingforjustonefile,socloSEOur″find″
Windows. FindClose(h);
//converttheFILETIMEtolocalFILETIME
FileTimeToLocalFileTime(ffd.ftLastAccessTime,lft);
//convertFILETIMEtoDOStime
FileTimeToDosDateTime(lft,LongRec(dft).Hi,LongRec(dft).Lo);
//finally,convertDOStimetoTDateTimeforuseinDelphi′snativedate/timefunctions
Result:ΚFileDateToDateTime(dft);
end;
end;
GetFileLastAccessTime()將會以Delphi的TdateTime格式傳回你所指定的檔案的最後存取日期。
7.豐富多彩的標籤。
我們已經不滿足於Delphi提供的簡單的標籤,能不能在標籤中有不同的字體,有不同的顏色,以此來豐富我們的表現能力。答案是肯定的,而且用不著第三方提供的控件,我們只要巧妙的利用Delphi自己提供的TRichEdit就可以了。首先將TRichEdit控制項的邊框去除:RichEd??it1. BorderStyle:ΚbsNone;同時設定只讀屬性為真:RichEd??it1. ReadOnly:ΚTrue;然後,你利用write之類的軟體製作好RichText格式的文本,透過以下語句就可以顯示出來了:
RichEdit1. PlainText:ΚFalse;
RichEdit1. Lines. LoadFromFile(′c: est.rtf′);
8.如何防止Win95顯示嚴重錯誤。
不管你的程式如何反覆調試,交給用戶之後,總有可能發生你意想不到的錯誤,如何避免Win95顯示出白色的窗口,告訴你的用戶發生了難堪的意外錯誤呢?我們可以這樣做:
var
wOldError??Mode:Word;
begin
//tellwin??dowstoignorecriticalerrorsandsavecur??renterrormode
wOldError??Mode:ΚSetEr??rorMode(SEM―FAILCRITI??CALERRORS);
try
//codethatmightgenerateacriticalerrorgoeshere. . .
finally
//gobacktopreviouserrormode
SetErrorMode(wOldErrorMode);
end;
end;
主要是利用SetErrorMode()來完成這項功能。
9.剛才用滑鼠擊了哪一個物件。
在Win95中,滑鼠的右鍵起到了很大的作用,但是,由於歷史的原因,對於右鍵的使用即使在Delphi中,也還不夠有效,下面的程式可以告訴你如何知道剛才滑鼠右鍵的物件名稱。先建立一個popmenu,然後以下的程式碼就可以告訴你剛才右鍵的物件名稱:Popup??Menu1. PopupComponent. ClassName。
10.檢測CD-ROM或是其他磁碟是否有變化。
最簡單的檢查CD-ROM或是磁碟是否有變更的方法是檢查其volume號碼。你可以簡單地運用下面的函數來傳回磁碟的volume系列號碼GetDiskVolSerialID(′E′),函數程式碼如下:
functionGetDiskVolSerialID(cDriveName:char):DWord;
var
dwTemp1,dwTemp2:DWord;
begin
GetVolumeInformation(PChar(cDriveName+′:′),Nil,0,ΝResult,dwTemp2,dwTemp2,Nil,0);
end;