Archive for 十一月, 2008

IP地址与子网掩码

网络技术 | Posted by 老沙
11月 30 2008

2、网络号
3、主机号
4、广播地址
5、可用IP地址范围 首先,不要管这个IP是A类还是B类还是C类,IP是哪一类对于解题是没有任何意义的. 1、明确“子网”的函义:
子网就是把一个大网划分为几个小网,每个小网的IP地址数目都是一样多的。这个小网就叫做这个大网的子网。大网可以是A类大网,也可以是B类大网,还可能是C类大网。
A类大网中容纳了2的24次方个IP地址,即16777216个IP地址;B类大网中容纳着2的16次方个IP地址,即65536个IP地址;C类大网中容纳着2的8次方个IP地址,即256个IP地址。
如果把B类大网划分为32个小网,那么每个小网的IP地址数目就是65536/32=2048;如果把C类大网划分为32个小网,那么每个小网的IP地址数目就是256/32=8。 2、明确“掩码”的函义:
掩码的作用就是用来告诉电脑把“大网”划分为多少个“小网”! 好多书上说,掩码是用来确定IP地址所在的网络号,用来判断另一个IP是不是与当前IP在同一个子网中。这也对,但是对于我们做题来说,意义不大。我们要明确:掩码的作用就是用来告诉电脑把“大网”划分为多少个“小网”! 掩码是用来确定子网数目的依据! 3、牢记各类网络的默认掩码
A类网络的默认掩码是255.0.0.0,换算成二进制就是 11111111.00000000.00000000.00000000;默认掩码意味着没有将A类大网再划分为若干个小网。掩码中的1表示网络号,24个0表示在网络号确定的情况下(用二进制表示的IP地址的左边8位固定不变),用24位二进制数来表示IP地址的主机号部分。(IP地址是由网络号+主机号两部分构成)
B类网络的默认掩码是255.255.0.0,换算成二进制就是 11111111.11111111.00000000.00000000;默认掩码意味着没有将B类大网再划分为若干个小网。16个0表示在网络号确定的情况下(用二进制表示的IP地址的左边16位固定不变)可以用16位二进制数来表示IP地址的主机号部分。(可以把B类默认掩码理解为是将A类大网划分为2的8次方(即256)个小网)
C类网络的默认掩码是255.255.255.0,换算成二进制就是 11111111.11111111.11111111.00000000;默认掩码意味着没有将C类大网再划分为若干个小网。这里的8个0表示在网络号确定的情况下(用二进制表示的IP地址的左边24位固定不变),可以用8位二进制数来表示IP地址的主机部分。(可以把C类默认掩码理解为是将A类大网划分为2的16次方(即65536)个小网,是将B类大网划分为2的8次方(即256)个小网) 4、关于正确有效的掩码:
正确有效的掩码应该满足一定的条件,即把十进制掩码换算成二进制后,掩码的左边部分一定要是全为1且中间不能有0出现。比方说将255.255.248.0转为二进制是 11111111.11111111.11111000.00000000,可以看到左边都是1,在1的中间没有0出现(0都在1的右边),这样就是一个有效的掩码。我们再来看254.255.248.0,转成二进制是 11111110.11111111.11111000.00000000,这不是一个正确有效的掩码,因为在1中间有一个0的存在。再来看255.255.249.0,转为二进制是11111111.11111111.11111001.00000000,这也不是一个正确有效的掩码,因为在1中间也有0的存在。 5、关于子网掩码的另类表示法:
有些题目中不是出现如255.255.248.0这样的子网掩码,而是出现 IP地址/数字 这样的形式,这里的/数字就是子网掩码的另类表示法。在做题时,我们要正确理解这种另类表示法。我们将255.255.248.0转为二进制的形式是 11111111.11111111.11111000.00000000,可以看到左边是有21个1,所以我们可以将255.255.248.0这个掩码表示为/21。反过来,当我们看到/21时,我们就把32位二进制的左边填上21个1,将这个32位二进制数每8位做为一节用句点隔开,再转换为十进制,就是255.255.248.0了。 6、网络中有两个IP地址不可用:
不管是A类还是B类还是C类网络,在不划分子网的情况下,都是有两个IP地址不可用的:网络号和广播地址。比如在一个没有划分子网的C类大网中用202.203.34.0来表示网络号,用202.203.34.255来表示广播地址,因为C类大网的IP地址有256个,现在减去这两个IP地址,那么可用的IP地址就只剩下256-2=254个了。如果把一个C类大网划分为4个子网,会增加多少个不可用的IP地址?可以这样想:在C类大网不划分子网时,有两个IP地址不可用;现在将C类大网划分为4个子网,那么每个子网中都有2个IP地址不可用,所以4个子网中就有8个IP地址不可用,用8个IP地址减去没划分子网时的那两个不可用的IP地址,得到结果为6个。所以在将C类大网划分为4个子网后,将会多出6个不可用的IP地址。 7、根据掩码来确定子网的数目
首先看给出的掩码是属于哪个默认掩码的“范围”内,这样我们就可以知道是对A类还是B类还是C类大网来划分子网。比方说202.117.12.36/30,我们先把/30这种另类的掩码表示法转换为我们习惯的表示法: 11111111.11111111.11111111.11111100,转为十进制是255.255.255.252。我们可以看到,这个掩码的左边三节与C类默认掩码相同,只有第四节与C类默认掩码不同,所以我们认为255.255.255.252这个掩码是在C类默认掩码的范围之内的,意味着我们将对C类网络进行子网划分。因为C类网络的默认掩码是255.255.255.0,将C类默认掩码转换为二进制是11111111.11111111.11111111.00000000,这里的8个0表示可以用8位二进制数来表示IP地址,也就是说C类大网中可有2的8次方个IP地址,也就是256个IP地址。这道题中的掩码的最后一节是252,转换为二进制是11111100,因为1表示网络号,所以111111就表示将C类大网划分为(111111)2进制个子网。将111111转换为十进制是64,所以就表示将C类大网划分为64个子网,每个子网的IP地址数目是256/64=4,去除子网中的第一个表示子网号的IP地址和最后一个表示广播地址的IP地址,子网中的可分配的IP地址数目就是子网中的总的IP地址数目再减去2,也就是4-2=2个。 8、综合实例:
已知172.31.128.255/18,试计算:
1、子网数目,
2、网络号,
3、主机号,
4、广播地址,
5、可分配IP的起止范围
解:
1、算子网数目
首先将/18换成为我们习惯的表示法:
11111111.11111111.11000000.000000转为十进制就是255.255.192.0,可以看到这个掩码的左边两节和B类默认掩码是一致的,所以这个掩码是在B类默认掩码的范围内,意味着我们将对B类大网进行子网划分。B类掩码默类是用16位(16个0)来表示可分配的IP地址,本题中的掩码在B类默认掩码的基础上多出了两个表示网络号的1,这就是说是将B类大网划分为(11)2进制个子网,将(11)2进制转换为十进制就是4,所以本题中是将B类大网划分为4个子网。 2、算网络号
用公式:将IP地址的二进制和子网掩码的二进制进行“与”(and)运算,得到的结果就是网络号。“与运算”的规则是1和1得1,0和1得0,1和0得0。
172.31.128.255转为二进制是10101100.00011111.10000000.11111111,掩码是:11111111.11111111.11000000.00000000
所以:
10101100.00011111.10000000.11111111
11111111.11111111.11000000.00000000
10101100.00011111.10000000.00000000
将10101100.00011111.10000000.00000000
转换为十进制就是172.31.128.0,所以网络号是172.31.128.0 3、算主机号
也用公式:用IP地址的二进]] >

