軟件首頁(yè) |  文章首頁(yè)
最新更新 軟件分類(lèi) 設(shè)為首頁(yè) 加入收藏 聯(lián)系我們
當(dāng)前位置:首頁(yè)文章首頁(yè) IT學(xué)院 Delphi

利用API函數(shù)開(kāi)發(fā)DELPHI程序

作者:東坡下載  來(lái)源:uzzf  發(fā)布時(shí)間:2010-10-14 9:59:19  點(diǎn)擊:

      Windows的API函數(shù)是應(yīng)用程序開(kāi)發(fā)的有力輔助 工具,對(duì)它們的恰當(dāng)使用,可大大增強(qiáng)和改進(jìn)應(yīng)用程序與系統(tǒng)打交道的能力,使自己的程序 真正具有底層操作功能。作為RAD工具的基礎(chǔ)代表,BORLANDDELPHI雖然本身也已提供了大 量強(qiáng)有力的函數(shù)和過(guò)程,但在某些場(chǎng)合、要求下,使用API函數(shù)將使你的程序進(jìn)一步得到改 善,并可拓寬范圍,簡(jiǎn)化程序代碼。
  在DELPHI中引用API函數(shù),和使用DELPHI本身的函 數(shù)、過(guò)程幾乎沒(méi)有區(qū)別。在DELPHI目錄下有一個(gè)WINDOWS.PAS文件,凡是在其中聲明過(guò)的API 函數(shù),都可在編程時(shí)直接引用而無(wú)須另加說(shuō)明。只是要注意,標(biāo)準(zhǔn)API函數(shù)都是以C或C++為 標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)結(jié)構(gòu)定義的,而DELPHI使用的是OBJECTPASCAL語(yǔ)言,因此在引用時(shí)應(yīng)特別注 意參數(shù)和函數(shù)本身的數(shù)據(jù)類(lèi)型。如一個(gè)API函數(shù)若為布爾值,則在DELPHI中就應(yīng)以TRUE、FALSE 而不能用0、非0來(lái)對(duì)返回值進(jìn)行判斷。

   下面以三個(gè)小例子來(lái)說(shuō)明API函數(shù)在DELPHI中的 使用。
  一、本地化消息框
  想讓自己的消息框顯示"OK"、"Cancel"還是"確定"、" 取消"?如果想使程序徹底本地化,那么還是放棄MessageDlg和ShowMessage吧--都怪DELPHI 沒(méi)有。用MessageBox這個(gè)API函數(shù)照樣方便。

  使用語(yǔ)法為:
MessageBox(HWND:hWND,lpMessage:
PChar,lpCaption:PChar,uType:Cardinal);
  各參數(shù)中,第一個(gè)為消息框所屬的窗口句柄,第二 個(gè)為要顯示的消息,第三個(gè)為消息框的標(biāo)題,第四個(gè)為消息框的類(lèi)型,函數(shù)返回值為整型數(shù)。

  為使消息框有所歸屬,第一個(gè)參數(shù)設(shè)為當(dāng)前窗口, 獲取其句柄的方法是使用另一個(gè)API函數(shù):GetActiveWindows(),且不需任何參數(shù)。

  例1)Messagebox示例:
  1.主要構(gòu)件及屬性的設(shè)置:
form1:caption:messagebox示例
bordericons:biMaximize和biHelp設(shè)為false
panel1:caption:文字部分Alignment:taLeftJustify
panel2:caption:圖象部分Alignment:taLeftJustify
button1~button12:caption分別為:確定、確定取消、
確定幫助取消、是否、重試取消、終止重試取消、
信息、提問(wèn)、系統(tǒng)圖標(biāo)、警告、停止、組合方式
bitbtn1:kind:bkClose
  如圖一所示:
  2.事件說(shuō)明:(詳見(jiàn)源程序,下僅舉兩例)
{文字部分以button2click()為例}
procedureTForm1.Button2Click(Sender:TObject);
begin
casemessagebox(getactivewindow(),
顯示確定、取消框,例子,
okcancel)
ofidok:messagebox(getactivewindow(),
您按下的是"確定"按鈕,
結(jié)果,mb_ok);
idcancel:messagebox(getactivewindow(),
您按下的是"取消"按鈕,
結(jié)果,mb_ok);
end;
end;
{圖象部分以button8click()為例}
procedureTForm1.Button8Click(Sender:TObject);
begin
messagebox(getactivewindow(),顯示警告圖標(biāo),例子,
mb_iconwarning)
end;
  二、改進(jìn)Windows9x的系統(tǒng)登錄的安全性:
  Win9x的"用戶(hù)登錄"窗口可謂來(lái)者不拒,密碼不 對(duì)照樣可以"登堂入室",系統(tǒng)為用戶(hù)保留的個(gè)人設(shè)置等信息也就毫無(wú)保密性可言,通過(guò)查 看Profiles目錄,可輕松地將其復(fù)制或刪除。雖然Win95、Win98的應(yīng)用對(duì)象是個(gè)人用戶(hù),但 在某些場(chǎng)合下,還是讓登錄窗口起點(diǎn)作用的好。
  要使系統(tǒng)登錄具有安全性,對(duì)非法使用者真正能 拒之門(mén)外,不妨用兩個(gè)API函數(shù)來(lái)實(shí)現(xiàn)此目的。
