windows api 入门 (copy)(20分)

  • 主题发起人 千中元
  • 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
。<br>  DOS下的INT21H对于开发DOS程序很重要,而对于在WINDOWS下开<br>发程序,了解API函数是很有必要的。元件就像招式,而API函数就好<br>比内功心法,有了高深的内力,那么学习招式就易如反掌啦。所以,<br>掌握的API函数越多,你就越可能成为DELPHI高手,甚至WINDOWS编程<br>高手。所以,无论是C++,VB还是DELPHI都无一例外的支持API函数<br>的调用,C++和DELPHI是全面支持API函数,而VB仅支持部分API函<br>数(部分也不少了,已经有几百条之多),尤其是DELPHI调用API函<br>数最方便,已经达到与API函数合二为一的境界,调用API函数和使用<br>自身的函数几乎一样。下面我将为大家详细讲解API函数在DELPHI中<br>的使用,每条语句我都会写个小例子,让大家更能明白其是如何使用<br>的。如果你认真看完本文后,相信大家一定会对DELPHI编程有更深的<br>了解。但是千万不要半途而废,畏难怕繁,记住:欲练神功,必下苦<br>功!学编程,可不是玩游戏,不能弄个FPE啥作弊的。<br>  (一)控件与消息函数<br>  ①语法:AnyPopup: BOOL; <br>  单元:windows.pas(该单元DELPHI会自行在USES里加上,下同)<br>  作用:判断屏幕上是否存在任何弹出式窗口<br>  返回值:BOOL,如存在弹出式菜单,则返回TRUE <br>  注解:对该函数来说,弹出式菜单包含所有可见的包容顶级窗口,<br>无论弹出式还是重叠窗口<br>  示例:<br>  procedure TForm1.Button1Click(Sender: TObject); <br>  begin <br>  if (AnyPopup) then <br>  Label1.Caption:=‘Pop-ups found: TRUE' <br>  else <br>  Label1.Caption:=‘Pop-ups found: FALSE'; <br>  end; <br>  ②语法:EnableWindow(hWnd: HWND; bEnable: BOOL): BOOL;单<br>元:windows.pas <br>  作用:指定的窗口里允许或禁止所有鼠标及键盘输入<br>  返回值:BOOL,如果返回真,WINDOWS已经禁止,否则返回假<br>  示例:<br>  procedure TForm1.Button1Click(Sender: TObject); <br>  begin <br>  if (IsWindowEnabled(Edit1.Handle)) then <br>  begin <br>  EnableWindow(Edit1.Handle,FALSE); <br>  Button1.Caption:=‘Enable Window'; <br>  Edit1.Text:=‘This window is disabled'; <br>  end <br>  else <br>  begin <br>  EnableWindow(Edit1.Handle,TRUE); <br>  Button1.Caption:=‘Disable Window'; <br>  Edit1.Text:=‘This window is enabled'; <br>  end; <br>  end; <br>  ③语法:FlashWindow(hWnd: HWND; bInvert: BOOL): BOOL; <br>  单元:windows.pas <br>  作用:闪烁显示指定窗口。这意味着窗口的标题和说明文字会发<br>生变化,似乎从活动切换到非活动状态、或反向切换。通常对不活动<br>的窗口应用这个函数,引起用户的注意<br>  返回值:BOOL,如窗口在调用前处于活动状态,则返回TRUE <br>  注解:该函数通常与一个计数器组合使用,生成连续的闪烁效果<br>。<br>  在windows nt及windowsfor workgroup中,bInvert参数会被忽<br>略。<br>  但在windows 95中不会忽略<br>  示例:<br>  procedure TForm1.Timer1Timer(Sender: TObject); <br>  begin <br>  FlashWindow(Form1.Handle, TRUE); <br>  FlashWindow(Application.handle, TRUE); <br>  end; <br>  ④语法:SetWindowText(hWnd: HWND;lpString: PChar): BOOL;<br><br>  单元:windows.pas <br>  作用:设置窗口的标题文字或控件的内容<br>  返回值:设置成功返回TRUE,否则返回FALSE <br>  示例:<br>  procedure TForm1.Button1Click(Sender: TObject); <br>  var <br>  TheText: PChar; <br>  TextLen: Integer; <br>  begin <br>  TextLen:=GetWindowTextLength(Form1.Handle); <br>  GetMem(TheText,TextLen); <br>  GetWindowText(Form1.Handle,TheText,TextLen+1); <br>  Edit1.Text:=string(TheText); <br>  FreeMem(TheText); <br>  end; <br>  procedure TForm1.Button2Click(Sender: TObject); <br>  begin <br>  SetWindowText(Form1.Handle, PChar(Edit1.Text)); <br>  end; <br>  ⑤语法:IsWindow(hWnd: HWND): BOOL; <br>  单元:windows.pas <br>  作用:判断一个窗口句柄是否有效<br>  返回值:有效返回TRUE,否则返回FALSE <br>  示例:<br>  procedure TForm1.Button1Click(Sender: TObject); <br>  begin <br>  if (IsWindow(Button1.Handle)) then <br>  Button1.Caption:=‘TRUE' <br>  else <br>  Button1.Caption:=‘FALSE'; <br>  end; <br>  怎么样,还过瘾吧?今天是第一次,就介绍些较容易接受的函数,<br>否则朋友们肯定会喊吃不消。不知道朋友们对这样的编排形式能够接<br>受吗?还有,我会按照API函数的分类(控件与消息函数/硬件与系统<br>函数/菜单函数/文本和字体函数/打印函数等等)分别介绍,但我不<br>会介绍全部的API函数,否则大有骗稿费之嫌疑,而且本人的水平也<br>难做到每个语句都有示例,只介绍平常用得上的,本人经常使用的函<br>数,有时也会介绍一下比较隐秘但却非常有用的API函数。<br>  附TIPS(DELPHI技巧)一个:<br>  如果有这样一个目录:<br>  c:/windows/media/temp/abc/sound/chime.wav <br>  我希望它能缩短成:<br>  c:/windows/../sound/chime.wav <br>  如何写程序呢?<br>  回答:<br>  用下面的过程试试:<br>  function shortenfilename(s : string) : string; <br>  var drive,curdrive : string[2]; <br>  dir,curdir : string[80]; <br>  name : string[20]; <br>  ext : string[5]; <br>  i : byte; <br>  begin <br>  for i:=1 to length(s) do s[i]:=upcase(s[i]); <br>  s:=fexpand(s); <br>  fsplit(s,dir,name,ext); <br>  drive:=copy(dir,1,2); <br>  dir:=copy(dir,4,length(dir)-3); <br>  getdir(0,curdir); <br>  curdrive:=copy(curdir,1,2); <br>  curdir:=copy(curdir,4,length(curdir)-3)+‘/'; <br>  if drive=curdrive then begin <br>  if copy(dir,1,length(curdir))=curdir then begin <br>  i:=length(curdir); <br>  if length(dir)&lt;&gt;i then dir:=dir+‘/'; <br>  shortenfilename:=copy(dir,i+1,length(dir)-i-1)+name<br>+ext; <br>  end else shortenfilename:=copy(s,3,length(s)-2); <br>  end else shortenfilename:=s; <br>  end; <br>  注:本文只为提高DELPHI能力的朋友所写,非一般入门级的教程,<br>所以文中所有DELPHI的自身函数和一些基本技巧不再说明,请朋友查<br>阅DELPHI的联机帮助手册。
 