G31主板 1440 * 900 1680 * 1050驱动

个人的心情空间 | Posted by 老沙
11月 24 2008

买了个G31的主板,发现没有1440*900和1680*1050分辨率,在网上查了查,发现了这个驱动
原文如下:
Symptom:

Users may be unable to use the native resolution of some displays when using Intel chipset graphics. Resolutions such as 1680×1050 and 1440×900 are not available in graphics properties.

Cause:

The display EDID is not read properly when connecting to a subset of Digital Flat Panel (DFP) displays.

Solution:

Intel has released this driver to specifically address this issue however, there may be side effects to this solution such as longer than normal resume times from standby. This solution will only work with external displays such as DFP displays. This driver is not designed to address issues with Local Flat Panel displays or TV's connected to the system. This driver is provided as is. Intel has not tested, and does not warranty, the operation of the driver for this purpose.

This file is written specifically for the Intel® 946GZ, G31, G33, G35, G41, G43, G45, Q33, Q35, Q43, Q45, G965, Q963, and Q965 Express Chipsets and the Mobile Intel® GM45, GL960, and GM965 Express Chipsets and will not function with any other product. View the README file for installation information and the RELEASE NOTES for driver version details. This driver package contains the version 14.36.3.4990 (Build 6.14.10.4990) drivers for Windows* XP.

