设置双屏显示器的分辨率:
//传入参数为设置第几个屏幕
function TFormMain.ChangeResolution(nNum: Integer):
Boolean;
var
X, Y, Frequency: Cardinal;
lpDevMode: TDeviceMode;
lpDisDev : TDisplayDevice;
DevNum: Integer;
begin
result := True;
DevNum := 0;
ZeroMemory(@lpDisDev, SizeOf(TDisplayDevice));
lpDisDev.cb := SizeOf(TDisplayDevice);
while EnumDisplayDevices(nil, DevNum, lpDisDev, 0)
do
begin
if lpDisDev.DeviceName = ('\\.\DISPLAY' +
IntToStr(nNum)) then
begin
ZeroMemory(@lpDevMode,Sizeof(TDeviceMode));
lpDevMode.dmSize :=
Sizeof(TDeviceMode);
result :=
EnumDisplaySettings(lpDisDev.DeviceName, 0, lpDevMode);
if result then
&n
3.MP3帧头:mp3帧头的格式如下:
===========================
2.ID3V2:这个比ID3V1要复杂些,长度并不固定,它的结构大体如下:
_TTAGV2INFO = record
// ID3v2的标识位,3字节
Indentify: array [0..2] of Char;
// 版本号,1字节
Version: Byte;
// 副版本号1字节
Sub_Version: Byte;
&nb
MP3文件是流媒体文件,没有文件头,要判断是不是MP3文件只能分析帧头数据。MP3文件还可能存在TAG,也可能不存在TAG。如果存在TAG,其格式可能是ID3V1或者是ID3V2或者是2者都有。如果是ID3V1,它将存在于MP3文件的末尾,占据128个字节;如果是ID3V2,它在MP3文件的头部,大小不固定,要获取MP3文件的各种信息,不但要判断文件是否含有TAG,还要判断每一帧的数据。下面将用Delphi实现对上述三种格式的判断。
1.ID3V1:包含128个字节,结构如下:
_TTAGV1INFO = record
// TAG三个字母,如果有这三个字母则是ID3V1,如果不是则没有
Indentify: array [0..2] of Char;
// 歌曲名,30个字节
(2008-11-24 21:04)
39码的每一个字元编码方式,都是藉由九条不同排列的线条编码而得。可区分成如表
2之四种类型:
表 2 39码的字元编码方式

Code39码的编码规则:
1、每五条线表示一个字符;
2、粗线表示1,细线表示0;
3、线条间的间隙宽的表示1,窄的表示0;
4、五条线加上它们之间的四条间隙就是九位二进制编码,而且这九位中必定有三位是1,所以称为39码;
(2008-11-24 20:58)
Code39码是西元1974年发展出来的条码系统,是一种可供使用者双向扫瞄的分散式条码,也就是说相临两资料码之间,必须包含一个不具任何意义的空白(或细白,其逻辑值为0),且其具有支援文数字的能力,故应用较一般一维条码广泛,目前较主要利用於工业产品、商业资料及医院用的保健资料,它的最大优点是码数没有强制的限定,可用大写英文字母码,且检查码可忽略不计。
标准的39码是由起始安全空间、起始码、资料码、可忽略不计的检查码、终止安全空间及终止码所构成(徐绍文,1985),以Z135+这个资料为例,其所编成的39码如图
1所示:

图 1 39码的结构
unit UnitEAN;
interface
uses Graphics, Windows, SysUtils, Dialogs;
const
//EAN 左资料码 A 类编码
EAN_A: array [0..9] of String =
( '0001101', '0011001', '0010011', '0111101',
'0100011'
, '0110001', '0101111', '0111011', '0110111',
'0001011'
);
//EAN 左资料码 B 类编码
EAN_B: array [0..9] of String =
( '0100111', '0110011', '0011011', '0100001',
'0011101'
, '0111001', '0000101', '0010001', '0001001',
'0010111'
);
//EAN 右资料码 C 类编码
EAN_C: array [0..9] of String =
( '1110010', '1100110', '1101100', '1000010',
'1011100'
, '1001110', '1010000', '1000100', '1001000',
'1110100'
);
//EAN 检查码
function EANCheck(InChar: String): String;
//EAN-13 转换二进制码
function EAN_13Convert(ConvertStr: String): String;
//输出ISSN码
procedure Cr
(2008-11-24 20:34)
国际标准期刊号 ( International Standard Serial Number,简称 ISSN
),是根据国际标准组织 1975年制订之 ISO-3297 的规定,由设於法国巴黎的国际期刊资料系统中心 (
International Serial Data System - ISDS International
Centre)所赋予申请登记的每一种刊物一个具有识别作用且通行国际间的统一编号。
「期刊」是指任何一系列定期或不定期连续出版的刊物,它们通常以一定的刊名发行,以「年月日」,「年月」或数字标明卷、号、期数。市面上常见的期刊、杂志、丛刊、年刊等大都属於国际标准期刊号的编号与编码范围。每一种期刊在注册登记时,就得到一个永久专属的
ISSN ,一个 ISSN 只对应一个刊名;而一个刊名也只有一个 ISSN 。 所以当该刊名变更时,就得另申请一个 ISSN 。
如果期刊停刊,那麽被删除的 ISSN 也不会被其他期刊再使用。因此,国际期刊资料系统中心在分配 ISSN
时,必须为该期刊编订一个有别於其他期刊刊名的识别题名 ( Key Title )。
unit UnitEAN;
interface
uses Graphics, Windows, SysUtils, Dialogs;
const
//EAN 左资料码 A 类编码
EAN_A: array [0..9] of String =
( '0001101', '0011001', '0010011', '0111101',
'0100011'
, '0110001', '0101111', '0111011', '0110111',
'0001011'
);
//EAN 左资料码 B 类编码
EAN_B: array [0..9] of String =
( '0100111', '0110011', '0011011', '0100001',
'0011101'
, '0111001', '0000101', '0010001', '0001001',
'0010111'
);
//EAN 右资料码 C 类编码
EAN_C: array [0..9] of String =
( '1110010', '1100110', '1101100', '1000010',
'1011100'
, '1001110', '1010000', '1000100', '1001000',
'1110100'
);
//EAN 检查码
function EANCheck(InChar: String): String;
//EAN-13 转换二进制码
function EAN_13Convert(ConvertStr: String): String;
//输出ISBN码
procedure Cre
(2008-11-24 10:34)
国际标准书号 ( International Standard Book Number,简称 ISBN
),是为因应图书出版、管理的需要,并便於国际间出版品的交流与统计所发展的一套国际统一的编号制度,由一组冠有“ISBN”代号(978)的十位数码所组成,用以识别出版品所属国别地区或语言、出版机构、书名、版本及装订方式。这组号码也可以说是图书的代表号码。国际标准书号有助於简化图书发行及管理手续,便於出版品统计及国际交流。世界各地的出版机构、书商、及图书馆都可以利用国际标准书号迅速而有效的识别某一本书及其版本、装订形式。不论原书是以何种文字书写,都可用电报或电话传真订购,并以电脑作业处理。
制作条码时,EAN码中图书类的代码是978,亦即只要将EAN的国家代码部分改为978,再重新计算检查码,即为ISBN条码,其馀处理均相同,图为ISBN的结构图。简单来说,ISBN与EAN的对应关系为:978
+ ISBN前9码 + EAN检查码。

图 ISBN码结构