程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi中API編程--在Delphi中調用API函數

Delphi中API編程--在Delphi中調用API函數

編輯:Delphi
  Delphi作為一種面向對象的可視化開發工具,以其開發程序的高速度和編譯代碼的高效率越來越受到廣大編程人員的喜愛。盡管Delphi已經提供了非常強大的開發組件(VCL),但靈活使用API函數一定可以使你的程序增色不少。

  狀態鍵的檢查

  當今不少流行軟件的編輯窗口(包括Delphi的代碼編輯窗口)的底部都有一個狀態條用來顯示一些狀態信息,比如當前光標的位置等。通常鍵盤的狀態鍵包括[NUMLock],[ScrollLock],[CapsLock]和[Insert]這四個鍵,在編輯窗口中顯示狀態鍵的狀態可以使你的界面更友好,更有利於方便用戶。

  使用Delphi強大的開發功能和API提供的GetKeyboardState()函數,你可以輕松地在你的程序中實現狀態鍵檢測這一功能。

  也許有些讀者要問:我可以使用delphi提供的OnKeyPress函數捕捉按鍵動作來完成這一功能,又有什麼必要調用API函數呢?這就涉及到狀態鍵的另一個特點:即它的狀態與程序運行無關。比如說你在Word中按下insert鍵後再切換到Delphi中輸入代碼,這個鍵的狀態仍然保持不變。而如果只使用OnKeyPress函數,那麼當你的程序在後台運行時就無法捕捉到在前台程序中發生的按鍵動作,所以當切換到你程序時也就無法正確反映狀態鍵的狀態。因此需要使用API的GetKeyboardState()函數來檢查鍵盤狀態。當調用GetKeyboardState()函數時,你需要在程序中開辟一個256字節的緩沖區用來存儲鍵盤上各個鍵的狀態(最簡單的方法你可以聲明一個TKeyboardState變量)你可以根據緩沖區中相應位置的值來判斷鍵盤狀態,下表顯示了系統常量和其相應的按鍵。(你如果想查看所有的鍵值列表可以在help菜單選擇windowsAPI中輸入關鍵字virtualkeycodes,然後按下Show鍵)

  常量按鍵名稱

  VK—INSERT[Insert]鍵

  VK—NUMLOCK[NUMLock]鍵

  VK—CAPITAL[CapsLock]鍵

  VK—SCROLL[ScrollLock]鍵

  鍵盤緩沖區每一位都有特定的格式,對於狀態鍵來說,最低位是1時表示狀態鍵處於ON狀態,你可以使用delph i提供的Odd()函數來確定這一位的狀態。為了使程序顯示正確的狀態鍵的狀態,你需要定期調用GetKeyboardState()函數來不斷的查詢鍵盤狀態,實現這一功能最簡單的方法是使用Timer組件。

  下面舉一個小例子來說明如何具體實現這一調用功能,在這個例子中我們將檢查
[NUMLock]鍵的狀態並把它顯示在屏幕底部的狀態欄。

  從Component模板Win95頁中選擇StatusBar組件,按如下所示設置它的屬性

 AlignalBottom

 Height20

  從system頁中的選擇Timer組件並把它放入窗體,雙擊Timer組件彈出OnTimer事件的代碼編輯窗口,按如下所示添加代碼:

  procedureTForm1.Timer1Timer(Sender:TObject);

  varKeyStates:TKeyboardState;

  begin

  GetKeyboardState(KeyStates);

  begin

  if Odd(KeyStates[VK—NUMLOCK])then

  StatusBar1.Panels.Items[0].Text:Κ′NUM

  else

  StatusBar1.Panels.Items[0].Text:Κ″

  end;

  end;

  我們可以檢驗一下程序的運行結果。運行程序,可以看到狀態條中正確顯示了當前的狀態,切換到另一個程序改變[nUMLock]鍵的狀態再切換回運行程序,可以看到狀態條的狀態已經改變。一般說來,在程序中加入狀態條顯示相應信息對於用戶來說是十分方便的。

  改變提示框(hint)的特性

  許多程序在特定的控件上都有提示框,當鼠標在這些控件上停一定時間以後就可以顯示提示框。在Delphi中實現提示框是非常容易的,只要設定相應的屬性即可,這裡就不詳細討論了。但通常的提示框都是以黃色矩形框的形式顯示在對應控件的左下角,以下這段代碼說明了如何使用API改變delphi中提示屬性的一些特性。有一點需要聲明的是代碼中使用到的GetIconInfo函數只適用win32(也就是說你只能在Delphi2.0以上的版本中使用以下代碼。

  把以下代碼加入到主窗體的Oncreate事件中,加入代碼後的主窗體的formcreate過程的代碼如下所示:

  procedureTMainForm.FormCreate(Sender:TObjec t);

  begin

 ...

  Application.OnShowHint.ΚGetHintInfo;

  end;

  然後把以下過程聲明加入到主窗體的public段

  procedureGetHintInfo(VarHintStr:sting;VarCanShow:boolean;varHintInfo:THintInfo);

  最後,在主窗體的implementation部分加入過程的實現代碼,加入完代碼的過程如下所示:

  procedureTMainForm.GetHintInfo(varHintStr:string;varCanShow:boolean;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved