DELPHI中使用API函式詳解 (轉)
DELPHI中使用API函式詳解 (轉)[@more@]大家別誤會,這裡的戴妃可不是已經香銷玉殞的英國王妃,而是INPRISE的招牌產品的中文譯名!介紹DELPHI的文章已經很多了,大家是不是被它強大的開發功能所折服?視覺化的出現,使很多朋友圓了夢。的確,幾個的搭配再加上幾條語句,也許一個就出來了。但是,你是否已不滿足使用別人的元件?想更深入的瞭解的程式設計?更換的掌握DELPHI?OK,請繼續往下看。
DOS下的INT21H對於開發DOS程式很重要,而對於在WINDOWS下開發程式,瞭解是很有必要的。元件就像招式,而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: T);
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
註解:該函式通常與一個計數器組合使用,生成連續的閃爍效果。
在及windowor 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函式。
附(DELPHI技巧)一個:
如果有這樣一個目錄:
c:windowsmediatempabcsoundchime.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的聯機幫助手冊。
DOS下的INT21H對於開發DOS程式很重要,而對於在WINDOWS下開發程式,瞭解是很有必要的。元件就像招式,而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: T);
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
註解:該函式通常與一個計數器組合使用,生成連續的閃爍效果。
在及windowor 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函式。
附(DELPHI技巧)一個:
如果有這樣一個目錄:
c:windowsmediatempabcsoundchime.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的聯機幫助手冊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-998707/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中pivot函式詳解Oracle函式
- Python中Numpy函式詳解Python函式
- TypeScript中的函式詳解TypeScript函式
- 詳解MySQL中的SQRT函式的使用方法MySql函式
- python函式每日一講 - float函式型別轉換詳解Python函式型別
- MySQL中count(*)函式原理詳解MySql函式
- Python隨機函式random使用詳解Python隨機函式random
- PHP中debug_backtrace函式詳解PHP函式
- 詳解 JS 中 new 呼叫函式原理JS函式
- SetupDiGetClassDevs函式詳解dev函式
- 詳解Java函式式介面Java函式
- Oracle中的正規表示式(及函式)詳解Oracle函式
- OpenCV中的findContours函式引數詳解OpenCV函式
- mysql常用函式詳解MySql函式
- 箭頭函式詳解函式
- python socket函式詳解Python函式
- 建構函式詳解函式
- 函式引數詳解函式
- 3.11 solidity 函式詳解Solid函式
- fcntl函式用法詳解函式
- hive視窗分析函式使用詳解系列一Hive函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- PyTorch 中 torch.matmul() 函式的文件詳解PyTorch函式
- 【多程式】Linux中fork()函式詳解|多程式Linux函式
- hive視窗分析函式使用詳解系列二之分組排序視窗函式Hive函式排序
- Oracle分析函式之開窗函式over()詳解Oracle函式
- Python的hasattr() getattr() setattr() 函式使用方法詳解Python函式
- Java建構函式詳解Java函式
- 箭頭函式this指向詳解函式
- PHP BC Math 函式詳解PHP函式
- vimscript-expand函式詳解函式
- jquery.ajaxSetup()函式詳解jQuery函式
- Python中的56個內建函式詳解(七)Python函式
- 閉包詳解二:JavaScript中的高階函式JavaScript函式
- 從Delphi到Lazarus——Delphi轉換器
- 【函式】Oracle12c 列轉行函式使用listagg函式Oracle
- Python正規表示式 findall函式詳解Python函式
- 函式式API簡介函式API