例二)系統(tǒng)登錄檢查
  1.主要構(gòu)件及屬性設(shè)置:
form1:caption:CheckUser
height、width:設(shè)為最小值
  2.事件說(shuō)明:
//定義變量
private
size:cardinal;
name:pchar;
entry:boolean;{Privatedeclarations}

procedureTCheckUser.FormShow(Sender:TObject);
begin
size:=64;
name:=StrAlloc(64);
{檢查用戶(hù)名,判斷是按了“取消”按鈕還是鍵入了新用戶(hù)名}
ifGetUsername(name,size)
thenifname=’wj’//‘wj’為筆者機(jī)器的登錄用戶(hù)名
{在此,若允許的合法使用者不止一個(gè),還可利用關(guān)系運(yùn)算指定
一個(gè)以上的用戶(hù)進(jìn)入。
如:if(name=’computer1’)or(name=’computer2’)
}
thenentry:=true;
close;
end;
procedureTCheckUser.FormClose
(Sender:TObject;varAction:TCloseAction);
begin
ifnotentry
thenExitWindowsEx(EWX_REBOOT,32);
//若用戶(hù)名不對(duì),則重新啟動(dòng)Windows
end;

procedureTCheckUser.FormCreate(Sender:TObject);
begin
entry:=false;//設(shè)定初始值
end;

  編譯完畢后,生成EXE文件,然后打開(kāi)注冊(cè)表—— 使用Regedit,找到HKEY_LOCAL_MACHINE\SOFTWARE\Micr\Windows\CurrentVersion\RUN 行,添加鍵值名(如:CheckUser)及鍵值(EXE文件所在的完整路徑)。如圖所示:
  好了,重新啟動(dòng)一次,沒(méi)有正確的密碼還能進(jìn)入嗎?
  三.沒(méi)有“媒體播放器”的聲音播放
  日前做了一個(gè)小程序,想在“關(guān)于”窗口加上一段 聲音說(shuō)明,但小小的“關(guān)于”FORM放上一個(gè)長(zhǎng)長(zhǎng)的、Visible屬性需為False的MediaPlayer構(gòu) 件實(shí)在別扭。東查西找之下,還是靠API函數(shù)SNDPLAYSOUND()解決了問(wèn)題——從而擺脫了MediaPlayer 的“束縛”。例三)使用API函數(shù)控制聲音文件的播放:(部分代碼)
procedureTaboutBox.FormShow(Sender:TObject);
begin
//播放當(dāng)前目錄下的welcome.wav文件
sndplaysound(‘welcome.wav’,snd_async)
end;

procedureTAboutBox.FormClick(Sender:TObject);
begin
//停止播放
sndplaysound(‘’,snd_async);
end;

  別忘了,在USES子句中加入mmsystem單元。如果只 需要播放聲音,那么一條API函數(shù)就能實(shí)現(xiàn)功能的還用得著MediaPlayer來(lái)大動(dòng)干戈嗎?
  總之,使用DELPHI的“聰明的程序員”們應(yīng)該充分 發(fā)揮DELPHI調(diào)用API函數(shù)方便快捷的優(yōu)勢(shì),好好利用API函數(shù)以更好地為自己程序服務(wù)。

相關(guān)軟件

文章評(píng)論

欄目導(dǎo)航

本類(lèi)推薦文章

關(guān)于本站 | 網(wǎng)站幫助 | 廣告合作 | 下載聲明 | 友情連接 | 網(wǎng)站地圖
Copyright © 20098-2010 uzzf下載站. All Rights Reserved .