分享
 
 
 

DELPHI中使用API函数详解

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

大家别误会,这里的戴妃可不是已经香销玉殒的英国王妃,而是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:\windows\media\temp\abc\sound\chime.wav

我希望它能缩短成:

c:\windows\..\sound\chime.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的联机帮助手册。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有