Thanks!<br>&gt;&gt;
 
这种帖子该表扬
 
真是客气教人入门还给分。
 
结束帖子的时候一人一分,什么时候想再看也方便。
 
千中元真是<br>高人<br>
 
老千,在哪里弄的东西,还有吗?
 
受益不浅。<br>愿付20分以表感激之情。<br>第一次使用我的分数,不知怎样付出,请坛主帮忙。
 
thankx<br>&nbsp;给斑竹:最好用Email功能将所有该问题的以前记录全发给我(可选)
 
:千中元<br>继续写<br>《商情报见过》<br>期待NEXT
 
呵呵,伟大的同志,我感谢你
 
好。。。。。好。。。。。。。。<br><br>
 
我快爱上你了<br>老千同志
 
你好啊,我喜欢这样的东西.&lt;font color="red"&gt;Go on!&lt;/font&gt;<br>注:我可不是为了那一分来的 :p
 
2 小猪,<br>&nbsp; &nbsp;我第一次听别人对我说这样的话。。可惜你不是mm:(<br>2 beta,<br>&nbsp; &nbsp;这种东西可遇不可求。。如果再遇到就贴了。
 
哈哈!什么报上有的!我见过了!^0^<br>不过……你扫描的吗???
 
报纸上的是鸡,网络上的是蛋。<br>先有谁?
 
&gt;先有谁?<br>你说呢? :)
 
顶部