Delphi 使用API函数详解

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+‘ '
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值