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

淺議Delphi中的Windows API調用

編輯:Delphi

為了能在Windows下快速開發應用程序,Delphi對Windows的控件都進行了很好的封裝,這樣,我們就可以直接使用Delphi的控件來編寫程序,而不用使用格式、調用控制復雜的API來進行開發,為我們節省了大量的開發時間。

可有時候這些控件解決不了我們的問題,這個時候我們就不得不使用API了,也就是Windows的應用程序接口。這樣,問題也就隨之而來了,API是用C++語言編寫的,而Delphi的腳本語言是PASCAL,兩者使用的數據類型是不兼容了。那麼,如何在Delphi中調用數據類型不兼容的API呢,這就是本文中我為大家介紹的內容了。

我們在Delphi中最常用到的一個數據類型是String類型,可API並不支持,那麼當我們需要從API中得到一個string類型的值時該如何去做呢?看看下面的程序:

function GetSysPath: string;
var
 sTmp: string;
begin
 result := ’’;
 //調用WindowsApi得到Windows的系統路徑
 SetLength(sTmp,256);
 GetSystemDirectory(PChar(sTmp),256); //這是一個API函數
 SetLength(sTmp,StrLen(PChar(sTmp)));
 result := sTmp + ’\’;
end;

在該函數中,調用了API函數GetSystemDirectory,它的第一個參數是一個指向以NULL結尾字符串的指針,在Delphi中,這種數據類型是PCHAR,所以這裡要進行數據類型轉換,要寫成PChar(sTmp)。 我們再看另外一個例子:

procedure TForm1.ChangeAppIcon;
var
 icon: TIcon ;
begin
 icon := TIcon.Create;
 try
  icon.Handle := ExtractIcon(application.Handle,pchar(’D:\WINNT\regedit.exe’),0); //這是一個API函數
  if icon.Handle <> 0 then
   application.Icon := icon;
  finally
   icon.Free;
 end;
end;

該過程通過API函數得到一個應用程序的圖標,來動態改變當前程序的圖標。API函數ExtractIcon返回的是一個HICON類型,是一個指向圖標的指針,如果寫成application.Icon = ExtractIcon(application.Handle, pchar(’D:\WINNT\regedit.exe’), 0); 編譯肯定不通過,數據類型不一致嗎!application.Icon屬性是Ticon類型的,我們可以創建一個 Ticon,把API的返回值賦給Ticon.Handle,最後將ICON賦值給application.Icon,就解決了我們的問題。

通過上面的例子,我們可以看到,Delphi並不直接支持Windows中的數據類型,只能通過封裝的形式來支持。要熟練地調用API函數,我們一定要熟悉Delphi的封裝機制,多看、多寫,多去實踐,那麼,我們就能夠隨心所欲的調用API函數了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved