<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>学习历程</title><link>http://piip.cndev.org/category/76.aspx</link><description>无论学什么，俺会将学到的一点一滴认为应该记下来的放在这里，另一个原因就是俺的记性近来发觉实在糟糕，权当备忘录好了。</description><managingEditor>piip</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>piip</dc:creator><title>把两个简单的wav文件合并起来</title><link>http://piip.cndev.org/archive/2006/09/29/47226.aspx</link><pubDate>2006-09-29 15:16:00Z</pubDate><guid>http://piip.cndev.org/archive/2006/09/29/47226.aspx</guid><wfw:comment>http://piip.cndev.org/comments/47226.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2006/09/29/47226.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/47226.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/47226.aspx</trackback:ping><description>&lt;P&gt;[提出]因为近来需要把数据库中涉及到同一事项的多个wav录音同时播放，因为条件限制无法使用播放列表，只能在客户端将这几个wav文件合并起来。&lt;/P&gt;
&lt;P&gt;[资料]上网查阅了相关的帖子，思路比较清晰，&lt;/P&gt;
&lt;P&gt;1、将每个wav的数据部分相加&lt;/P&gt;
&lt;P&gt;2、将文件头中包含的文件大小相加&lt;/P&gt;
&lt;P&gt;3、重新写入一个文件，然后更新一下文件头&lt;/P&gt;
&lt;P&gt;[实现] 恰好在盒子里翻的时候，发现了一个现成的unit，呵呵，省却了俺好多功夫啊，真是万分感谢原作者。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;因为使用的8位单声道8khz的录音文件，因此对其中的一些小项重新添加了一下，用integer代替了cardinal。&lt;/P&gt;
&lt;P&gt;关于wav文件头部分的说明，俺前面已经引用了一份资料地。&lt;/P&gt;
&lt;P&gt;下面是unit的内容：&lt;/P&gt;
&lt;P&gt;unit ConcatWaveU;&lt;/P&gt;
&lt;P&gt;interface&lt;BR&gt;uses SysUtils, Classes, Dialogs;&lt;/P&gt;
&lt;P&gt;//D&amp;#233;claration des diff&amp;#233;rents headers contenus dans un fichier WAV...&lt;BR&gt;//Allez faire une recherche sur &lt;A href="http://www.wotsit.org"&gt;www.wotsit.org&lt;/A&gt; pour des informations pr&amp;#233;cises&lt;BR&gt;//sur le format WAV ! (ou sur google : "WAVE file Format specification" !)&lt;/P&gt;
&lt;P&gt;//本单元中的ConcatWave函数用于将相同格式的Wave文件合成一个Wave文件&lt;BR&gt;type&lt;BR&gt;&amp;nbsp; THeaderRIFF = packed record&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID: array[1..4] of Char; // 总为 'RIFF'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size: Integer; // 大小&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Format: array[1..4] of Char; // 总为&amp;nbsp; 'WAVE'&lt;BR&gt;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; THeaderFormat = packed record&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID: array[1..4] of Char; //总为 'fmt '注意后面一个空格&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size: integer;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Format: word;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mode: word;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SRate: Integer; //=Sample Rate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BRate: Integer; //=Byte Rate&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Align: word;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BPS: word; //Bits Per Sample&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extra:word; //Extra&amp;nbsp;&amp;nbsp; Format&amp;nbsp;&amp;nbsp; Information,&amp;nbsp;&amp;nbsp; 2字节(非8k采样则无此字段,仅对PCM,Alaw,Ulaw而言)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Face:array[1..4]of char; //face字符&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SizeExtra: Integer; //4 face后的数据长度.（到字符data之前的长度4）&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extras: Integer;//Total&amp;nbsp;&amp;nbsp; Samples 表示共有多少采样点.等于55－58的数据。(在其他格式中此子块可扩展)&lt;BR&gt;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; THeaderData = packed record&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID: array[1..4] of Char; //总为'data'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size: Integer; //在这之后的音频数据(Datas)的大小&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Datas: array of Byte;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //音频数据，在这里不需要&lt;BR&gt;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; //这个Wave类型记录实际上只包含了Wave文件的头信息&lt;BR&gt;&amp;nbsp; //因为Datas并没有定义，在这里并不需要&lt;/P&gt;
&lt;P&gt;&amp;nbsp; TWAVE = packed record&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RIFF: THeaderRIFF; //&amp;#224; ignorer les fichiers dont le format diff&amp;#232;re&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fmt: THeaderFormat;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Data: THeaderData;&lt;BR&gt;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;function ConcatWave(AWaveList: TStringList; ADestFile: string): string;&lt;/P&gt;
&lt;P&gt;implementation&lt;/P&gt;
&lt;P&gt;function WAV_Valid(Fichier: string): Boolean; //判断是否为合法的wav文件格式&lt;BR&gt;var&lt;BR&gt;&amp;nbsp; WAV: TFileStream;&lt;BR&gt;&amp;nbsp; RIFF: array[1..4] of Char;&lt;BR&gt;&amp;nbsp; WAVEfmt: array[1..8] of Char;&lt;BR&gt;&amp;nbsp; PCM: WORD;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; Result := False;&lt;BR&gt;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAV := TFileStream.Create(Fichier, fmOpenRead); //原来为fmOpenRead&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAV.Read(RIFF, 4);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if RIFF &amp;lt;&amp;gt; 'RIFF' then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wav.Free;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAV.Seek(8, soFromBeginning); //从memory开始移动8个字节&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAV.Read(WAVEfmt, 8); //Lecture de "WAVE" et "fmt " en m&amp;#234;me temps&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if WAVEfmt &amp;lt;&amp;gt; 'WAVEfmt ' then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAV.Free;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAV.Seek(20, soFromBeginning);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAV.Read(PCM, 2);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if PCM &amp;lt;&amp;gt; 1 then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAV.Free;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; except&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; on Exception do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit;&lt;BR&gt;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WAV.Free;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Result := True;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;function FormatOK(Ref, Fich: TWAVE): Boolean;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; Result := (Ref.Fmt.Format = Fich.Fmt.Format)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and (Ref.Fmt.Mode = Fich.Fmt.Mode)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and (Ref.Fmt.SRate = Fich.Fmt.SRate)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and (Ref.Fmt.BRate = Fich.Fmt.BRate)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and (Ref.Fmt.Align = Fich.Fmt.Align)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and (Ref.Fmt.BPS = Fich.Fmt.BPS);&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;function ConcatWave(AWaveList: TStringList; ADestFile: string): string;&lt;BR&gt;var&lt;BR&gt;&amp;nbsp; Source, Dest: TFileStream;&lt;BR&gt;&amp;nbsp; Temp: TMemoryStream;&lt;BR&gt;&amp;nbsp; I,K: Integer;&lt;BR&gt;&amp;nbsp; Fichier, Ref: TWAVE;&lt;BR&gt;&amp;nbsp; CopyCount:Integer;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; Result := ADestFile;&lt;BR&gt;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Temp := TMemoryStream.Create;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dest := TFileStream.Create(ADestFile, fmCreate);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for I := 0 to AWaveList.Count - 1 do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if WAV_Valid(AWaveList[I]) then //验证格式正确&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source := TFileStream.Create(AWaveList[i], fmOpenRead);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source.Read(Fichier.RIFF, SizeOf(THeaderRIFF));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source.Read(Fichier.Fmt, SizeOf(THeaderFormat));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source.Read(Fichier.Data, SizeOf(THeaderData));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if I = 0 then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ref.RIFF := Fichier.RIFF;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ref.Fmt := Fichier.Fmt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ref.Data := Fichier.Data;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if FormatOK(Ref, Fichier) then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Temp.CopyFrom(Source,Fichier.Data.Size);&amp;nbsp; //Fichier.Data.Size&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source.Free;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ref.RIFF.Size := 36 + Temp.Size;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ref.Data.Size := Temp.Size;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dest.Write(Ref.RIFF, SizeOf(Ref.RIFF));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dest.Write(Ref.Fmt, SizeOf(Ref.Fmt));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dest.Write(Ref.Data, SizeOf(Ref.Data));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dest.CopyFrom(Temp, 0);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; except on Exception do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := 'Error';&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp; finally&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp.Free;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dest.Free;&lt;BR&gt;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;end.&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://piip.cndev.org/aggbug/47226.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>WAVE文件格式剖析[转贴备忘]</title><link>http://piip.cndev.org/archive/2006/05/09/45995.aspx</link><pubDate>2006-05-09 17:09:00Z</pubDate><guid>http://piip.cndev.org/archive/2006/05/09/45995.aspx</guid><wfw:comment>http://piip.cndev.org/comments/45995.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2006/05/09/45995.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/45995.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/45995.aspx</trackback:ping><description>&lt;H2 align=center style="TEXT-ALIGN: center"&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;WAVE文件格式剖析&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 13.5pt"&gt;　　&lt;SPAN lang=EN-US&gt;WAVE文件作为多媒体中使用的声波文件格式之一，它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写，每个WAVE文件的头四个字节便是&amp;#8220;RIFF&amp;#8221;。WAVE文件由文件头和数据体两大部分组成。其中文件头又分为RIFF／WAV文件标识段和声音数据格式说明段两部分。WAVE文件各部分内容及格式见附表。&lt;BR&gt;　　常见的声音文件主要有两种，分别对应于单声道（11.025KHz采样率、8Bit的采样值）和双声道（44.1KHz采样率、16Bit的采样值）。采样率是指：声音信号在&amp;#8220;模→数&amp;#8221;转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。&lt;BR&gt;　　对于单声道声音文件，采样数据为八位的短整数（short int 00H-FFH）；而对于双声道立体声声音文件，每次采样数据为一个16位的整数（int），高八位和低八位分别代表左右两个声道。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WAVE文件数据块包含以脉冲编码调制（PCM）格式表示的样本。WAVE文件是由样本组织而成的。在单声道WAVE文件中，声道0代表左声道，声道1代表右声道。在多声道WAVE文件中，样本是交替出现的。 &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 13.5pt"&gt;　　&lt;SPAN lang=EN-US&gt;WAVE文件格式说明表　　&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE bgColor=#8cddcb border=1 cellPadding=0 cellSpacing=0 style="BACKGROUND: #8cddcb; BORDER-BOTTOM: 1.5pt outset; BORDER-LEFT: 1.5pt outset; BORDER-RIGHT: 1.5pt outset; BORDER-TOP: 1.5pt outset; WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 1%" width="1%"&gt;
&lt;P class=MsoNormal&gt;　&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;偏移地址&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;字节数&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;数据类型&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;内&lt;SPAN lang=EN-US&gt;&amp;nbsp;&amp;nbsp; 容&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD rowSpan=13 style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 1%" width="1%"&gt;
&lt;P class=MsoNormal&gt;　 &lt;/P&gt;
&lt;P&gt;文件头&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;00H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;char&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;"RIFF"标志&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;04H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;long int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;文件长度&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;08H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;char&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;"WAVE"标志&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0CH&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;char&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;"fmt"标志&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;10H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;　&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;过渡字节（不定）&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;14H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;格式类别（&lt;SPAN lang=EN-US&gt;10H为PCM形式的声音数据)&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;16H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;通道数，单声道为&lt;SPAN lang=EN-US&gt;1，双声道为2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;18H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;采样率（每秒样本数），表示每个通道的播放速度，&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;1CH&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;long int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;波形音频数据传送速率，其值为通道数&amp;#215;每秒数据位数&amp;#215;每样本的数据位数／&lt;SPAN lang=EN-US&gt;8。播放软件利用此值可以估计缓冲区的大小。&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 1%" width="1%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;20H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 15%" width="15%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 90%" width="90%"&gt;
&lt;P class=MsoNormal&gt;数据块的调整数（按字节算的），其值为通道数&amp;#215;每样本的数据位值／&lt;SPAN lang=EN-US&gt;8。播放软件需要一次处理多个该值大小的字节数据，以便将其值用于缓冲区的调整。&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;22H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;　&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;每样本的数据位数，表示每个声道中各个样本的数据位数。如果有多个声道，对每个声道而言，样本大小都一样。&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;24H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;char&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;数据标记符＂&lt;SPAN lang=EN-US&gt;data＂&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 8%" width="8%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;28H&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;4&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 2%" width="2%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;long int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 118%" width="118%"&gt;
&lt;P class=MsoNormal&gt;语音数据的长度&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;　　&lt;SPAN lang=EN-US&gt;PCM数据的存放方式： &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE bgColor=#8cddcb border=1 cellPadding=0 cellSpacing=0 style="BACKGROUND: #8cddcb; BORDER-BOTTOM: 1.5pt outset; BORDER-LEFT: 1.5pt outset; BORDER-RIGHT: 1.5pt outset; BORDER-TOP: 1.5pt outset; WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 12%" width="12%"&gt;
&lt;P class=MsoNormal&gt;　&lt;/P&gt;&lt;/TD&gt;
&lt;TD colSpan=2 style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 30%" width="30%"&gt;
&lt;P class=MsoNormal&gt;样本&lt;SPAN lang=EN-US&gt;1&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD colSpan=2 style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 36%" width="36%"&gt;
&lt;P class=MsoNormal&gt;样本&lt;SPAN lang=EN-US&gt;2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 12%" width="12%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;8位单声道&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD colSpan=2 style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 28%" width="28%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD colSpan=2 style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 34%" width="34%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 12%" width="12%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;8位立体声&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 19%" width="19%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道（左）&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;1声道（右）&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道（左）&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;1声道（右）&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 12%" width="12%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;16位单声道&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 19%" width="19%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道低字节&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道高字节&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道低字节&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道高字节&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 12%" width="12%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;16位立体声&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 19%" width="19%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道（左）低字节&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0声道（左）高字节&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;1声道（右）低字节&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 22%" width="22%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;1声道（右）高字节&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;　&lt;SPAN lang=EN-US&gt;WAVE文件的每个样本值包含在一个整数i中，i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节，表示样本幅度的位放在i的高有效位上，剩下的位置为0，这样8位和16位的PCM波形样本的数据格式如下所示。　&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE bgColor=#8cddcb border=1 cellPadding=0 cellSpacing=0 style="BACKGROUND: #8cddcb; BORDER-BOTTOM: 1.5pt outset; BORDER-LEFT: 1.5pt outset; BORDER-RIGHT: 1.5pt outset; BORDER-TOP: 1.5pt outset; WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;样本大小&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;数据格式&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;最大值&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;最小值&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;8位PCM&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;unsigned int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;225&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;0&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;16位PCM&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;int&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;32767&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; PADDING-TOP: 0cm; WIDTH: 25%" width="25%"&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;-32767&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style="font-size: 14px; line-height: 25px;"&gt;&lt;strong&gt;作者Blog：&lt;/strong&gt;&lt;a id="ArticleContent1_ArticleContent1_AuthorBlogLink" href="http://blog.csdn.net/WhiteCloud/" target="_blank"&gt;http://blog.csdn.net/WhiteCloud/&lt;/a&gt;&lt;/div&gt;&lt;img src ="http://piip.cndev.org/aggbug/45995.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>新的项目开始了，有些迷茫</title><link>http://piip.cndev.org/archive/2006/04/03/45617.aspx</link><pubDate>2006-04-03 20:41:00Z</pubDate><guid>http://piip.cndev.org/archive/2006/04/03/45617.aspx</guid><wfw:comment>http://piip.cndev.org/comments/45617.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2006/04/03/45617.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/45617.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/45617.aspx</trackback:ping><description>为了要进行底层开发，转到vc？没有答案，继续转delphi的.pas，还是没确定，有些迷茫，看来还是早些打算，熟悉VC。
&lt;P&gt;做了两天的无用功，似乎什么都没有学到，跟在屁股后面疲于奔命，k...
&lt;p&gt;好多事情，好多心思...&lt;img src ="http://piip.cndev.org/aggbug/45617.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>天天加班，疯了</title><link>http://piip.cndev.org/archive/2006/04/02/45594.aspx</link><pubDate>2006-04-02 15:23:00Z</pubDate><guid>http://piip.cndev.org/archive/2006/04/02/45594.aspx</guid><wfw:comment>http://piip.cndev.org/comments/45594.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2006/04/02/45594.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/45594.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/45594.aspx</trackback:ping><description>如果那组漫画说的：痛苦的还有天天免费加班！！
&lt;p&gt;加班到现在,听见"加班"就神经质的有些反感.尤其在看到老板不愿意投资,任凭我们怎么努力的拐弯都解决不了这些摸不着头脑的问题的时候.当他那句"事情这么紧急,还不加班?"很轻松的抛出来时,我俩都没有反应... ...
&lt;p&gt;本来我们遇到的问题其实就是一层窗户纸,捅破了就一切ok,当把厂商邀请我们去北京培训一下的想法告诉他后,就没有了下文.
&lt;p&gt;就在昨天,公司请回了一个鲁能集成的人来,居然希望一切从底层开始,在工期比较宽松的情况下,我非常赞同这样做,可是现在却是不到一个月的时间内就要给客户交货!!信誉对他来说就是"跟客户很熟,再拖个把月",呜呼,我实在无话可说.&lt;img src ="http://piip.cndev.org/aggbug/45594.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>搞了一顿Listview(Style:ICON)的打印，发现这个方法实在是麻烦，现在改考虑qr去了</title><link>http://piip.cndev.org/archive/2006/03/02/45337.aspx</link><pubDate>2006-03-02 13:47:00Z</pubDate><guid>http://piip.cndev.org/archive/2006/03/02/45337.aspx</guid><wfw:comment>http://piip.cndev.org/comments/45337.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2006/03/02/45337.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/45337.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/45337.aspx</trackback:ping><description>&lt;P&gt;Procedure PrintListView(PicView:TListView);&lt;BR&gt;var&lt;BR&gt;&amp;nbsp; TheRect, PrintRect: TRect;&lt;BR&gt;&amp;nbsp; x, y: Integer;&lt;BR&gt;&amp;nbsp; PrnX, PrnY: Integer;&lt;BR&gt;&amp;nbsp; prnIconCount, prnRowCount, prnPageCount: Integer; //行数&lt;BR&gt;&amp;nbsp; RPP: Integer; //每页可以打印多少行;&lt;BR&gt;&amp;nbsp; P, R: Integer;&lt;BR&gt;&amp;nbsp; SI: TScrollInfo;&lt;BR&gt;&amp;nbsp; SavColor: TColor;&lt;BR&gt;&amp;nbsp; OutSideY: Integer;&lt;BR&gt;&amp;nbsp; RowInLastPage: Integer;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; inherited;&lt;BR&gt;&amp;nbsp; X := PicView.Width - 40; //"行"宽&lt;BR&gt;&amp;nbsp; Y := ThumbImageList.Height {图标的高度} + 16 {9号(磅)字体高度9/0.75+4} +4+20;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //"行"高&lt;BR&gt;&amp;nbsp; prnIconCount := Trunc(X / (ThumbImageList.Width + 44)); //一行存放多少个ICON&lt;BR&gt;&amp;nbsp; if PicView.Items.Count = 0 then&lt;BR&gt;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageDlg('客户小样列表为空,打印失败!', mtWarning, [MBOK], 0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit;&lt;BR&gt;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp; //计算一共多少&amp;#8220;行&amp;#8221;ICON&lt;BR&gt;&amp;nbsp; PrnRowCount := Trunc(PicView.Items.Count / prnIconCount);&lt;BR&gt;&amp;nbsp; if (PicView.Items.Count / PrnIconCount - PrnRowCount) &amp;gt; 0 then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrnRowCount := PrnRowCount + 1;&lt;BR&gt;&amp;nbsp; Memo1.Lines.Add('共有行数：' + Inttostr(PrnRowCount));&lt;/P&gt;
&lt;P&gt;&amp;nbsp; OutSideY := PicView.Height - Y * Trunc(PicView.Height / Y);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if PrintDialog1.Execute then&lt;BR&gt;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; with Printer do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SavColor := PicView.Color;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PicView.Color := ClWhite;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PicView.Scroll(0, (0 - PicView.Height));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RowInLastPage := 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrnX := (PageWidth - 20);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrnY := Trunc((PageWidth - 40) * Y / X);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RPP := Trunc((PageHeight - 40) / PrnY);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memo1.Lines.Add('行数每页：' + Inttostr(RPP));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrnPageCount := Trunc(PrnRowCount / RPP);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (PrnRowCount / RPP - PrnPageCount) &amp;gt; 0 then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrnPageCount := PrnPageCount + 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memo1.Lines.Add('共可打印：' + Inttostr(PrnPageCount) + '页');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //具体大小根据实际打印纸张的大小设定&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SI.cbSize := SizeOf(TScrollInfo);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SI.fMask := SIF_ALL;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BeginDoc;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for P := 1 to PrnPageCount do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for R := 1 to RPP do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetScrollInfo(PicView.Handle, SB_VERT, SI);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((SI.nPos + SI.nPage) &amp;gt;= SI.nMax) then //滚动条已经到底了&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RowInLastPage := RowInLastPage + 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TheRect := Rect(0, OutSideY + Y * (RowInLastPage-1), x, OutSideY + y *&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RowInLastPage);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Printrect := Rect(20, 20 + PrnY * (R - 1), PrnX, PrnY * R);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memo1.Lines.Add(Format('%d,%d,%d,%d',[TheRect.Left,TheRect.Top,TheRect.Right,TheRect.bottom]));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Canvas.CopyRect(Printrect, PicView.Canvas, TheRect);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TheRect := Rect(0, 0, x, y);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Printrect := Rect(20, 20 + PrnY * (R - 1), PrnX, PrnY * R);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Canvas.CopyRect(Printrect, PicView.Canvas, TheRect);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep(3000);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PicView.Scroll(0, Y);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PicView.Update;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memo1.Lines.Add('输入打印行：' + Inttostr(R) + '行');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if P &amp;lt;&amp;gt; PrnPageCount then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NewPage;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memo1.Lines.Add('输入打印：' + Inttostr(P) + '页');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndDoc;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PicView.Color := SavColor;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; end;&lt;BR&gt;end;&lt;BR&gt;现在感觉还是转到临时数据库里，通过qr打出来比较合理，本来不想改的，只是现在还要打印一些并没有显示出来的文本，恰好也该换个办法，这个法子是在是麻烦的很，局限也太多。&lt;/P&gt;
&lt;P&gt;------------------------------------------------------&lt;/P&gt;
&lt;P&gt;忙活了两天多的，用qr半天就搞定了，照片一次导入到设计好格式的数据库（也可动态创建临时表），然后链接报表，打印轻松完成。&lt;/P&gt;&lt;img src ="http://piip.cndev.org/aggbug/45337.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>Override和Overload</title><link>http://piip.cndev.org/archive/2004/11/30/4733.aspx</link><pubDate>2004-11-30 16:07:00Z</pubDate><guid>http://piip.cndev.org/archive/2004/11/30/4733.aspx</guid><wfw:comment>http://piip.cndev.org/comments/4733.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2004/11/30/4733.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/4733.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/4733.aspx</trackback:ping><description>&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本菜鸟在学delphi中的类的时候，便搜了几篇文章来参考，不想更被搞糊涂了！一篇文章里将override翻译为重载，因为手头没有计算机专业的词典。想如果它是&amp;#8220;重载&amp;#8221;，那overload是做啥的，居然让俺寻思了半下午。继续看了其他的，总算有些眉目了。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Override是指父类和子类之间方法的继承关系，这些方法有着相同的名称和参数类型。&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Overload是指同一个类中不同方法（可以在子类也可以在父类中定义）间的关系，这些方法有着相同的名称和不同的参数类型。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 也就是说，如果在子类声明相同的方法名称的时候，如果不是用inherited来继承的话，就会将父类的方法覆盖掉；而且父类的方法声明必须标识为virtual和dynamic；overload比较好理解，就是同类里有许多相同的方法名称，但是参数不相同。且第一个方法可以不用overload来标识。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; override的方法返回值类型必须一致,其modifier可以扩大，不可以缩小。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一个不是用abstract标识的方法不可以override成abstract方法。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;override&lt;FONT face=Verdana size=2&gt;的子类的方法拋出的异常只能是父类方法拋出异常的子异常。&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://piip.cndev.org/aggbug/4733.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>花了这么长的时间，终于解决了程序自己弹出的问题！</title><link>http://piip.cndev.org/archive/2004/10/07/3923.aspx</link><pubDate>2004-10-07 16:14:00Z</pubDate><guid>http://piip.cndev.org/archive/2004/10/07/3923.aspx</guid><wfw:comment>http://piip.cndev.org/comments/3923.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2004/10/07/3923.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/3923.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/3923.aspx</trackback:ping><description>&lt;P&gt;目的：系统运行时，最小化到托盘上。当接收到其他程序发出的消息后，弹出主窗口。&lt;/P&gt;
&lt;P&gt;遇到的问题是用控件（例如CoolTrayIcon）放在主窗口上，运行的时候最小化一步没有问题，但是当响应其他程序发出的消息，自己将主窗口弹出后，窗口的最小化事件却不再响应，而且关闭系统时报莫名其妙的错误。另外，如果单纯手动单击托盘图标没有任何问题。只有自身调用的时候才报错，现在只是将最小化事件重写了一遍，虽然解决了，可是没有搞清楚其中的原因，不晓得还有没有其他的解决办法。&lt;/P&gt;
&lt;P&gt;Unit Unit1;&lt;/P&gt;
&lt;P&gt;Interface&lt;/P&gt;
&lt;P&gt;Uses&lt;BR&gt;&amp;nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,&lt;BR&gt;&amp;nbsp; Dialogs, Psock, NMMSG, StdCtrls, Menus, CoolTrayIcon;&lt;/P&gt;
&lt;P&gt;Type&lt;BR&gt;&amp;nbsp; TForm1 = Class(TForm)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSGServReceive: TNMMSGServ;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Button1: TButton;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memo1: TMemo;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PopupMenu1: TPopupMenu;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; N1: TMenuItem;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sdfsdfsdf1: TMenuItem;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TrayIcon: TCoolTrayIcon;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Procedure MSGServReceiveMSG(Sender: TComponent; Const sFrom,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sMsg: String);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Procedure N1Click(Sender: TObject);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Procedure FormCreate(Sender: TObject);&lt;BR&gt;&amp;nbsp; Private&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Procedure WMSyscommand(Var Message: TWMSysCommand); Message WM_SYSCOMMAND;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { Private declarations }&lt;BR&gt;&amp;nbsp; Public&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { Public declarations }&lt;BR&gt;&amp;nbsp; End;&lt;/P&gt;
&lt;P&gt;Var&lt;BR&gt;&amp;nbsp; Form1: TForm1;&lt;/P&gt;
&lt;P&gt;Implementation&lt;/P&gt;
&lt;P&gt;{$R *.dfm}&lt;/P&gt;
&lt;P&gt;Procedure TForm1.MSGServReceiveMSG(Sender: TComponent; Const sFrom,&lt;BR&gt;&amp;nbsp; sMsg: String);&lt;BR&gt;const compareMsg := 123456789';&lt;BR&gt;Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Trim(sMsg) = compareMsg Then&lt;BR&gt;&amp;nbsp; Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memo1.Lines.Add(sMsg);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendMessage(self.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.Show;&lt;BR&gt;&amp;nbsp; End;&lt;BR&gt;End;&lt;/P&gt;
&lt;P&gt;Procedure TForm1.N1Click(Sender: TObject);&lt;BR&gt;Begin&lt;BR&gt;&amp;nbsp; TrayIcon.ShowMainForm;&lt;BR&gt;End;&lt;/P&gt;
&lt;P&gt;Procedure TForm1.FormCreate(Sender: TObject);&lt;BR&gt;Begin&lt;BR&gt;&amp;nbsp; //SendMessage(self.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);&lt;BR&gt;End;&lt;/P&gt;
&lt;P&gt;Procedure TForm1.WMSyscommand(Var Message: TWMSysCommand);&lt;BR&gt;Begin&lt;BR&gt;&amp;nbsp; Case Message.CmdType Of&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SC_MINIMIZE: Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inherited;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Form1.Visible := False;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End&lt;BR&gt;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inherited;&lt;BR&gt;&amp;nbsp; End;&lt;BR&gt;End;&lt;/P&gt;
&lt;P&gt;End.&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://piip.cndev.org/aggbug/3923.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>Firefox占用的资源那么高，为什么还显得比IE快呢？</title><link>http://piip.cndev.org/archive/2004/09/22/3640.aspx</link><pubDate>2004-09-22 16:58:00Z</pubDate><guid>http://piip.cndev.org/archive/2004/09/22/3640.aspx</guid><wfw:comment>http://piip.cndev.org/comments/3640.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2004/09/22/3640.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/3640.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/3640.aspx</trackback:ping><description>1- "ctrl"+"+"可以调大页面字体，"ctrl"+"-"可以缩小页面字体；
2- "ctrl"+"t"可以打开新的tab，"ctrl"+"w"关闭当前tab；
3-在当前窗口开Tab：
（1）打开连接的时候按住Ctrl键；
（2）把连接拖动到Tab栏上。&lt;img src ="http://piip.cndev.org/aggbug/3640.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>这里好事热闹啊！霍霍</title><link>http://piip.cndev.org/archive/2004/09/20/3561.aspx</link><pubDate>2004-09-20 16:02:00Z</pubDate><guid>http://piip.cndev.org/archive/2004/09/20/3561.aspx</guid><wfw:comment>http://piip.cndev.org/comments/3561.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2004/09/20/3561.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/3561.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/3561.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://blog.csdn.net/fita/archive/2004/09/05/95055.aspx"&gt;http://blog.csdn.net/fita/archive/2004/09/05/95055.aspx&lt;/A&gt;[EJB 叫我如何爱上你 --评《精通EJB》及EJB ]&lt;/P&gt;
&lt;P&gt;比较有意思的话：&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#006400&gt;我会骑自行车，不会开汽车。如果哪天我打算&amp;#8220;骑&amp;#8221;宝马上班，会发现宝马真的没有凤凰牌自行车好用，想不明白为什么宝马就比凤凰自行车贵那么多钱。根本原因不是宝马不如凤凰，而是使用方法不同。要想用好宝马，就得学会开车。 &lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://piip.cndev.org/aggbug/3561.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>piip</dc:creator><title>Case Strings 以前总是用Tstringlist来实现，闲来搜索了一下，发现这个法子更好些</title><link>http://piip.cndev.org/archive/2004/06/28/1348.aspx</link><pubDate>2004-06-28 10:01:00Z</pubDate><guid>http://piip.cndev.org/archive/2004/06/28/1348.aspx</guid><wfw:comment>http://piip.cndev.org/comments/1348.aspx</wfw:comment><comments>http://piip.cndev.org/archive/2004/06/28/1348.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://piip.cndev.org/comments/commentRss/1348.aspx</wfw:commentRss><trackback:ping>http://piip.cndev.org/services/trackbacks/1348.aspx</trackback:ping><description>&lt;P&gt;其实这两个都差不多&lt;/P&gt;
&lt;P&gt;[问题提出]&lt;BR&gt;如何像vb那样在&amp;nbsp;CASE&amp;nbsp;语句中使用字符串?&amp;nbsp;在一大堆的字符串条件里跳转语句常被搞得晕头转向，太多的&amp;nbsp;IF&amp;nbsp;ELSE&amp;nbsp;既花时间写，也花时间读。能不能用CASE语句来解决呢？&amp;nbsp;&lt;/P&gt;
&lt;P&gt;[解决]&lt;BR&gt;&amp;nbsp;&amp;nbsp;Delphi中的&amp;nbsp;CASE&amp;nbsp;语句限制只能用顺序的（ordinal）类型，以至于不能在其中直接使用字符串。&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;解决它的根本思想是将字符串列转化成可比较的顺序类型。最简单的方法是将这些字符串作为一个字符串数组，它们在数组中的索引即代表它们各自的顺序。&lt;BR&gt;[实现]&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;首先建立&amp;nbsp;CaseString&amp;nbsp;函数，用于获取某字符串在一个字符串数组中的顺序：&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;function&amp;nbsp;CaseString&amp;nbsp;(const&amp;nbsp;s:&amp;nbsp;string;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;x:&amp;nbsp;array&amp;nbsp;of&amp;nbsp;string):&amp;nbsp;Integer;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;var&amp;nbsp;i:&amp;nbsp;Integer;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;begin&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;Result:=&amp;nbsp;-1;&amp;nbsp;//&amp;nbsp;Default&amp;nbsp;return&amp;nbsp;parameter&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i:=&amp;nbsp;Low&amp;nbsp;(x)&amp;nbsp;to&amp;nbsp;High&amp;nbsp;(x)&amp;nbsp;do&amp;nbsp;begin&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;s&amp;nbsp;=&amp;nbsp;x[i]&amp;nbsp;then&amp;nbsp;begin&amp;nbsp;&amp;nbsp;Result:=&amp;nbsp;i;&amp;nbsp;&amp;nbsp;Exit;&amp;nbsp;&amp;nbsp;end;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;end;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;end;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;Low()&amp;nbsp;提供第一个数组成员（通常是0），High()&amp;nbsp;则返回最后一个。因为&amp;nbsp;CaseString&amp;nbsp;返回的是待查字符串在字符串数组中的位置，因此，它可以被直接用到&amp;nbsp;CASE&amp;nbsp;语句中：&lt;BR&gt;&amp;nbsp;&amp;nbsp;search:=&amp;nbsp;'delphi3000';&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;case&amp;nbsp;CaseString&amp;nbsp;(search,&amp;nbsp;['delphi3000',&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'delphipages',&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Torry's'])&amp;nbsp;of&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0:&amp;nbsp;s:=&amp;nbsp;'Excellent!';&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1:&amp;nbsp;s:=&amp;nbsp;'Good&amp;nbsp;source';&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2:&amp;nbsp;s:=&amp;nbsp;'Not&amp;nbsp;bad!';&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;end;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;引用：&lt;A href="http://www.52delphi.com/tips/delphi/opascal/26102301444.htm"&gt;http://www.52delphi.com/tips/delphi/opascal/26102301444.htm&lt;/A&gt;&amp;nbsp;；&lt;/P&gt;
&lt;P&gt;function StringToCaseSelect&lt;BR&gt;&amp;nbsp;&amp;nbsp; (Selector : string;&lt;BR&gt;CaseList: array of string): Integer;&lt;BR&gt;var cnt: integer;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp;&amp;nbsp; Result:=-1;&lt;BR&gt;&amp;nbsp;&amp;nbsp; for cnt:=0 to Length(CaseList)-1 do&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if CompareText(Selector, CaseList[cnt]) = 0 then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result:=cnt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Break;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;end;&lt;BR&gt;&lt;BR&gt;{&lt;BR&gt;Usage:&lt;BR&gt;&lt;BR&gt;case StringToCaseSelect('Delphi',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ['About','Borland','Delphi']) of&lt;BR&gt;&amp;nbsp;&amp;nbsp; 0:ShowMessage('You''ve picked About') ;&lt;BR&gt;&amp;nbsp;&amp;nbsp; 1:ShowMessage('You''ve picked Borland') ;&lt;BR&gt;&amp;nbsp;&amp;nbsp; 2:ShowMessage('You''ve picked Delphi') ;&lt;BR&gt;end;&lt;BR&gt;}&lt;BR&gt;引用：&lt;A href="http://delphi.about.com/cs/adptips2002/a/bltip0202_5.htm"&gt;http://delphi.about.com/cs/adptips2002/a/bltip0202_5.htm&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://piip.cndev.org/aggbug/1348.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>