The software drivers provided on this page are generic versions, and can be used for general purposes.
However, computer original equipment manufacturers (OEMs) may have altered the features, incorporated
customizations, or made other changes to the software or software packaging they provide. To avoid any
potential installation incompatibilities on your OEM system, Intel recommends that you check with your OEM and
use the software provided via your system manufacturer.
Intel or the computer original equipment manufacturer (OEM) may not provide technical support for some or all
issues that could arise from the usage of this generic version of software drivers.
__________________________________________________________________________
大体就是说intel临时做了这么一个驱动,加入了1440*900与1680*1050分辨率,为什么没有这个分辨率呢?是因为没有正确识别显卡器,并且还说了这个驱动他们也没有测试过,有可能会有问题,自己看着办吧
http://downloadcenter.intel.com/Detail_Desc.aspx?strState=LIVE&lang=eng&ProductID=2102&DwnldID=14416

常用日期函数(delphi)

Delphi天空 | Posted by 老沙
11月 12 2008

常用日期函数(delphi)

Day 开头的函数

Unit

DateUtils

function DateOf(const AValue: TDateTime): TDateTime;

描述
使用 DateOf 函数用来把一个 TDateTime 类型的变量转变成一个
只带有日期的 TDateTime 类型变量。
例如:
showmessage(DateTimetostr(dateof(now())));
你得到的是 2003/03/19
而 showmessage(DateTimetostr((now())));
得到的是 2003/03/19 10:50:49

●function DateTimeToStr(DateTime: TDateTime): string;

描述
DateTimeToString 函数将 TDateTime 类型的参数 DateTime 转换成一个
字符串,使用给定的全局变量 ShortDateFormat 的格式,时间部分按照
给定的全局变量 LongTimeFormat 的格式。
其中 DateTime 为零的部分将不会显示出来。

例如:
ShortDateFormat:='yyyy mm dd';
showmessage(DateTimetostr((now())));
你将得到:2003 03 19 10:50:49

●procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime);

描述:
DateTimeToString 方法将TDateTime类型的参数DateTime 按照由参数Format提供的格式
转化成字符串,并保存在Result中。
对于Format的格式类型,请看 Date-Time format strings 的帮助。

例如:
DateTimeToString(result,'yyyy mm dd',now());
那么 result的结果为:2003 03 19 10:50:49

●procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);

描述:
有时为了调用API函数来使用系统时间,你可以使用 DateTimeToSystemTime 方法,来将一个
TDateTime 类型的时间变量转换成一个 TSystemTime 类型的 系统时间。

●function DateTimeToUnix(const AValue: TDateTime ): Int64;

描述:
使用 DateTimeToUnix 函数来将一个 TDateTime 型时间变量转换成一个相应的 Unix 格式
的日期和时间。
Unix date-and-time values are encoded as the number of seconds that have elapsed
since midnight at the start of January 1, 1970.

●function DateToStr(Date: TDateTime): string;

描述:
使用 DateToStr 函数能得到 TDateTime 日期时间类型的日期部分。日期的转换格式依赖于
全局变量 ShortDateFormat。

●function DayOf(const AValue: TDateTime): Word;

描述:
对于给定的TDateTime类型的日期时间,使用 DayOf 函数能得到该日期是该月份的第几天。
该函数的返回数值在 1 到 31 之间
注意:DayOf 函数得到的结果与 DayOfTheMonth 相同。

例如:
showmessage(inttostr(dayof(now)));
得到的是:19 (今天是 某月19日)

●function DayOfTheMonth(const AValue: TDateTime): Word;

与 DayOf 相同。

●function DayOfTheWeek(const AValue: TDateTime): Word;

描述:
对于给定的TDateTime类型的日期时间,使用 DayOfTheWeek 函数能得到该日期是该星期的
第几天。DayOfTheWeek 函数的返回数值为 1 到 7,其中 1 表示星期一,而 7 表示星期日。
注意:DayOfTheWeek 是 ISO 8601 标准的(此标准为 星期一是一周的第一天)。对于一周
的第一天是星期日的标准,如果想获得星期数,请使用 DayOfWeek 函数。
Tip: To make the return value more readable, use the Day of week constants.

●function DayOfTheYear(const AValue: TDateTime): Word;

