<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[小氓男№部落]]></title>
  <subtitle type="html"><![CDATA[努力是进步的开始！]]></subtitle>
  <id>http://www.02t.cn/</id>
  <link rel="alternate" type="text/html" href="http://www.02t.cn/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.02t.cn/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2012-01-16T11:35:31+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[旺旺群发器 （delphi源码）]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=7" label="DELPHI代码" /> 
	  <updated>2012-01-16T11:35:31+08:00</updated>
	  <published>2012-01-16T11:35:31+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://www.02t.cn/download.asp?id=15" border="0" alt=""/><br/><br/>DELPHI写的旺旺群发器，可用于旺旺2009，2010群发信息，可分析网页批量获取卖定或买家，可保存数据信息。<br/><a target="_blank" href="http://www.02t.cn/download.asp?id=16" rel="external">下载地址</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/code/215.html" /> 
	  <id>http://www.02t.cn/default.asp?id=215</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[外挂编写的几个API函数]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=7" label="DELPHI代码" /> 
	  <updated>2011-12-06T10:06:31+08:00</updated>
	  <published>2011-12-06T10:06:31+08:00</published>
		  <summary type="html"><![CDATA[3个 API函数<br/>&nbsp;&nbsp;GetWindowThreadProcessId :获取进程ID <br/>&nbsp;&nbsp;OpenProcess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:获取进程句柄&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;ReadProcessMemory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:读出指定进程 指定位置 的数据到缓冲区 <br/>DWORD GetWindowThreadProcessId(<br/>&nbsp;&nbsp;HWND hWnd,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 窗口句柄 由FindWindow获取<br/>&nbsp;&nbsp;LPDWORD lpdwProcessId&nbsp;&nbsp;// 存放进程ID的 变量<br/>);<br/><br/>HANDLE OpenProcess(<br/>&nbsp;&nbsp;DWORD dwDesiredAccess,&nbsp;&nbsp;&nbsp;&nbsp;// PROCESS_VM_READ o&#114; PROCESS_VM_WRITE 访问权限<br/>&nbsp;&nbsp;BOOL bInheritHandle,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 这个是继承标志 在这里 为false<br/>&nbsp;&nbsp;DWORD dwProcessId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 进程ID&nbsp;&nbsp;由GetWindowThreadProcessId 获取<br/>);<br/> BOOL ReadProcessMemory(<br/>&nbsp;&nbsp;HANDLE hProcess,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 进程句柄 由OpenProcess函数获取<br/>&nbsp;&nbsp;LPCVOID lpBaseAddress,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 要读出数据的地址：$47d814<br/>&nbsp;&nbsp;LPVOID lpBuffer,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 用于存放读取数据的地址：sitNum<br/>&nbsp;&nbsp;DWORD nSize,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 要读出的数据大小&nbsp;&nbsp;4<br/>&nbsp;&nbsp;LPDWORD lpNumberOfBytesRead // 读出数据的实际大小 <br/>);<br/> <br/>一.读指定进程内存:ReadProcessMemory<br/>&nbsp;&nbsp;此函数的定义为:function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;<br/>&nbsp;&nbsp;hProcess指向被读取内存的进程的句柄,此句柄必须有PROCESS_VM_READ权限.<br/>&nbsp;&nbsp;lpBaseAddress:指向被读取的内存在进程中基地址的指针.<br/>&nbsp;&nbsp;lpBuffer:指向用于保存读出数据的缓冲区的指针.<br/>&nbsp;&nbsp;nSize:指定从指定进程中要读取的字节数.<br/>&nbsp;&nbsp;lpNumberOfBytesRead:指向读出数据的实际字节数.<br/><br/>二.写指定进程内存:WriteProcessMemory<br/>&nbsp;&nbsp;此函数的定义为:function WriteProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesWritten: DWORD): BOOL; stdcall;<br/>参数含义同ReadProcessMemory,其中hProcess句柄要有对进程的PROCESS_VM_WRITE和PROCESS_VM_OPERATION权限.lpBuffer为要写到指定进程的数据的指针.<br/><br/> <br/><br/> <br/><br/>procedure TForm1.Timer1Timer(Sender: TObject);<br/>var<br/>&nbsp;&nbsp;hgame:HWND;<br/>&nbsp;&nbsp;pidgame:DWORD;<br/>&nbsp;&nbsp;hprocess:HWND;<br/>&nbsp;&nbsp;chessdata:DWORD;<br/>&nbsp;&nbsp;readbyte:DWORD;<br/>&nbsp;&nbsp;meney:DWORD;<br/><br/>begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;meney:=10000;<br/>&nbsp;&nbsp;//获取游戏窗口句柄<br/>&nbsp;&nbsp;&nbsp;&nbsp;hGame:=Findwindow(nil,&#39;Red Alert 2&#39;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//获取游戏进程 PID<br/>&nbsp;&nbsp;&nbsp;&nbsp;windows.GetWindowThreadProcessId(hGame,PidGame) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//获取游戏进程句柄<br/>&nbsp;&nbsp;&nbsp;&nbsp;hProcess:=windows.OpenProcess(windows.PROCESS_ALL_ACCESS,false,PidGame);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if hgame&lt;&gt;0 then Label1.Caption:=&#39;游戏运行中&#39;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label1.Caption:=&#39;游戏未启动&#39;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if CheckBox1.Checked then&nbsp;&nbsp;//写数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meneyxg;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;WriteProcessMemory(hprocess,Pointer($00a1e0c4),@ChessData,4,readbyte);<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读出数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadProcessMemory(hProcess,Pointer($00a1e0c4),@ChessData,4,readByte);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadProcessMemory(hProcess,Pointer(ChessData+$24c),@ChessData,4,readByte);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if Label1.Caption=&#39;游戏运行中&#39; then Label2.Caption:=&#39;金钱：&#39;+IntToStr(chessdata)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label2.Caption:=&#39;&#39;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //释放进程句柄<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(Hprocess);<br/>end;<br/><br/><br/><br/>&nbsp;&nbsp;procedure meneyxg();<br/>var<br/> hgame:HWND;<br/>&nbsp;&nbsp;pidgame:DWORD;<br/>&nbsp;&nbsp;hprocess:HWND;<br/>&nbsp;&nbsp;chessdata:DWORD;<br/>&nbsp;&nbsp;readbyte:DWORD;<br/>&nbsp;&nbsp;money:DWORD;<br/>begin<br/>&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;ChessData:=1000;<br/>&nbsp;&nbsp;//获取游戏窗口句柄<br/>&nbsp;&nbsp;&nbsp;&nbsp;hGame:=Findwindow(nil,&#39;Red Alert 2&#39;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//获取游戏进程 PID<br/>&nbsp;&nbsp;&nbsp;&nbsp;windows.GetWindowThreadProcessId(hGame,PidGame) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//获取游戏进程句柄<br/>&nbsp;&nbsp;&nbsp;&nbsp;hProcess:=windows.OpenProcess(windows.PROCESS_ALL_ACCESS,false,PidGame);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ReadProcessMemory(hProcess,Pointer($a1e0c4),@ChessData,4,readByte);<br/>&nbsp;&nbsp;&nbsp;&nbsp; money:=10000;<br/>&nbsp;&nbsp;&nbsp;&nbsp;WriteProcessMemory(hprocess,Pointer(ChessData+$24c),@money,4,readbyte);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//释放进程句柄<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(Hprocess);<br/>end;<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/code/214.html" /> 
	  <id>http://www.02t.cn/default.asp?id=214</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Delphi中分隔字符串函数的使用 .]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=7" label="DELPHI代码" /> 
	  <updated>2011-11-30T08:20:20+08:00</updated>
	  <published>2011-11-30T08:20:20+08:00</published>
		  <summary type="html"><![CDATA[delphi中内置的字符串分割函数已经很强大了，能够满足我们基本的使用需要。主要有两种：<br/><br/>ExtractStrings(Separators: TSysCharSet; WhiteSpace: TSysCharSet; Content: PAnsiChar; Strings: TStrings): Integer;<br/><br/>Separators 参数指定一组分割符，所有的子串都是用它们分割的。但是成对的引号内的分割符会被忽略。<br/><br/> WhiteSpace 参数指定每个子串开头被忽略的字符s。<br/><br/><br/> Content 参数就是被分割的“源”串了。<br/><br/><br/> Strings 参数用于接收分割后的各个子串。它的原有内容不会被清空。<br/><br/> 该函数的特点是能够自动除去空字符，即&#39;&#39;。大多数情况下是很好的，但是如果我么需要这些空字符时就很麻烦了（如导数据库，空字符串代表一个可Null的字段），因此可以用TStringlist的分割方法：<br/><br/>Delimiter：指定分割符，默认为逗号。<br/><br/>DelimitedText：指定需要分割的字符串，其中可以包含空字符。<br/><br/>但是，这个函数也有问题：它默认将空格也作为分割符，也就是说你的字符串中要是包含空格，它就会把字符串分开，也是很麻烦的。<br/><br/>因此，真正要适合我们的需求还是需要自己动手完善功能的，比如可以用StringReplce方法替换所有空格；对于空字符可以在拼凑源字符串时用空格代替，在分割时在用空替换等等。<br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/code/213.html" /> 
	  <id>http://www.02t.cn/default.asp?id=213</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[DELPHI字符串处理 ]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=7" label="DELPHI代码" /> 
	  <updated>2011-11-27T13:39:06+08:00</updated>
	  <published>2011-11-27T13:39:06+08:00</published>
		  <summary type="html"><![CDATA[1. delphi的字符截取函数LeftStr, MidStr, RightStr拆分字符串<br/>这几个函数都包含在StrUtils中，所以需要uses StrUtils; <br/>假设字符串是 Dstr := ’Delphi is the BEST’, 那么 <br/>LeftStr(Dstr, 5) := ’Delph’ <br/>MidStr(Dstr, 6, 7) := ’i is th’ <br/>RightStr(Dstr, 6) := ’e BEST’ <br/><br/>~~~~~~~~~~~~~~~~~~~~~~~~~ <br/>function RightStr <br/>&nbsp;&nbsp;&nbsp;&nbsp;(Const Str: String; Size: Word): String; <br/>begin <br/>&nbsp;&nbsp;if Size &gt; Length(Str) then Size := Length(Str) ; <br/>&nbsp;&nbsp;RightStr := Copy(Str, Length(Str)-Size+1, Size) <br/>end; <br/>function MidStr <br/>&nbsp;&nbsp;&nbsp;&nbsp;(Const Str: String; From, Size: Word): String; <br/>begin <br/>&nbsp;&nbsp;MidStr := Copy(Str, From, Size) <br/>end; <br/>function LeftStr <br/>&nbsp;&nbsp;&nbsp;&nbsp;(Const Str: String; Size: Word): String; <br/>begin <br/>&nbsp;&nbsp;LeftStr := Copy(Str, 1, Size) <br/>end; <br/><br/>这几个函数经常结合Pos, Length, Copy使用<br/><br/><br/>拆分字符串的函数 <br/> <br/>delphi中没有提供此类函数，从大富翁找了一个<br/>function split(src,dec : string):TStringList;<br/>var<br/>&nbsp;&nbsp;i : integer;<br/>&nbsp;&nbsp;str : string;<br/>begin<br/>&nbsp;&nbsp;result := TStringList.Cr&#101;ate;<br/>&nbsp;&nbsp;repeat<br/>&nbsp;&nbsp;&nbsp;&nbsp;i := pos(dec,src);<br/>&nbsp;&nbsp;&nbsp;&nbsp;str := copy(src,1,i-1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (str=&#39;&#39;) and (i&gt;0) then<br/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;del&#101;te(src,1,length(dec));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if i&gt;0 then<br/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.Add(str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;del&#101;te(src,1,i+length(dec)-1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;until i&lt;=0;<br/>&nbsp;&nbsp;if src&lt;&gt;&#39;&#39; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;result.Add(src);<br/>end;<br/><br/>procedure TForm1.Button1Click(Sender: TObject);<br/>var<br/>&nbsp;&nbsp;ss : TStringList;<br/>&nbsp;&nbsp;str,dec : string;<br/>begin<br/>&nbsp;&nbsp;str := &#39;1111||2222||||3333|||4444||&#39;;<br/>&nbsp;&nbsp;dec := &#39;||&#39;;<br/>&nbsp;&nbsp;ss := split(str,dec);<br/>&nbsp;&nbsp;memo1.Lines.AddStrings(ss);<br/>&nbsp;&nbsp;ss.Free;<br/>end;<br/><br/> <br/><br/>2.Delphi字符串分割函数<br/><br/>function TForm1.SplitString(Source,Deli:string):TStringList;//拆分字符串函数<br/>var<br/>EndOfCurrentString:byte; <br/>StringList:TStringList;<br/>begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;StringList:=TStringList.Cr&#101;ate;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while Pos(Deli,Source)&gt;0 do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //当存在拆分符号时<br/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndOfCurrentString:=Pos(Deli,Source);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取分隔符的位置<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringList.add(Copy(Source,1,EndOfCurrentString-1));&nbsp;&nbsp;&nbsp;&nbsp;//添加项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Source:=Copy(Source,EndOfCurrentString+length(Deli),length(Source)-EndOfCurrentString); //减去已添加项和分隔符<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;&nbsp;&nbsp;StringList.Add(source);&nbsp;&nbsp; //如果不存在分隔符时，直接作为项目添加<br/>&nbsp;&nbsp;&nbsp;&nbsp;Result:=StringList;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置返回类型<br/>end;<br/><br/>用法如下:<br/><br/>procedure TForm1.Button2Click(Sender: TObject);<br/>var<br/>s:Tstringlist;<br/>i:integer;<br/>str:string;<br/>begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;listbox2.Items.Clear;<br/>&nbsp;&nbsp;&nbsp;&nbsp;s:=Tstringlist.Cr&#101;ate;<br/>&nbsp;&nbsp;&nbsp;&nbsp;str:=Edit1.Text;<br/>try<br/>&nbsp;&nbsp; s.Assign(Form1.SplitString(str,&#39;^&#39;));<br/>&nbsp;&nbsp; for i:=0 to s.Count-1 do<br/>&nbsp;&nbsp;&nbsp;&nbsp; listbox2.Items.Add(s.Strings[i]);<br/>finally<br/>&nbsp;&nbsp; freeandnil(s);<br/>end;<br/><br/>另Delphi中自带一个分割字符串函数ExtractStrings<br/><br/>function ExtractStrings(Separators: TSysCharSet; WhiteSpace: TSysCharSet; Content: PAnsiChar; Strings: TStrings): Integer;<br/><br/>[参数注释]:<br/>Separators 参数指定一组分割符，所有的子串都是用它们分割的。但是成对的引号内的分割符会被忽略（参看下面的例子）。<br/>WhiteSpace 参数指定每个子串开头被忽略的字符s。<br/>Content 参数就是被分割的“源”串了。<br/>Strings 参数用于接收分割后的各个子串。它的原有内容不会被清空。别忘了Cr&#101;ate哦。<br/>另外，EctractStrings不会把（忽略WhiteSpaces后的）空串加入到Strings中。<br/><br/>[Example]<br/><br/>比如<br/>ABC|...&nbsp;&nbsp; DEF|#### GHI|&#34;不会被分开|# www.farproc.com&#34;<br/>要得到<br/><br/>ABC<br/>DEF<br/>GHI<br/>不会被分开|# www.farproc.com<br/><br/>四个子串可以用下面的代码：<br/><br/>uses<br/>&nbsp;&nbsp; Classes;<br/>var<br/>&nbsp;&nbsp; ASource: PChar;<br/>&nbsp;&nbsp; AStr: String;<br/>&nbsp;&nbsp; ACount: Integer;<br/>&nbsp;&nbsp; AStrings: TStringList;<br/>begin<br/>&nbsp;&nbsp; ASource := &#39;ABC|...&nbsp;&nbsp; DEF|#### GHI|&#34;不会被分开|# www.farproc.com&#34;&#39;;<br/>&nbsp;&nbsp; AStrings := TStringList.Cr&#101;ate;<br/>&nbsp;&nbsp; try<br/>&nbsp;&nbsp;&nbsp;&nbsp; ACount := ExtractStrings([&#39;|&#39;], [&#39; &#39;, &#39;#&#39;, &#39;.&#39;], ASource, AStrings);<br/>&nbsp;&nbsp;&nbsp;&nbsp; {do any further processing}<br/>&nbsp;&nbsp;&nbsp;&nbsp; /for AStr in AStrings do<br/>&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; Writeln(AStr);<br/>&nbsp;&nbsp; finally<br/>&nbsp;&nbsp;&nbsp;&nbsp; AStrings.Free;<br/>&nbsp;&nbsp; end;<br/><br/>&nbsp;&nbsp; Readln;<br/>end.<br/><br/>====================<br/><br/>procedure TForm1.Button1Click(Sender:TObject);&nbsp;&nbsp;&nbsp;&nbsp;//方法1<br/>var<br/>s:TStringList;<br/>i:integer;<br/>begin<br/>s := TStringList.Cr&#101;ate;<br/>s.Text := StringReplace(&#39;this is a phone&#39;, &#39; &#39;, #13#10, [rfReplaceAll]);<br/>for i := 0 to s.Count - 1 do<br/>begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(s.Strings[i]);<br/>end;<br/>end;<br/><br/>procedure TForm1.Button2Click(Sender:TObject);&nbsp;&nbsp; //方法2<br/>var<br/>s:TStringList;<br/>i:Integer;<br/>begin<br/>S := TStringList.Cr&#101;ate;<br/>S.Delimiter := &#39; &#39;;<br/>S.DelimitedText := &#39;this is a phone&#39;;<br/>for i := 0 to S.Count - 1 do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//此处不能有Begin~end;否则出错<br/>&nbsp;&nbsp;&nbsp;&nbsp;Memo2.Lines.Add(s.Strings[i]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;S.Free;<br/>end;<br/><br/>procedure TForm1.Button3Click(Sender: TObject); ////方法3<br/>begin<br/>ExtractStrings([&#39; &#39;],[],&#39;this is a phone&#39;,Memo3.Lines );<br/>end;<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/code/212.html" /> 
	  <id>http://www.02t.cn/default.asp?id=212</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[2011年11月25日修复下载]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=5" label="我的软件" /> 
	  <updated>2011-11-25T09:22:13+08:00</updated>
	  <published>2011-11-25T09:22:13+08:00</published>
		  <summary type="html"><![CDATA[<a target="_blank" href="http://www.02t.cn/GG/up&#100;ate/mygg.exe" rel="external">下载mygg</a><br/><br/>修复了无法下载的问题<br/><br/>请放到和GGDown.exe 同一个目录下即可使用。<br/><br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/soft/211.html" /> 
	  <id>http://www.02t.cn/default.asp?id=211</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[OpenGL with Delphi]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=7" label="DELPHI代码" /> 
	  <updated>2011-11-16T08:49:20+08:00</updated>
	  <published>2011-11-16T08:49:20+08:00</published>
		  <summary type="html"><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alex Semichastny<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cohen 翻译<br/><br/>英文原文：<a href="http://bdn.borland.com/article/0" target="_blank" rel="external">http://bdn.borland.com/article/0</a>,1410,26401,00.html<br/><br/>OpenGL 是一个低层的图形库，最初由Silicon Graphics Inc. 公司开发。在用户操作系统上对OpenGL具体的实现一般被称为OpenGL驱动，它允许用户使用一组几何元素（点，线，多边形，图象等等）来描述需要绘制的场景。使用OpenGL对一个复杂的场景进行可视化通常只需要毫秒级的时间，这就意味着OpenGL图形库有足够的性能来支持用户创建动画和虚拟世界。<br/><br/>OpenGL驱动通常以二进制格式的库文件提供给用户，用户可以在应用程序中动态的连接这个库文件。在Windows平台上，这个库文件的形式是一个DLL（就是用户系统目录下的opengl.dll文件）。因为Delphi可以调用DLL文件，所以用Delphi进行OpenGL图形开发就像使用其它语言进行OpenGL图形开发一样容易。这篇文章会帮助你熟悉使用Delphi进行OpenGL图形开发的过程。<br/><br/> <br/><br/>数学基础<br/><br/>OpenGL 具有很强的数学背景，你使用OpenGL进行图形开发所仅仅受到你想象力的限制。在进入OpenGL的世界之前，先让我们先来看一个被大多数3D程序员使用的非常简单的3D坐标系统：<br/><br/><br/>这幅图描述了在绘制场景中屏幕的位置。图中四条线汇集在一起的点就是虚拟世界中的观察者的视点。OpenGL允许用户使用两个简单的函数调用来完成这样的设置：<br/><br/>glMatrixMode(GL_PROJECTION);<br/>glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);<br/>在这两个函数调用中，-0.1, 0.1, -0.1, 0.1 以左，右，下，上的顺序定义了虚拟屏幕的尺寸; 0.3 定义了视点到屏幕的距离（等于近剪裁平面）; 25.0 定义了远剪裁平面。在近端剪裁平面之前和远端剪裁平面之后的场景都不会被显示出来。当然，你也可以根据自己的需要来设置这些参数。<br/><br/> <br/><br/>从图形元素到物体<br/><br/>现在到了具有挑战性的一个部分：物体。OpenGL仅仅支持以下几种图形元素：点，线和多边形，它并不支持直接绘制复杂的曲面（例如球面等等）。但是，我们仍然可以用多边形来近似模拟这些曲面，通常是使用三角形来进行模拟（你可以在现在的3D游戏当中看到游戏中的物体都是由三角形面片所构成的），所以这对我们来说不是问题。<br/><br/>进行物体的绘制与使用Pascal编程非常相似。在Pascal语法中，每一个程序块都以begin开头，以end结尾；同样，在OpenGL中，每一个物体的绘制都以glBegin()开头，以glEnd() 结束。就像这样：<br/><br/>const S=1.0; D=5.0;<br/>&nbsp;&nbsp;...<br/>glBegin(GL_TRIANGLES); // 三角形绘制开始<br/>&nbsp;&nbsp;glVertex3f( -S, 0, D); glVertex3f(S, 0, D); glVertex3f(0, S, D); <br/>glEnd; // 三角形绘制结束<br/>这样就绘制了一个简单的三角形，这个三角形离视点有5个单位远，1个单位高，2个单位宽。<br/><br/>这里是绘制的结果：<br/><br/><br/> 虽然它看起来还不是三维的，但起码是一个开始。下面是绘制的源代码：<br/><br/>FILE: Tri.pas<br/><br/>unit Tri;<br/><br/> <br/><br/>interface<br/><br/> <br/><br/>uses<br/><br/>&nbsp;&nbsp;OpenGL, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br/><br/>&nbsp;&nbsp;StdCtrls, ExtCtrls, ComCtrls;<br/><br/> <br/><br/>type<br/><br/>&nbsp;&nbsp;TForm1 = class(TForm)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure FormCr&#101;ate(Sender: TObject);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure FormPaint(Sender: TObject);<br/><br/>&nbsp;&nbsp;private<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure Draw; // 绘制OpenGL场景<br/><br/>&nbsp;&nbsp;public<br/><br/>&nbsp;&nbsp;end;<br/><br/> <br/><br/>var<br/><br/>&nbsp;&nbsp;Form1: TForm1;<br/><br/> <br/><br/>implementation<br/><br/> <br/><br/>{$R *.DFM}<br/><br/> <br/><br/>procedure setupPixelFormat(DC:HDC); // 设置象素格式<br/><br/>const<br/><br/>&nbsp;&nbsp; pfd:TPIXELFORMATDESCRIPTOR = (<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nSize:sizeof(TPIXELFORMATDESCRIPTOR);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 结构大小<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nVersion:1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 版本号<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwFlags:PFD_SUPPORT_OPENGL o&#114; PFD_DRAW_TO_WINDOW o&#114;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFD_DOUBLEBUFFER;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 支持双缓存<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPixelType:PFD_TYPE_RGBA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 颜色类型<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cColorBits:24;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 颜色深度<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cRedBits:0; cRedShift:0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 颜色位数)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cGreenBits:0;&nbsp;&nbsp;cGreenShift:0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cBlueBits:0; cBlueShift:0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cAlphaBits:0;&nbsp;&nbsp;cAlphaShift:0;&nbsp;&nbsp; // 没有Alpha缓存<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cAccumBits: 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cAccumRedBits: 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 没有积累缓存<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cAccumGreenBits: 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cAccumBlueBits: 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cAccumAlphaBits: 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cDepthBits:16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 深度缓存<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cStencilBits:0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 没有模板缓存<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cAuxBuffers:0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 没有辅助缓存<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iLayerType:PFD_MAIN_PLANE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 主层<br/><br/>&nbsp;&nbsp; bReserved: 0;<br/><br/>&nbsp;&nbsp; dwLayerMask: 0;<br/><br/>&nbsp;&nbsp; dwVisibleMask: 0;<br/><br/>&nbsp;&nbsp; dwDamageMask: 0;<br/><br/>&nbsp;&nbsp; );<br/><br/>var pixelFormat:integer;<br/><br/>begin<br/><br/>&nbsp;&nbsp; pixelFormat := ChoosePixelFormat(DC, @pfd);<br/><br/>&nbsp;&nbsp; if (pixelFormat = 0) then <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br/><br/>&nbsp;&nbsp; if (SetPixelFormat(DC, pixelFormat, @pfd) &lt;&gt; TRUE) then<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br/><br/>end;<br/><br/> <br/><br/>procedure GLInit;<br/><br/>begin<br/><br/>&nbsp;&nbsp; // 设置观察投影模式<br/><br/>&nbsp;&nbsp; glMatrixMode(GL_PROJECTION);<br/><br/>&nbsp;&nbsp; glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);<br/><br/>&nbsp;&nbsp; // 观察的位置<br/><br/>&nbsp;&nbsp; glMatrixMode(GL_MODELVIEW);<br/><br/>&nbsp;&nbsp; glEnable(GL_DEPTH_TEST);<br/><br/>end;<br/><br/> <br/><br/>procedure TForm1.FormCr&#101;ate(Sender: TObject);<br/><br/>var DC:HDC;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;RC:HGLRC;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;i:integer;<br/><br/>begin<br/><br/>&nbsp;&nbsp; DC:=GetDC(Handle);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//你可以在这里使用任何的窗口控制<br/><br/>&nbsp;&nbsp; SetupPixelFormat(DC);<br/><br/>&nbsp;&nbsp; RC:=wglCr&#101;ateContext(DC); //&nbsp;&nbsp;创建RC<br/><br/>&nbsp;&nbsp; wglMakeCurrent(DC, RC);&nbsp;&nbsp; // 激活OpenGL 窗口<br/><br/>&nbsp;&nbsp; GLInit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 初始化OpenGL<br/><br/>end;<br/><br/> <br/><br/>procedure TForm1.Draw;<br/><br/>const S=1.0; D=5.0;<br/><br/>begin<br/><br/>&nbsp;&nbsp; glClear(GL_COLOR_BUFFER_BIT o&#114; GL_DEPTH_BUFFER_BIT);<br/><br/>&nbsp;&nbsp; glLoadIdentity;<br/><br/>&nbsp;&nbsp; glTranslatef(0.0, 0.0, -12.0);<br/><br/>&nbsp;&nbsp; glBegin(GL_TRIANGLES);<br/><br/>&nbsp;&nbsp; glVertex3f( -S, 0, D); glVertex3f(S, 0, D); glVertex3f(0, S, D);<br/><br/>&nbsp;&nbsp; glEnd;<br/><br/>&nbsp;&nbsp; SwapBuffers(wglGetCurrentDC);<br/><br/>end;<br/><br/> <br/><br/>procedure TForm1.FormPaint(Sender: TObject);<br/><br/>begin<br/><br/>&nbsp;&nbsp; Draw;<br/><br/>end;<br/><br/>end.<br/><br/> <br/><br/>FILE: Tri.dfm<br/><br/>object Form1: TForm1<br/>&nbsp;&nbsp; BorderStyle = bsDialog<br/>&nbsp;&nbsp; Caption = &#39;BASIC OpenGL Program&#39;<br/>&nbsp;&nbsp; ClientHeight = 318<br/>&nbsp;&nbsp; ClientWidth = 373<br/>&nbsp;&nbsp; OnCr&#101;ate = FormCr&#101;ate<br/>&nbsp;&nbsp; OnPaint = FormPaint<br/>end<br/> <br/><br/>在三维世界中冒险<br/><br/>现在就让我们进入真正的三维世界。我们可以使用前面的程序作为一个模板，添加一些代码来创建一个平滑具有阴影的四面体。我们如何通过使用基本的图素来构建这个四面体呢？我们可以使用四个三角形，一个三角形位于底面，其它的三角形位于侧面。这里使绘制的代码：<br/><br/>procedure TForm1.Draw;<br/>const D=1.5;<br/>&nbsp;&nbsp; H1=D/1.732;&nbsp;&nbsp;// H1 = D * tg(30)<br/>&nbsp;&nbsp; H2=D*1.732-H1; // D/H = tg(30) = 1/sqrt(3), H2 = tg(60)*D – H1 <br/>&nbsp;&nbsp; HY=3.0;<br/>const // 定义顶点坐标<br/>&nbsp;&nbsp; a1:TGLArrayf3=(-D, 0, -H1); // 左下顶点<br/>&nbsp;&nbsp; a2:TGLArrayf3=( D, 0, -H1); // 右下顶点<br/>&nbsp;&nbsp; a3:TGLArrayf3=( 0, 0,&nbsp;&nbsp;H2); // 后下顶点<br/>&nbsp;&nbsp; a4:TGLArrayf3=( 0, HY, 0);&nbsp;&nbsp;// 上顶点<br/>begin<br/>&nbsp;&nbsp; glClear(GL_COLOR_BUFFER_BIT o&#114; GL_DEPTH_BUFFER_BIT);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(0.0, 0.0, -12.0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_TRIANGLES);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3fv(@a1); glVertex3fv(@a3); glVertex3fv(@a2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3fv(@a1); glVertex3fv(@a2); glVertex3fv(@a4);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3fv(@a2); glVertex3fv(@a3); glVertex3fv(@a4);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3fv(@a3); glVertex3fv(@a1); glVertex3fv(@a4);<br/>&nbsp;&nbsp; glEnd;<br/>&nbsp;&nbsp; SwapBuffers(wglGetCurrentDC);<br/>end;<br/>看起来似乎有一点复杂，不过你看了下面这幅图就会明白了：<br/><br/><br/>我们定义四个顶点a1 - a4，并且通过它们来构建三角形。无论什么时候定义自己的三角形（或者是多边形）必须遵循以下准则：按逆时针方向进行绘制，以你从外面看物体表面为准。 根据这个准则，我们像这样绘制：a1-a2-a4, a1-a3-a2 (从下往上看), a2-a3-a4, and a3-a1-a4。<br/><br/>只需要把原来Tri.pas单元里的TForm1.Draw()中语句换成上面的语句就可以了。它看起来似乎还不是三维的，这是因为我们还没有定义光照。正是光展示了物体的形状和表面的反射属性。<br/><br/>光照！相机！OPENGL!<br/><br/>OpenGL中的光照模型由两个部分组成：光源本身（颜色，强度等等）和物体表面的材质。材质，换句话说，包含了颜色和一些物理参数（例如透明性或者是粗糙程度等等）以及纹理。让我们一步一步的解释这些概念。<br/><br/>定义一个光源很简单：<br/><br/>procedure GLInit;<br/>const<br/>&nbsp;&nbsp; light0_position:TGLArrayf4=( -8.0, 8.0, -16.0, 0.0);<br/>&nbsp;&nbsp; ambient:&nbsp;&nbsp;TGLArrayf4=( 0.3, 0.3, 0.3, 0.3);<br/>begin<br/>&nbsp;&nbsp; // 设置观察投影模式 <br/>&nbsp;&nbsp; glMatrixMode(GL_PROJECTION);<br/>&nbsp;&nbsp; glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);<br/>&nbsp;&nbsp; // 观察位置<br/>&nbsp;&nbsp; glMatrixMode(GL_MODELVIEW);<br/>&nbsp;&nbsp; glEnable(GL_DEPTH_TEST);<br/> <br/>&nbsp;&nbsp; // 设置光照<br/>&nbsp;&nbsp; glEnable(GL_LIGHTING);<br/>&nbsp;&nbsp; glLightfv(GL_LIGHT0, GL_POSITION, @light0_position);<br/>&nbsp;&nbsp; glLightfv(GL_LIGHT0, GL_AMBIENT, @ambient);<br/>&nbsp;&nbsp; glEnable(GL_LIGHT0);<br/>end;<br/>需要定义两个常量。一个定义光源的位置，另一个定义环境光。所谓环境光就是它会产生一些分散的光，这样即使物体处于阴影当中也可以被看见。<br/><br/>虽然你已经启用了光照也定义了光源，但是物体仍然没有阴影。这是因为OpenGL不知道每一个多边形的朝向（就是法向量，即与物体表面相垂直的矢量）。如果你还没有自己的法向量计算函数，那么可以看看下面的代码。这个函数用来计算一个三角形的法向量。这个三角形必须是以逆时针方向进行绘制，因为法向量的计算是根据两个向量的叉积得到的。所以如果你按顺时针方向的话这个三角形的法向量就会指向三角形的里面，而不是外面。<br/><br/>function getNormal(p1,p2,p3:TGLArrayf3):TGLArrayf3;<br/>var a,b:TGLArrayf3;<br/>begin<br/>&nbsp;&nbsp; // 得到两个向量a 和 b<br/>&nbsp;&nbsp; a[0]:=p2[0]-p1[0]; a[1]:=p2[1]-p1[1]; a[2]:=p2[2]-p1[2];<br/>&nbsp;&nbsp; b[0]:=p3[0]-p1[0]; b[1]:=p3[1]-p1[1]; b[2]:=p3[2]-p1[2];<br/>&nbsp;&nbsp; // 计算叉积<br/>&nbsp;&nbsp; result[0]:=a[1]*b[2]-a[2]*b[1];<br/>&nbsp;&nbsp; result[1]:=a[2]*b[0]-a[0]*b[2];<br/>&nbsp;&nbsp; result[2]:=a[0]*b[1]-a[1]*b[0];<br/>end;<br/>使用这个函数，你就可以明确所有用来计算光照需要的信息了：<br/><br/>procedure TForm1.Draw;<br/>const D=1.5;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H1=D/1.732;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H2=D*1.732-H1; // D/H = tg(30) = 1/sqrt(3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HY=3.0;<br/>const // 顶点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a1:TGLArrayf3=(-D, 0, -H1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a2:TGLArrayf3=(D, 0, -H1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a3:TGLArrayf3=(0, 0, H2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a4:TGLArrayf3=(0, HY, 0);<br/>var&nbsp;&nbsp; n1, n2, n3, n4: TGLArrayf3;&nbsp;&nbsp; // 法向量<br/>begin<br/>&nbsp;&nbsp; n1 := getNormal(a1,a3,a2);<br/>&nbsp;&nbsp; n2 := getNormal(a1,a2,a4);<br/>&nbsp;&nbsp; n3 := getNormal(a2,a3,a4);<br/>&nbsp;&nbsp; n4 := getNormal(a3,a1,a4);<br/>&nbsp;&nbsp; glClear(GL_COLOR_BUFFER_BIT o&#114; GL_DEPTH_BUFFER_BIT);<br/>&nbsp;&nbsp; glEnable(GL_NORMALIZE);<br/>&nbsp;&nbsp; glShadeModel(GL_FLAT);<br/>&nbsp;&nbsp; glCullFace(GL_BACK);<br/>&nbsp;&nbsp; glLoadIdentity;<br/>&nbsp;&nbsp; glTranslatef(0.0, 0.0, -12.0);<br/>&nbsp;&nbsp; glBegin(GL_TRIANGLES);<br/>&nbsp;&nbsp; glNormal3fv(@n1);<br/>&nbsp;&nbsp; glVertex3fv(@a1); glVertex3fv(@a2); glVertex3fv(@a3);<br/>&nbsp;&nbsp; glNormal3fv(@n2);<br/>&nbsp;&nbsp; glVertex3fv(@a1); glVertex3fv(@a2); glVertex3fv(@a4);<br/>&nbsp;&nbsp; glNormal3fv(@n3);<br/>&nbsp;&nbsp; glVertex3fv(@a2); glVertex3fv(@a3); glVertex3fv(@a4);<br/>&nbsp;&nbsp; glNormal3fv(@n4);<br/>&nbsp;&nbsp; glVertex3fv(@a3); glVertex3fv(@a1); glVertex3fv(@a4);<br/>&nbsp;&nbsp; glEnd;<br/>&nbsp;&nbsp; SwapBuffers(wglGetCurrentDC);<br/>end;<br/>就是这样，绘制的结果如图：<br/><br/><br/>现在让我们使用Delphi VCL提供的一些功能。放置一个定时器控件在你的窗体上，然后添加以下代码：<br/><br/>procedure TForm1.Timer1Timer(Sender: TObject);<br/>begin<br/> angle:=angle+1.0;<br/> Draw;<br/>end;<br/>你只需要一行代码就可以制作OpenGL动画：<br/><br/>glRotatef(angle, 0.0, 1.0, 0.0);<br/>把这一行代码放置在glBegin() 语句之前，这样，这个应用程序就算完成了。源程序下载地址：<a href="http://codecentral.borland.com/codecentral/ccweb.exe/files?id=15417" target="_blank" rel="external">http://codecentral.borland.com/codecentral/ccweb.exe/files?id=15417</a><br/><br/>希望这篇文章能对想使用Delphi进行OpenGL编程的朋友有帮助。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/code/209.html" /> 
	  <id>http://www.02t.cn/default.asp?id=209</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[【升级】瓜瓜下载者-版本 2011v11]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=5" label="我的软件" /> 
	  <updated>2011-11-13T10:44:25+08:00</updated>
	  <published>2011-11-13T10:44:25+08:00</published>
		  <summary type="html"><![CDATA[<span style="color:Red">【升级】瓜瓜下载者-版本 2011v11</span><br/><span style="color:Red"><a target="_blank" href="http://02t.cn/article.asp?id=211" rel="external">mygg.exe以修复下载 </a><br/></span>增加了 洛克王国<br/>2011年11月25日 已经修复下载<br/><br/><a target="_blank" href="http://02t.cn/download/GGDOWN.zip" rel="external">本地下载(已经修复) </a><a target="_blank" href="http://www.duote.com/soft/31394.html" rel="external">多特软件（未修复）</a> <a target="_blank" href="http://www.skycn.com/soft/65718.html" rel="external">天空软件园（未修复）</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/soft/208.html" /> 
	  <id>http://www.02t.cn/default.asp?id=208</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[delphi2010破解文件-RADStudio2010_3615_破解文件]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=9" label="软件破解" /> 
	  <updated>2011-09-22T11:48:19+08:00</updated>
	  <published>2011-09-22T11:48:19+08:00</published>
		  <summary type="html"><![CDATA[HAAL-DANSGN-FZR5AG-M3BS<br/>JAAL-SCDKV6-ETH2SG-KBAN<br/><br/>安装好后，将“rs2010arch.slip”WinXP复制到“C:\Documents and Settings\All Users\Application Data\Embarcadero”下（根据安装时的用户目录可能不同），WinVista或Win7复制到“C:\ProgramData\Embarcadero”下（隐藏文件夹，建议复制地址打开）。<br/>然后将“BDS3615Loader.exe”和“RAD2010Up4Crack.dll”复制到你的radstudio安装目录中“bds.exe”所在的bin目录中。<br/>修改开始菜单项中Delphi 2010（C++ Builder及RadStudio 2010类似)属性中的“&#34;C:\Program Files\Embarcadero\RAD Studio\7.0\bin\BDS.exe&#34; -pDelphi”为“&#34;C:\Program Files\Embarcadero\RAD Studio\7.0\bin\BDS3615Loader.exe&#34; -pDelphi”。即将“BDS.exe”换为“BDS3615Loader.exe”。<br/><br/>就此一切OK，与正常启动一样。<br/><span id="mdown_73heuwxnu5"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=11&downurl=download%2Easp%3Fid%3D11&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_73heuwxnu5');</script><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/pj/204.html" /> 
	  <id>http://www.02t.cn/default.asp?id=204</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[侧边栏隐藏窗体]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=7" label="DELPHI代码" /> 
	  <updated>2011-09-06T09:21:02+08:00</updated>
	  <published>2011-09-06T09:21:02+08:00</published>
		  <summary type="html"><![CDATA[timer1.Interval 设置为5最好<br/><br/><br/>unit Unit1;<br/><br/>interface<br/><br/>uses<br/>&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br/>&nbsp;&nbsp;Dialogs, ComCtrls, ExtCtrls,Math, StdCtrls;<br/><br/>type<br/>&nbsp;&nbsp;TForm1 = class(TForm)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Timer1: TTimer;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Label1: TLabel;<br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure Timer1Timer(Sender: TObject);<br/>&nbsp;&nbsp;private<br/>&nbsp;&nbsp;&nbsp;&nbsp;FAnchors: TAnchors;<br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure WMMOVING(var Msg: TMessage);message WM_MOVING;<br/>&nbsp;&nbsp;public<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ Public declarations }<br/>&nbsp;&nbsp;end;<br/><br/>var<br/>&nbsp;&nbsp;Form1: TForm1;<br/><br/>implementation<br/><br/>{$R *.dfm}<br/><br/><br/>procedure TForm1.WMMOVING(var Msg: TMessage);<br/>begin<br/>&nbsp;&nbsp;inherited;<br/>&nbsp;&nbsp;with PRect(Msg.LParam)^ do<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;Left := Min(Max(0, Left), Screen.Width - Width);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Top := Min(Max(0, Top), Screen.Height - Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Right := Min(Max(Width, Right), Screen.Width);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Bottom := Min(Max(Height, Bottom), Screen.Height);<br/>&nbsp;&nbsp;&nbsp;&nbsp;FAnchors := [];<br/>&nbsp;&nbsp;&nbsp;&nbsp;if Left = 0 then Include(FAnchors, akLeft);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if Right = Screen.Width then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Include(FAnchors, akRight);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if Top = 0 then Include(FAnchors, akTop);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if Bottom = Screen.Height then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Include(FAnchors, akBottom);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer1.Enabled := FAnchors &lt;&gt; [];<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>end;<br/><br/>procedure TForm1.Timer1Timer(Sender: TObject);<br/>const <br/>&nbsp;&nbsp;cOffset = 2;<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;if WindowFromPoint(Mouse.CursorPos) = Handle then<br/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if akLeft in FAnchors then Left := 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if akTop in FAnchors then Top := 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if akRight in FAnchors then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Left := Screen.Width - Width;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if akBottom in FAnchors then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Top := Screen.Height - Height;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if akLeft in FAnchors then Left := -Width + cOffset;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if akTop in FAnchors then Top := -Height + cOffset;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if akRight in FAnchors then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Left := Screen.Width - cOffset;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if akBottom in FAnchors then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Top := Screen.Height - cOffset;<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>end;<br/><br/>end.<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/code/203.html" /> 
	  <id>http://www.02t.cn/default.asp?id=203</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Delphi以GDI+制作桌面歌词效果 ]]></title>
	  <author>
		 <name>小氓男</name>
		 <uri>http://www.02t.cn/</uri>
		 <email>csw163@126.com</email>
	  </author>
	  <category term="" scheme="http://www.02t.cn/default.asp?cateID=7" label="DELPHI代码" /> 
	  <updated>2011-09-06T08:43:16+08:00</updated>
	  <published>2011-09-06T08:43:16+08:00</published>
		  <summary type="html"><![CDATA[新建一个应用程序，在窗体上放置一个TTimer和一个TPopupMenu，TTimer的Interval属性为1500，TPopupMenu建立三个子菜单项，分别为“总在最前”、“背景穿透”和“退出”。再准备一张背景图片。工程源代码如下：<br/>unit Unit1; <br/><br/>interface <br/><br/>uses <br/>&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, <br/>&nbsp;&nbsp;Dialogs, IGDIPlus, ExtCtrls, Menus; <br/><br/>type <br/>&nbsp;&nbsp;TForm1 = class(TForm) <br/>&nbsp;&nbsp;&nbsp;&nbsp;tmr1: TTimer; <br/>&nbsp;&nbsp;&nbsp;&nbsp;pm1: TPopupMenu; <br/>&nbsp;&nbsp;&nbsp;&nbsp;mni_topMost: TMenuItem; <br/>&nbsp;&nbsp;&nbsp;&nbsp;mni_transparent: TMenuItem; <br/>&nbsp;&nbsp;&nbsp;&nbsp;mni_exit: TMenuItem; <br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure FormCr&#101;ate(Sender: TObject); <br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer); <br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y: Integer); <br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure tmr1Timer(Sender: TObject); <br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure mni_topMostClick(Sender: TObject); <br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure MouseLeave(var Msg: TMessage);message WM_MOUSELEAVE; <br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure mni_transparentClick(Sender: TObject); <br/>&nbsp;&nbsp;&nbsp;&nbsp;procedure mni_exitClick(Sender: TObject); <br/>&nbsp;&nbsp;private <br/>&nbsp;&nbsp;&nbsp;&nbsp;m_Kind: Integer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当前第几行字符串 <br/>&nbsp;&nbsp;&nbsp;&nbsp;m_bBack: Boolean;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否显示背景 <br/>&nbsp;&nbsp;&nbsp;&nbsp;m_pszbuf: array[0..5] of WideString;&nbsp;&nbsp; //要绘制的字符串数组 <br/>&nbsp;&nbsp;&nbsp;&nbsp;function Up&#100;ateDisplay(pszbuf: WideString;bBack: Boolean = False; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transparent: Integer = 100):Boolean; <br/>&nbsp;&nbsp;public <br/>&nbsp;&nbsp;&nbsp;&nbsp;{ Public declarations } <br/>&nbsp;&nbsp;end; <br/><br/>var <br/>&nbsp;&nbsp;Form1: TForm1; <br/><br/>implementation <br/><br/>{$R *.dfm} <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;过程名:&nbsp;&nbsp;&nbsp;&nbsp;TForm1.Up&#100;ateDisplay <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;绘制桌面歌词 <br/>&nbsp;&nbsp;参数:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszbuf: WideString;&nbsp;&nbsp;&nbsp;&nbsp; 绘制的字符串 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bBack: Boolean;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否绘制背景 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transparent: Integer&nbsp;&nbsp;&nbsp;&nbsp;透明程度 <br/>&nbsp;&nbsp;返回值:&nbsp;&nbsp;&nbsp;&nbsp;Boolean <br/>-------------------------------------------------------------------------------} <br/>function TForm1.Up&#100;ateDisplay(pszbuf: WideString;bBack: Boolean;Transparent: Integer):Boolean; <br/>var <br/>&nbsp;&nbsp;hdcTemp,hdcScreen,m_hdcMemory: HDC; <br/>&nbsp;&nbsp;hBitMap: Windows.HBITMAP; <br/>&nbsp;&nbsp;blend: BLENDFUNCTION;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这种结构的混合控制通过指定源和目标位图的混合功能 <br/>&nbsp;&nbsp;rct: TRect; <br/>&nbsp;&nbsp;ptWinPos,ptSrc: TPoint; <br/>&nbsp;&nbsp;graphics: IGPGraphics;&nbsp;&nbsp;&nbsp;&nbsp; //封装一个 GDI+ 绘图图面 <br/>&nbsp;&nbsp;fontFamily: IGPFontFamily; //定义有着相似的基本设计但在形式上有某些差异的一组字样 <br/>&nbsp;&nbsp;path: IGPGraphicsPath;&nbsp;&nbsp;&nbsp;&nbsp; //表示一系列相互连接的直线和曲线 <br/>&nbsp;&nbsp;strFormat: IGPStringFormat;//封装文本布局信息，显示操作 <br/>&nbsp;&nbsp;pen,pen1,pen2: IGPPen;&nbsp;&nbsp;&nbsp;&nbsp; //定义用于绘制直线和曲线的对象 <br/>&nbsp;&nbsp;linGrBrush,linGrBrushW: IGPLinearGradientBrush;&nbsp;&nbsp;//使用线性渐变封装 Brush <br/>&nbsp;&nbsp;brush: IGPSolidBrush;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义单色画笔，画笔用于填充图形形状 <br/>&nbsp;&nbsp;image: TGPImage;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用这个类来创建和操作GDI+图像 <br/>&nbsp;&nbsp;i: Integer; <br/>&nbsp;&nbsp;sizeWindow: SIZE; <br/>begin <br/>&nbsp;&nbsp;//---------------------开始：初始化操作-------------------------------------- <br/>&nbsp;&nbsp;hdcTemp := GetDC(Self.Handle); <br/>&nbsp;&nbsp;m_hdcMemory := Cr&#101;ateCompatibleDC(hdcTemp); <br/>&nbsp;&nbsp;hBitMap := Cr&#101;ateCompatibleBitmap(hdcTemp,755,350); <br/>&nbsp;&nbsp;Sel&#101;ctObject(m_hdcMemory,hBitMap); <br/>&nbsp;&nbsp;if (Transparent &lt; 0) o&#114; (Transparent &gt; 100) then <br/>&nbsp;&nbsp;&nbsp;&nbsp;Transparent := 100; <br/>&nbsp;&nbsp;with blend do <br/>&nbsp;&nbsp;begin <br/>&nbsp;&nbsp;&nbsp;&nbsp;BlendOp := AC_SRC_OVER;&nbsp;&nbsp;&nbsp;&nbsp; //把源图片覆盖到目标之上 <br/>&nbsp;&nbsp;&nbsp;&nbsp;BlendFlags := 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;AlphaFormat := AC_SRC_ALPHA;//每个像素有各自的alpha通道 <br/>&nbsp;&nbsp;&nbsp;&nbsp;SourceConstantAlpha :=Trunc(Transparent * 2.55);&nbsp;&nbsp;//源图片的透明度 <br/>&nbsp;&nbsp;end; <br/>&nbsp;&nbsp;hdcScreen := GetDC(Self.Handle); <br/>&nbsp;&nbsp;GetWindowRect(Self.Handle,rct); <br/>&nbsp;&nbsp;ptWinPos := Point(rct.Left,rct.Top); <br/>&nbsp;&nbsp;graphics := TGPGraphics.Cr&#101;ate(m_hdcMemory); <br/>&nbsp;&nbsp;graphics.SetSmoothingMode(SmoothingModeAntiAlias); //指定平滑（抗锯齿） <br/>&nbsp;&nbsp;graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);//指定的高品质，双三次插值 <br/>&nbsp;&nbsp;fontFamily := TGPFontFamily.Cr&#101;ate(&#39;微软雅黑&#39;); //△字体，效果图为&#39;微软雅黑&#39;字体 <br/>&nbsp;&nbsp;strFormat := TGPStringFormat.Cr&#101;ate(); <br/>&nbsp;&nbsp;path := TGPGraphicsPath.Cr&#101;ate(); <br/>&nbsp;&nbsp;//---------------------结束：初始化操作-------------------------------------- <br/>&nbsp;&nbsp;path.AddString(pszbuf,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//要添加的 String <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fontFamily,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //表示绘制文本所用字体的名称 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//指定应用到文本的字形信息,这里为普通文本 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;38,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //限定字符的 Em（字体大小）方框的高度 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakePoint(10,10), //一个 Point，它表示文本从其起始的点 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strFormat);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定文本格式设置信息 <br/>&nbsp;&nbsp;pen := TGPPen.Cr&#101;ate(MakeColor(155,215,215,215),3);&nbsp;&nbsp;//颜色、宽度 <br/>&nbsp;&nbsp;graphics.DrawPath(pen,path);&nbsp;&nbsp;&nbsp;&nbsp;//初步绘制GraphicsPath <br/>&nbsp;&nbsp;linGrBrush := TGPLinearGradientBrush.Cr&#101;ate(MakePoint(0,0),&nbsp;&nbsp;&nbsp;&nbsp;//线性渐变起始点 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakePoint(0,90), //线性渐变终结点 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeColor(255,255,255,255), //线性渐变起始色 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeColor(255,30,120,195)); //线性渐变结束色 <br/>&nbsp;&nbsp;linGrBrushW := TGPLinearGradientBrush.Cr&#101;ate(MakePoint(0,10), <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakePoint(0,60), <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeColor(255,255,255,255), <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeColor(15,1,1,1)); <br/>&nbsp;&nbsp;//---------------------开始：画字符串阴影-------------------------------------- <br/>&nbsp;&nbsp;for i := 1 to 8 do <br/>&nbsp;&nbsp;begin <br/>&nbsp;&nbsp;&nbsp;&nbsp;pen.SetWidth(i); <br/>&nbsp;&nbsp;&nbsp;&nbsp;pen.SetColor(MakeColor(62, 0, 2, 2)); <br/>&nbsp;&nbsp;&nbsp;&nbsp;pen.SetLineJoin(LineJoinRound); //指定圆形联接。这将在两条线之间产生平滑的圆弧。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics.DrawPath(pen,path); <br/>&nbsp;&nbsp;end; <br/>&nbsp;&nbsp;//---------------------开始：画背景框和背景图---------------------------------- <br/>&nbsp;&nbsp;if bBack then <br/>&nbsp;&nbsp;begin <br/>&nbsp;&nbsp;&nbsp;&nbsp;brush := TGPSolidBrush.Cr&#101;ate(MakeColor(25,228,228,228)); <br/>&nbsp;&nbsp;&nbsp;&nbsp;pen1 := TGPPen.Cr&#101;ate(MakeColor(155,223,223,223)); <br/>&nbsp;&nbsp;&nbsp;&nbsp;pen2 := TGPPen.Cr&#101;ate(MakeColor(55,223,223,223)); <br/>&nbsp;&nbsp;&nbsp;&nbsp;image := TGPImage.Cr&#101;ate(&#39;back.png&#39;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //背景图片 <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics.FillRectangle(brush,3,5,750,90);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //填充背景框色 <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics.DrawRectangle(pen1,2,6,751,91);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//内层背景框 <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics.DrawRectangle(pen2,1,5,753,93);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//外层背景框 <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics.DrawImage(image,600,25); <br/>&nbsp;&nbsp;end; <br/>&nbsp;&nbsp;//---------------------开始：以渐变色笔刷填充GraphicsPath内部----------------- <br/>&nbsp;&nbsp;graphics.FillPath(linGrBrush,path); <br/>&nbsp;&nbsp;graphics.FillPath(linGrBrushW,path); <br/>&nbsp;&nbsp;sizeWindow.cx := 755; <br/>&nbsp;&nbsp;sizeWindow.cy := 350; <br/>&nbsp;&nbsp;ptSrc := Point(0,0); <br/>&nbsp;&nbsp;//---------------------开始：更新一个分层的窗口的位置，大小，形状，内容和半透明度--- <br/>&nbsp;&nbsp;Result := Up&#100;ateLayeredWindow(Self.Handle,&nbsp;&nbsp; //分层窗口的句柄 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdcScreen,&nbsp;&nbsp;&nbsp;&nbsp; //屏幕的DC句柄 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ptWinPos,&nbsp;&nbsp;&nbsp;&nbsp; //分层窗口新的屏幕坐标 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@sizeWindow,&nbsp;&nbsp; //分层窗口新的大小 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hdcMemory,&nbsp;&nbsp; //用来定义分层窗口的表面DC句柄 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ptSrc,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分层窗口在设备上下文的位置 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //合成分层窗口时使用指定颜色键值 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@blend,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在分层窗口进行组合时的透明度值 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ULW_ALPHA);&nbsp;&nbsp;&nbsp;&nbsp;//使用pblend为混合功能 <br/>&nbsp;&nbsp;//---------------------开始：释放和删除-------------------------------------- <br/>&nbsp;&nbsp;ReleaseDC(Self.Handle,hdcScreen); <br/>&nbsp;&nbsp;ReleaseDC(Self.Handle,hdcTemp); <br/>&nbsp;&nbsp;Del&#101;teObject(hBitMap); <br/>&nbsp;&nbsp;Del&#101;teDC(m_hdcMemory); <br/>end; <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;窗体创建初始化 <br/>-------------------------------------------------------------------------------} <br/>procedure TForm1.FormCr&#101;ate(Sender: TObject); <br/>begin <br/>&nbsp;&nbsp;//设置窗体属性 <br/>&nbsp;&nbsp;SetWindowLong(Application.Handle, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GWL_EXSTYLE, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowLong(Application.Handle,GWL_EXSTYLE) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#114; WS_EX_TOOLWINDOW);&nbsp;&nbsp; //不在任务栏出现 <br/>&nbsp;&nbsp;SetWindowLong(Self.Handle, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GWL_EXSTYLE, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowLong(Self.Handle,GWL_EXSTYLE) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#114; WS_EX_LAYERED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //层次窗口 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#114; WS_EX_TOOLWINDOW);&nbsp;&nbsp;//不在alt+tab中出现 <br/>&nbsp;&nbsp;//初始化变量等等 <br/>&nbsp;&nbsp;m_kind := 0; <br/>&nbsp;&nbsp;m_bBack := False; <br/>&nbsp;&nbsp;PopupMenu := pm1; <br/>&nbsp;&nbsp;Self.Cursor := crHandPoint; <br/>&nbsp;&nbsp;mni_topMost.Checked := True; <br/>&nbsp;&nbsp;mni_topMostClick(mni_topMost); <br/><br/>&nbsp;&nbsp;m_pszbuf[0] := &#39;你好 Everyone!&#39;; <br/>&nbsp;&nbsp;m_pszbuf[1] := &#39;这是GDI+绘制的桌面歌词!&#39;; <br/>&nbsp;&nbsp;m_pszbuf[2] := &#39;欢迎光临无幻博客!&#39;; <br/>&nbsp;&nbsp;m_pszbuf[3] := &#39;<a href="http://blog.csdn.net/akof1314!" target="_blank" rel="external">http://blog.csdn.net/akof1314!</a>&#39;; <br/>&nbsp;&nbsp;m_pszbuf[4] := &#39;源码根据需要进行修改!&#39;; <br/>&nbsp;&nbsp;Up&#100;ateDisplay(m_pszbuf[m_kind],m_bBack); <br/>end; <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;鼠标按下移动窗体 <br/>-------------------------------------------------------------------------------} <br/>procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; <br/>&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer); <br/>begin <br/>&nbsp;&nbsp;ReleaseCapture; <br/>&nbsp;&nbsp;SendMessage(Self.Handle,WM_SYSCOMMAND,SC_MOVE o&#114; HTCAPTION,0); <br/>end; <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;鼠标移过窗体 <br/>-------------------------------------------------------------------------------} <br/>procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, <br/>&nbsp;&nbsp;Y: Integer); <br/>var <br/>&nbsp;&nbsp;xh: TTrackMouseEvent; <br/>begin <br/>&nbsp;&nbsp;m_bBack := True; <br/>&nbsp;&nbsp;Up&#100;ateDisplay(m_pszbuf[m_kind],m_bBack); <br/>&nbsp;&nbsp;with xh do <br/>&nbsp;&nbsp;begin <br/>&nbsp;&nbsp;&nbsp;&nbsp;cbSize := SizeOf(xh); <br/>&nbsp;&nbsp;&nbsp;&nbsp;dwFlags := TME_LEAVE; <br/>&nbsp;&nbsp;&nbsp;&nbsp;hwndTrack := Self.Handle; <br/>&nbsp;&nbsp;&nbsp;&nbsp;dwHoverTime := 0; <br/>&nbsp;&nbsp;end; <br/>&nbsp;&nbsp;TrackMouseEvent(xh); <br/>end; <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;鼠标移出窗体时，去掉背景 <br/>-------------------------------------------------------------------------------} <br/>procedure TForm1.MouseLeave(var Msg: TMessage); <br/>begin <br/>&nbsp;&nbsp;m_bBack := False; <br/>&nbsp;&nbsp;Up&#100;ateDisplay(m_pszbuf[m_kind],m_bBack); <br/>&nbsp;&nbsp;Msg.Result := 0; <br/>end; <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时器切换字符串 <br/>-------------------------------------------------------------------------------} <br/>procedure TForm1.tmr1Timer(Sender: TObject); <br/>begin <br/>&nbsp;&nbsp;Inc(m_Kind); <br/>&nbsp;&nbsp;if m_kind &gt; 4 then <br/>&nbsp;&nbsp;&nbsp;&nbsp;m_kind := 0; <br/>&nbsp;&nbsp;Up&#100;ateDisplay(m_pszbuf[m_kind],m_bBack); <br/>end; <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;窗体置顶 <br/>-------------------------------------------------------------------------------} <br/>procedure TForm1.mni_topMostClick(Sender: TObject); <br/>begin <br/>&nbsp;&nbsp;if mni_topMost.Checked then <br/>&nbsp;&nbsp;SetWindowPos(Self.Handle, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HWND_TOPMOST, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,0,0,0, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SWP_NOSIZE o&#114; SWP_NOMOVE)&nbsp;&nbsp;&nbsp;&nbsp;//窗口置顶 <br/>&nbsp;&nbsp;else <br/>&nbsp;&nbsp;SetWindowPos(Self.Handle, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HWND_NOTOPMOST, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,0,0,0, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SWP_NOSIZE o&#114; SWP_NOMOVE);&nbsp;&nbsp;&nbsp;&nbsp;//窗口置顶 <br/>end; <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;背景穿透 （相当于锁定桌面） <br/>-------------------------------------------------------------------------------} <br/>procedure TForm1.mni_transparentClick(Sender: TObject); <br/>begin <br/>&nbsp;&nbsp;SetWindowLong(Self.Handle, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GWL_EXSTYLE, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowLong(Self.Handle,GWL_EXSTYLE) o&#114; WS_EX_TRANSPARENT); <br/>&nbsp;&nbsp;Application.MessageBox(&#39;你已关闭不了程序了，请从任务管理器里关闭&#39;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;提示&#39;,MB_OK o&#114; MB_ICONINFORMATION); <br/>end; <br/>{------------------------------------------------------------------------------- <br/>&nbsp;&nbsp;功能:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;退出 <br/>-------------------------------------------------------------------------------} <br/>procedure TForm1.mni_exitClick(Sender: TObject); <br/>begin <br/>&nbsp;&nbsp;Self.Close; <br/>end; <br/><br/>end.&nbsp;&nbsp;<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.02t.cn/article/code/202.html" /> 
	  <id>http://www.02t.cn/default.asp?id=202</id>
  </entry>	
		
</feed>

