Delphi編程技巧實(shí)例
發(fā)布時(shí)間:2008-08-15 閱讀數(shù): 次 來(lái)源:網(wǎng)樂(lè)原科技
Delphi作為一門新起的Windows編程語(yǔ)言,由于其集眾多的優(yōu)秀特性于一身,因而越來(lái)越得到廣大編程人員和發(fā)燒友的青睞。以下十則技巧涉及的面比較廣泛,希望能夠?qū)elphi的愛(ài)好者有所裨益。
1.類似于vb.中的doevents功能。
大家或許發(fā)現(xiàn),在Delphi中沒(méi)有類似于vb.中的doevents函數(shù),這樣有的時(shí)候,我們將無(wú)法使Windows響應(yīng)多個(gè)同時(shí)發(fā)生的事件。其實(shí),在Delphi的application對(duì)象中包括類似的一個(gè)方法:ProcessMessage,你可以通過(guò)調(diào)用Application.ProcessMessage來(lái)完成象vb.中的doevents一樣的功能。
2.在Delphi中調(diào)用NetscapeNavigator。
隨著Internet的火爆,有沒(méi)有想過(guò)在你的Delphi程序中啟動(dòng)Netscape瀏覽器,顯示出你指定的WWW地址的主頁(yè)。下面這個(gè)程序能夠完成這一功能。
programNetscape;
usesDDEMan;
procedureGotoURL(sURL:string);
var
dde:TDDEClientConv;
begin
dde:=TDDEClientConv.Create(nil);
withddedo
begin
?。痵pecifythelocationofnetscape.exe
ServiceApplication:=′c:\ns32\program\netscape.exe′;
?。痑ctivatetheNetscapeNavigator
SetLink(′Netscape′,′WWW—Activate′);
RequestData(′0xFFFFFFFF′);
?。痝otothespecifiedURL
SetLink(′Netscape′,′WWW—OpenURL′);
RequestData(sURL+′,,0xFFFFFFFF,0x3,,,′);
CloseLink;
end;
dde.Free;
end;
begin
GotoURL(′http://www.yahoo.com/′);
end.
3.格式化整數(shù)輸出。
比較大的數(shù)字在輸出時(shí)會(huì)顯得不易閱讀,在Delphi中顯示帶分節(jié)號(hào)的數(shù)字是相當(dāng)簡(jiǎn)單的一件事,如下即可:xxxxx.caption:ΚFormatFloat(′?!洌?24667500)。
4.在編譯時(shí)獲得提示。
在Delphi2.0中,編譯時(shí),可以讓編譯器告訴你一些提示,比如哪些變量聲明了,卻從來(lái)沒(méi)有使用過(guò)。我們知道,可以通過(guò)菜單中的選項(xiàng)來(lái)控制是否要Delphi這樣做,但如果由于一些特殊需要,你只要在指定的代碼段需要Delphi這樣的提示,怎么辦呢?請(qǐng)參考如下的程序。
?。鏗INTON}
procedureTform1.Button1Click(Sender:TObject);
var
X:integer;
begin
end;
?。鏗INTOFF}
5.更改Windows95的墻紙。
在Delphi中你可以很方便地更改墻紙,請(qǐng)參考以下的程序。
procedureChangeIt;
var
Reg:TregIniFile;
begin
Reg:ΚTRegIniFile.Create(′ControlPanel′)
;
Reg.WriteString(′desktop′,′Wallpaper′,
′c:\pwin95\forest.bmp′);
Reg.WriteString(′desktop′,′TileWallpaper
′,′1′);
Reg.Free;
SystemParametersInfo(SPI—SETDESKWALLPAPER,0
,nil,SPIF—SENDWININICHANGE);
end;
6.獲得最后使用文件的日期。
在Win95中有一項(xiàng)新的功能,就是可以獲得訪問(wèn)文件的最后日期。著名的CleanSweapforWin95軟件中就是靠這一功能來(lái)作為判斷某個(gè)文件是否被經(jīng)常訪問(wèn)的依據(jù)之一。在Delphi中,我們可以通過(guò)下面的程序來(lái)達(dá)到此功能。
functionGetFileLastAccessTime(sFileName:string):TDateTime;
var
ffd:TWin32FindData;
dft:DWord;
lft:TFileTime;
h:THandle;
begin
?。痝etfileinformation
h:ΚWindows.FindFirstFile(PChar(sFileName),ffd);
if(INVALID—HANDLE—VALUEΙΛh)then
begin
//we′relookingforjustonefile,socloseour″find″
Windows.FindClose(h);
?。痗onverttheFILETIMEtolocalFILETIME
FileTimeToLocalFileTime(ffd.ftLastAccessTime,lft);
?。痗onvertFILETIMEtoDOStime
FileTimeToDosDateTime(lft,LongRec(dft).Hi,LongRec(dft).Lo);
?。痜inally,convertDOStimetoTDateTimeforuseinDelphi′snativedate/timefunctions
Result:ΚFileDateToDateTime(dft);
end;
end;
GetFileLastAccessTime()將會(huì)以Delphi的TdateTime格式返回你所指定的文件的最后訪問(wèn)日期。
7.豐富多彩的標(biāo)簽。
我們已經(jīng)不滿足于Delphi提供的簡(jiǎn)單的標(biāo)簽,能不能在標(biāo)簽中有不同的字體,有不同的顏色,以此來(lái)豐富我們的表現(xiàn)能力。回答是肯定的,并且用不著第三方提供的控件,我們只要巧妙的利用Delphi自己提供的TRichEdit就可以了。首先將TRichEdit控件的邊框去除:RichEdit1.BorderStyle:ΚbsNone;同時(shí)設(shè)置只讀屬性為真:RichEdit1.ReadOnly:ΚTrue;然后,你利用write之類的軟件制作好RichText格式的文本,通過(guò)以下語(yǔ)句就可以顯示出來(lái)了:
RichEdit1.PlainText:ΚFalse;
RichEdit1.Lines.LoadFromFile(′c:\test.rtf′);
8.如何防止Win95顯示嚴(yán)重錯(cuò)誤。
不管你的程序如何反復(fù)調(diào)試,交給用戶之后,總有可能發(fā)生你意想不到的錯(cuò)誤,如何避免Win95顯示出白色的窗口,告訴你的用戶發(fā)生了難堪的意外錯(cuò)誤呢?我們可以這樣做:
var
wOldErrorMode:Word;
begin
?。痶ellwindowstoignorecriticalerrorsandsavecurrenterrormode
wOldErrorMode:ΚSetErrorMode(SEM—FAILCRITICALERRORS);
try
//codethatmightgenerateacriticalerrorgoeshere...
finally
?。痝obacktopreviouserrormode
SetErrorMode(wOldErrorMode);
end;
end;
主要是利用SetErrorMode()來(lái)完成這一功能。
9.剛才用鼠標(biāo)擊了哪一個(gè)對(duì)象。
在Win95中,鼠標(biāo)的右鍵起到了很大的作用,但是,由于歷史的原因,對(duì)于右鍵的使用即使在Delphi中,也還不夠有效,下面的程序可以告訴你如何知道剛才鼠標(biāo)右擊的對(duì)象名稱。首先建立一個(gè)popmenu,然后以下的代碼就可以告訴你剛才右擊的對(duì)象名稱:PopupMenu1.PopupComponent.ClassName。
10.檢測(cè)CD-ROM或是其他磁盤(pán)是否有過(guò)變化。
最簡(jiǎn)單的檢查CD-ROM或是磁盤(pán)是否有過(guò)變化的方法是檢查其volume號(hào)碼。你可以簡(jiǎn)單地運(yùn)用下面的函數(shù)來(lái)返回磁盤(pán)的volume系列號(hào)碼GetDiskVolSerialID(′E′),函數(shù)代碼如下:
functionGetDiskVolSerialID(cDriveName:char):DWord;
var
dwTemp1,dwTemp2:DWord;
begin
GetVolumeInformation(PChar(cDriveName+′:\′),Nil,0,ΝResult,dwTemp2,dwTemp2,Nil,0);
end;