描述:
根据给定的日期时间参数AValue,使用 DayOfTheYear 函数能得到在该日期所在的年份中,该
日期按照顺序所计算的天数。因此,作为TDateTime类型的变量 “1月1日”在该函数所得到的
结果为 1 ,“1月2日”所得到的结果为 2,“2月1日”所得到的结果就为 32,依次类推。

●function DayOfWeek(Date: TDateTime): Integer;

Description

DayOfWeek returns the day of the week of the specified date as an integer between
1 and 7, where Sunday is the first day of the week and Saturday is the seventh.

Note: DayOfWeek is not compliant with the ISO 8601 standard, which defines Monday
as the first day of the week. For an ISO 8601 compliant version, use the DayOfTheWeek
function instead.

描述:
按照给定的TDateTime类型的参数Date,DayOfWeek 函数得到一周中的第几天,从1到7。
这里 星期日 是一周的第一天,而 星期六 是第七天。

●function DaysBetween(const ANow, AThen: TDateTime): Integer;

描述:
根据两个TDateTime类型的日期时间变量 ANow 和 AThen,DaysBetween函数能得到两者之间的
天数的差距。
DaysBetween 仅仅根据天数的不同来计算。因此,对于 1999年12月31日 下午11点59分 到
2000年1月1日 11点58分,该函数得到的结果是 0,因为两者之间的时间差别还差 1 分钟才到
1 天。

●function DaysInAMonth(const AYear, AMonth: Word): Word;

描述:
对于各定的 年份和月份,DaysInAMonth 函数能得到 该月份的总天数。
年份应该为 从 1 到 9999
月份应该为 从 1 到 12

●function DaysInAYear(const AYear: Word): Word;

描述:
对于给定的年份,DaysInAYear函数能得到该年份的总天数。
年份应该为 1 到 9999。

●function DaysInMonth(const AValue: TDateTime): Word;

描述:
根据给定的TDateTime类型的时间日期参数AValue,DaysInMonth函数能得到该月份的总天数。

●function DaysInYear(const AValue: TDateTime): Word;

描述:
根据给定的TDateTime类型的时间日期参数AValue,DaysInYear函数能得到该年份的总天数。

●function DaySpan(const ANow, AThen: TDateTime): Double;

描述:
根据两个TDateTime类型的日期时间参数ANow和AThen,DaySpan能得到在天数上的差距。
与 DaysBetween 函数不同,DaysBetween 函数 只是计算 整的天数,而 DaySpan函数会
将不足一天的数也得到。
注意:此函数返回的数值为 Double 型。

☆ Month 开头的函数

●function MonthOf(const AValue: TDateTime): Word;

描述:
根据给定的TDateTime类型的时间日期参数AValue,MonthOf函数能得到该年份的该月份数。
MonthOf返回数值为 1 到 12。
注意:MonthOf函数得到的数值与MonthOfTheYear函数相同

●function MonthOfTheYear(const AValue: TDateTime): Word;

与MonthOf函数相同。

●function MonthsBetween(const ANow, AThen: TDateTime): Integer;

描述:
根据两个给定的TDateTime类型的参数ANow和AThen,MonthsBetween函数能得到两个日期在月份
上差距数。因为月份的天数是不同的,所以 MonthsBetween 函数返回的是一个近似值,该近似
值基于每个月份为 30.4375 天。不足一个月的数字将不被计算。
因此,例如,对于 2月1日 到 2月28日,MonthsBetween 返回的数值为 0。
同样,对于 2月1日 到 3月1日,MonthsBetween 返回的数值也是 0。

●function MonthSpan(const ANow, AThen: TDateTime): Double;

描述:
根据两个给定的TDateTime类型的参数ANow和AThen,MonthsBetween函数能得到两个日期在月份
上差距数。因为月份的天数是不同的,所以 MonthsBetween 函数返回的是一个近似值,该近似
值基于每个月份为 30.4375 天。与 MonthsBetween 函数不同,MonthsBetween函数不计算不足
一个月的数字,MonthSpan函数将会得到不足一个月的数字。
注意:此函数返回的类型为 Double

●function MonthStr(DateTime: TDateTime): string;

Description

HTTP me

ssage headers permit several formats for the representation of date and time
values. MonthStr converts a TDateTime value into a string representing the month.
MonthStr allows server applications to work with date values taken from HTTP request
messages, without worrying about the details of how they are formatted.

☆ Week 开头的函数

●function WeekOf(const AValue: TDateTime): Word;

描述:
根据TDateTime类型的日期时间参数AValu,WeekOf函数会得到该星期为一年的第几个
星期。

●function WeeksInAYear(const AYear: Word): Word;

