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

DELPHI中使用API函數詳解

編輯:Delphi

大家別誤會,這裡的戴妃可不是已經香銷玉殒的英國王妃,而是INPRISE的招牌產品DELPHI的中文譯名!介紹DELPHI的文章已經很多了,大家是不是被它強大的開發功能所折服?可視化編程的出現,使很多朋友圓了程序夢。的確,幾個控件的搭配再加上幾條語句,也許一個軟件就出來了。但是,你是否已不滿足使用別人的元件?想更深入的了解WINDOWS的編程?更換的掌握DELPHI?OK,請繼續往下看。

  DOS下的INT21H對於開發DOS程序很重要,而對於在WINDOWS下開發程序,了解API函數是很有必要的。元件就像招式,而API函數就好比內功心法,有了高深的內力,那麼學習招式就易如反掌啦。所以,掌握的API函數越多,你就越可能成為DELPHI高手,甚至WINDOWS編程高手。所以,無論是C++,VB還是DELPHI都無一例外的支持API函數的調用,C++和DELPHI是全面支持API函數,而VB僅支持部分API函數(部分也不少了,已經有幾百條之多),尤其是DELPHI調用API函數最方便,已經達到與API函數合二為一的境界,調用API函數和使用自身的函數幾乎一樣。下面我將為大家詳細講解API函數在DELPHI中的使用,每條語句我都會寫個小例子,讓大家更能明白其是如何使用的。如果你認真看完本文後,相信大家一定會對DELPHI編程有更深的了解。但是千萬不要半途而廢,畏難怕繁,記住:欲練神功,必下苦功!學編程,可不是玩游戲,不能弄個FPE啥作弊的。

  (一)控件與消息函數

  ①語法:AnyPopup: BOOL;

  單元:windows.pas(該單元DELPHI會自行在USES裡加上,下同)

  作用:判斷屏幕上是否存在任何彈出式窗口

  返回值:BOOL,如存在彈出式菜單,則返回TRUE

  注解:對該函數來說,彈出式菜單包含所有可見的包容頂級窗口,無論彈出式還是重疊窗口

  示例:

  procedure TForm1.Button1Click(Sender: TObject);

  begin

  if (AnyPopup) then

  Label1.Caption:=‘Pop-ups found: TRUE

  else

  Label1.Caption:=‘Pop-ups found: FALSE;

  end;

  ②語法:EnableWindow(hWnd: HWND; bEnable: BOOL): BOOL;單元:windows.pas

  作用:指定的窗口裡允許或禁止所有鼠標及鍵盤輸入

  返回值:BOOL,如果返回真,WINDOWS已經禁止,否則返回假

  示例:

  procedure TForm1.Button1Click(Sender: TObject);

  begin

  if (IsWindowEnabled(Edit1.Handle)) then

  begin

  EnableWindow(Edit1.Handle,FALSE);

  Button1.Caption:=‘Enable Window;

  Edit1.Text:=‘This window is disabled;

  end

  else

  begin

  EnableWindow(Edit1.Handle,TRUE);

  Button1.Caption:=‘Disable Window;

  Edit1.Text:=‘This window is enabled;

  end;

  end;

  ③語法:FlashWindow(hWnd: HWND; bInvert: BOOL): BOOL;

  單元:windows.pas

  作用:閃爍顯示指定窗口。這意味著窗口的標題和說明文字會發生變化,似乎從活動切換到非活動狀態、或反向切換。通常對不活動的窗口應用這個函數,引起用戶的注意

  返回值:BOOL,如窗口在調用前處於活動狀態,則返回TRUE

  注解:該函數通常與一個計數器組合使用,生成連續的閃爍效果。

  在windows nt及windowsfor workgroup中,bInvert參數會被忽略。

  但在windows 95中不會忽略

  示例:

  procedure TForm1.Timer1Timer(Sender: TObject);

  begin

  FlashWindow(Form1.Handle, TRUE);

  FlashWindow(Application.handle, TRUE);

  end;

  ④語法:SetWindowText(hWnd: HWND;lpString: PChar): BOOL;

  單元:windows.pas

  作用:設置窗口的標題文字或控件的內容

  返回值:設置成功返回TRUE,否則返回FALSE

  示例:

  procedure TForm1.Button1Click(Sender: TObject);

  var

  TheText: PChar;

  TextLen: Integer;

  begin

  TextLen:=GetWindowTextLength(Form1.Handle);

  GetMem(TheText,TextLen);

  GetWindowText(Form1.Handle,TheText,TextLen+1);

  Edit1.Text:=string(TheText);

  FreeMem(TheText);

  end;

  procedure TForm1.Button2Click(Sender: TObject);

  begin

  SetWindowText(Form1.Handle, PChar(Edit1.Text));

  end;

  ⑤語法:IsWindow(hWnd: HWND): BOOL;

  單元:windows.pas

  作用:判斷一個窗口句柄是否有效

  返回值:有效返回TRUE,否則返回FALSE

  示例:

  procedure TForm1.Button1Click(Sender: TObject);

  begin

  if (IsWindow(Button1.Handle)) then

  Button1.Caption:=‘TRUE

  else

  Button1.Caption:=‘FALSE;

  end;

  怎麼樣,還過瘾吧?今天是第一次,就介紹些較容易接受的函數,否則朋友們肯定會喊吃不消。不知道朋友們對這樣的編排形式能夠接受嗎?還有,我會按照API函數的分類(控件與消息函數/硬件與系統函數/菜單函數/文本和字體函數/打印函數等等)分別介紹,但我不會介紹全部的API函數,否則大有騙稿費之嫌疑,而且本人的水平也難做到每個語句都有示例,只介紹平常用得上的,本人經常使用的函數,有時也會介紹一下比較隱秘但卻非常有用的API函數。

  附TIPS(DELPHI技巧)一個:

  如果有這樣一個目錄:

  c:windowsmedia empabcsoundchime.wav

  我希望它能縮短成:

  c:windows..soundchime.wav

  如何寫程序呢?

  回答:

  用下面的過程試試:

  function shortenfilename(s : string) : string;

  var drive,curdrive : string[2];

  dir,curdir : string[80];

  name : string[20];

  ext : string[5];

  i : byte;

  begin

  for i:=1 to length(s) do s[i]:=upcase(s[i]);

  s:=fexpand(s);

  fsplit(s,dir,name,ext);

  drive:=copy(dir,1,2);

  dir:=copy(dir,4,length(dir)-3);

  getdir(0,curdir);

  curdrive:=copy(curdir,1,2);

  curdir:=copy(curdir,4,length(curdir)-3)+‘;

  if drive=curdrive then begin

  if copy(dir,1,length(curdir))=curdir then begin

  i:=length(curdir);

  if length(dir)<>i then dir:=dir+‘;

  shortenfilename:=copy(dir,i+1,length(dir)-i-1)+name+ext;

  end else shortenfilename:=copy(s,3,length(s)-2);

  end else shortenfilename:=s;

  end;

  注:本文只為提高DELPHI能力的朋友所寫,非一般入門級的教程,所以文中所有DELPHI的自身函數和一些基本技巧不再說明,請朋友查閱DELPHI的聯機幫助手冊。

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