DELPHI中使用API函数详解

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 showman 的 blog

大家别误会,这里的戴妃可不是已经香销玉殒的英国王妃,而是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的联机帮助手册。

本文关键:delphi
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top