描述:
WeeksInAYear 函数根据年份得到在该年份中共包含多少个星期。

●function WeeksBetween(const ANow, AThen: TDateTime): Integer;

描述:
根据两个TDateTime类型的日期时间参数ANow和AThen,WeeksBetween函数将得到这两个时间在
星期上的差数。如果差数不足一个星期,则忽略掉。

●function WeekSpan(const ANow, AThen: TDateTime): Double;

描述:
根据两个TDateTime类型的日期时间参数ANow和AThen,WeeksBetween函数将得到这两个时间在
星期上的差数。如果差数不足一个星期,则WeekSpan函数不会忽略掉。
注意:此函数的返回类型为 Double

☆ Year 开头的函数

●function YearOf(const AValue: TDateTime): Word;

描述:
根据给定的TDateTime类型的日期时间参数AValue,YearOf函数能得到该日期的年份数字。
YearOf函数返回的数值为从 1 到 9999

●function YearsBetween(const ANow, AThen: TDateTime): Integer;

描述:
根据两个给定的TDateTime类型的参数ANow和AThen,YearsBetween函数能得到两个日期在年份
上差距数。因为年份的天数是不同的,所以 YearsBetween 函数返回的是一个近似值,该近似
值基于每年的天数为 365.25 天。不足的一年的差距将不会被计算。
因此例如:对于 1月1日和12月31日,如果这两个日期在同一年,则 YearsBetween 返回数值
为 0;如果这两个日期在临近的年份,则 YearsBetween 函数返回数值为 1。

●function YearSpan(const ANow, AThen: TDateTime): Double;

描述:
根据两个给定的TDateTime类型的参数ANow和AThen,YearsBetween函数能得到两个日期在年份
上差距数。因为年份的天数是不同的,所以 YearsBetween 函数返回的是一个近似值,该近似
值基于每年的天数为 365.25 天。与 YearsBetween 函数不同,YearsBetween函数将忽略掉不
足一年的数字,而 YearSpan 将计算不足一年的数字。
注意:该函数返回类型为Double

●function Yesterday: TDateTime;

描述:
Yesterday函数能得到当前日期的前一天的日期,返回数值中不包括时间部分。
例如:
当前日期是 2003/3/19
则 showmessage(datetimetostr(Yesterday));
将得到 2003/3/18

☆日期的合成
●function EncodeDate(Year, Month, Day: Word): TDateTime;

描述:
EncodeDate函数将根据参数 年份、月份、日子 而得到一个TDateTime类型的时间变量。

●function EncodeDateDay(const AYear, ADayOfYear: Word): TDateTime;

描述:
EncodeDateDay将根据参数年份和天数,而得到一个TDateTime类型的时间变量。
其中AYear 为 1 到 9999。
ADayOfYear 为日子在该年份顺序排列的天数,例如,1月1日时,ADayOfYear为1,
2月2日时,ADayOfYear为2,3月1日时,ADayOfYear为32。

●function EncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth: Word; const ADayOfWeek: Word =

1): TDateTime;

描述:
EncodeDateMonthWeek 函数将根据参数 年份、月份、星期数,星期几,来得到一个TDateTime类型
的时间变量。
其中AYear 为 1 到 9999。
其中AMonth 为 1 到 12。
AWeekOfMonth是在该月份的星期数,1 表示第一个星期,可能包含4天或更多的天数。
注意,一个月的第一天如果是 星期5,星期6或星期日,用表示这三天的AMonth数值必须设定
为上一个月份的数字,同时 AWeekOfMonth 要设为在上一个月所在的星期数。
同样,如果一个月的最后一天是 星期1,星期2,或星期3,那么用表示这三天的AMonth数值
必须设定为下一个月份的数字,同时 AWeekOfMonth 为 1。
ADayOfWeek表示星期几,星期一为1,星期二为2。

●function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond:

Word):TDateTime;

描述:
EncodeDateTime 根据参数 年份、月份、日子、小时、分、秒、毫秒 来得到一个TDateTime类型
日期时间。

●function EncodeDateWeek(const AYear, AWeekOfYear: Word; const ADayOfWeek: Word = 1): TDateTime;

描述:

EncodeDateWeek 根据参数 年份、星期数、星期几 来得到一个TDateTime类型日期时间。

AWeekOfYear是在该年份的星期数,1 表示第一个星期,可能包含4天或更多的天数。
注意,一年的第一天如果是 星期5,星期6或星期日,用表示这三天的AYear数值必须设定
为上一个年份的数字,同时 AWeekOfYear 要设为在上一个年所在的星期数。
同样,如果一年的最后一天是 星期1,星期2,或星期3,那么用表示这三天的AYear数值
必须设定为下一个年份的数字,同时 AWeekOfYear 为 1。
ADayOfWeek表示星期几,星期一为1,星期二为2。

●function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;

描述:
EncodeTime函数根据参数 小时、分、秒、毫秒 得到个一个TDateTime数值。

☆日期的分解

●procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);

描述:
DecodeDate从一个TDateTime类型参数Date中分解出得到年份、月份、日子。

●procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word);

描述:
DecodeDateDay 方法会根据TDateTime类型参数AValue 得到相应的年份和日期总数。
ADayOfYear:1月1日,此数值为1;1月2日,此数值为2。

●procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth,

ADayOfWeek: Word);

描述:
DecodeDateMonthWeek方法根据TDateTime类型参数AValue 得到相应的年份、月份、月份中的第几个
星期、星期几
AYear:年份
AMonth:月份,1 到 12
AWeekOfMonth:在该月份中的第几个星期
ADayOfWeek:星期几。星期一为1。

●procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute,

ASecond, AMilliSecond: Word);

描述:
DecodeDateTime 方法根据TDateTime类型参数AValue 得到相应的年份、月份、日子、小时、分、秒、
毫秒。

●procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word);

描述:
DecodeDateWeek方法根据TDateTime类型参数AValue 得到相应的年份、在该年中的第几个星期、星期几。

静态数组的定义方法

Delphi天空 | Posted by 老沙
11月 11 2008

静态数组的定义方法
//1. 标准方法:
var
MyArr: array[0..10] of Integer; //定义静态数组
——————————————————————————–

//2. 可以使用非0下标:
var
MyArr: array[9..10] of Integer; //不能提倡,这样不容易与系统函数沟通
——————————————————————————–

//3. 根据预定义类型来声明数组:
type
TMyArr = array[0..10] of Integer; //先定义一个数组类型
var
MyArr: TMyArr; //再定义静态数组
——————————————————————————–

//4. 在非过程区可以直接赋值:
var
MyArr: array[0..2] of Integer = (11,22,33);
——————————————————————————–

//5. 多维数组:
var
MyArr: array[0..2, 0..2] of Integer;
begin
//使用
MyArr[1,2] := 100;
end;
——————————————————————————–

//6. 根据子界定义数组:
type
TRange = 0..10;
var
MyArr: array[TRange] of Integer;
——————————————————————————–

//7. 根据枚举定义数组:
type
TEnums = (Enum1,Enum2,Enum3);
var
MyArr: array[TEnums] of string;
begin
MyArr[Enum1] := '万一';
ShowMessage(MyArr[Enum1]); //万一
end;
——————————————————————————–

//8. 根据其他类型定义数组:
var
MyArr: array[Byte] of Char;
begin
MyArr[255] := #65;
ShowMessage(MyArr[255]); //A
end;

//应尽量不使用内建类型,可以新建类型:
type
TNewByte = Byte;
var
MyArr: array[TNewByte] of Char;
begin
MyArr[255] := #65;
ShowMessage(MyArr[255]); //A
end;

//也可以使用类型别名:
type
TChar = type Char;
var
MyArr: array[TChar] of Byte;
begin
MyArr['C'] := 255;
ShowMessage(IntToStr(MyArr['C'])); //255
end;

//同时定义类型:
type
MyRec = record
s: string;
r: Real;
b: Byte;
end;
var
Arr1: array[0..100] of MyRec;
Arr2: array[0..100] of record s: string; r: Real; b: Byte; end; //可以直接这样定义
Arr3: packed array[0..100] of MyRec; //压缩数组定义, 好像没有区别?

汉字转16进制(网页上的%)

Delphi天空 | Posted by 老沙
11月 05 2008

写一个程序,要把汉字转成网址里的%什么什么的
比如"小杰的博客"转成"%D0%A1%BD%DC%B5%C4%B2%A9%BF%CD"

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
mName:array[0..255] of byte;
display:string;
i:byte;
begin
zeromemory(@mName,256);
getwindowtextA(edit1.Handle ,@mName,sizeof(mName));
display:='';
i:=0;
while mName[i]<>0 do
Begin
display:=display+'%'+inttohex(mName[i],2);
inc(i);
End;
edit2.Text:=display;
end;

end.