格林高利 【教皇合唱团】 简介

音乐家简介 Biography:

    Gregorian是由12位浸淫于教堂音乐与合声风格,拥有深厚古典基础,并在英国伦敦乐界有一定地位的演唱家所组成。其制作人Frank Peterson曾是Enigma的一员,知名作品有很多:如Enigma的<Sadeness>和<Principles Of Lust>,Sarah Brightman的<Time to Say Goodbye>等等。正因如此,我们常常可以在他们的作品中听到与Enigma如出一辙的配器和编曲,而Sarah Brightman更是数次在作品中献声,为专辑平添几分光彩。

    在此有必要介绍一下所谓的"Gregorian Chant"。这是在罗马天主教会的正式礼拜仪式中所唱的圣歌,起源于中世纪的罗马天主教会。当时有位教宗叫格林高利一世(Gregorius Magnus,任职期间公元590~604),他曾将这些圣歌编辑成册,因此后世人称其为“格林高利圣歌”。Gregorian Chant具有以下特征:歌词全是拉丁文,是无伴奏、无和声的单一旋律线,节奏非常自由,采用不同于“大小调系统”的调式音阶,同时还具有客观的、非个人的与超世俗的性质。这种圣歌音乐与礼拜仪式密不可分,它们可算是“功能性的音乐”,亦即具有特殊功用的音乐,不具娱乐价值。它们主要旨在表达歌词的宗教内涵,而不注重官能美感或情感诉求。但有趣的是,中世纪许多俗乐与民谣却改编自格林高利圣歌的曲调。

    圣乐对中世纪的欧洲人而言,与日常生活息息相关。当时,社区的每一份子都必须参加宗教聚会,并在聚会中唱圣歌。天主教的主要礼拜仪式有两种:“弥撒”与“日课经文”,格林高利圣歌就是应用在这两种天主教的礼仪歌曲。例如,弥撒常用部分的歌曲包括<垂怜曲>或<慈悲经>、<光荣颂>或<荣耀经>、<信经>、<欢呼歌>或<圣哉经>、<羔羊赞>,在中世纪时都是用格林高利圣歌来吟唱。因此一般民众对于格林高利圣歌的熟悉程度就如同今日一般民众对于本地流行歌曲的熟悉程度。


国际版封面


限定特别版封面


国际版封面


推荐指数:
★★★☆

01 Brothers In Arms 手足同心 / 5:56
02 Scarborough Fair 史卡保罗市集 / 4:51
03 Tears In Heaven 泪洒天堂 / 5:33
04 Still I’m Sad 悲伤依旧 / 4:59
05 When A Man Loves A Woman 当男人爱上女人 / 4:54
06 Nothing Else Matters 无关紧要 / 6:14
07 Fade To Grey 退色 / 4:20
08 Losing My Religion 失落的信仰 / 5:52
09 Vienna 维也纳 / 5:03
10 The Sound Of Silence 寂静之声 / 4:16
11 Sebastian 塞巴斯提安 / 3:41
12 Don’t Give Up 不要放弃 / 6:28

13 I Still Haven’t Found What I’m Looking For 遍寻不获 / 4:56
14 Save A Prayer 拯救灵魂 / 4:16

    这是一张激荡中存有柔婉,宽广中旋律流畅,难得听到让我呼吸紧闭的和声类音乐。以神圣的恢弘的教堂音乐诠释流行音乐,以发烧的乐器演奏衬托出人类旋律的博大深邃。乐器运用了电子风琴,鼓器和长笛。上帝,教堂给我们的感觉就象在宇宙中,旷达的空间感被淋漓尽致的展现和拓展开来!我们感谢教堂音乐,因为我们知道这是一张借鉴了玄妙的和声音乐去描述的流行歌曲,但我们听来的感觉竟是如何美妙啊!真难想象原有的歌曲被Gregorian的和声重新诠释出别样的神秘而恢弘的气质!

—— 转载自 "雅然音乐天空"

2001.10.15   Gregorian <Masters Of Chant ChapterⅡ 上帝之声第二章>   Pony Canyon


国际版封面

推荐指数:
★★★

    这是Gregorian在2001 年发行的专辑。封面继承了其圣堂诗篇第一章的风格,以几个身着蓝色斗篷长袍的修士为画面中心,充满了欧洲中世纪的神秘宗教气息,与其音乐可谓配合得天衣无 缝。这张专辑中的歌曲不像第一章几乎都是名曲。虽然少了一些宣传号召力,不过如此选曲的好处就是我们可以避开原曲的比较和干扰,专心一意的欣赏格林高利本 身的歌声。两相比较可谓各有千秋。


德国版封面

01 Moment Of Peace 片刻安宁 / 4:25
02 The First Time Ever I Saw Your Face 一见钟情 / 6:01
03 In The Air Tonight 今夜星光灿烂 / 5:46
04 Bonny Portmore 明镜高悬 / 5:04
05 Hymn 圣咏 / 6:08
06 Child In Time 时间之子 / 5:22
07 Everybody Gotta Learn Sometimes 学海无涯 / 5:20
08 Wish You Wewe Here 愿你在此 / 5:34
09 Lady D’Arbanville 阿芭维丽夫人 / 4:48
10 Heaven Can Wait 天堂可待 / 5:54
11 Babylon 巴比伦 / 3:06
12 Stairway To Heaven 天国的阶梯 / 8:06

2002.10.07   Gregorian <Masters Of Chant ChapterⅢ 上帝之声第三章>


推荐指数:★★★★

    这是Gregorian在2002 年末发行的专辑。封面设计与第二集很接近,但色调变为耀眼灿烂的金黄色,似乎要让我们重温中世纪圣歌的圣洁与辉煌。至于乐曲本身,我个人认为是整个系列三 集中最好的。几乎每一首都很动听,也很耐听。特别推荐第二首“Be”。总之,倘若你喜欢前面几集,这张是绝对不会让你失望的新作。若果你还没有听过,这张 专辑也将是一个让你喜欢上他们的好开始 。

01 Join Me 与我同在 / 5:08 歌词下载
02 Be 存在/ 5:48
歌词下载
03 Blasphemous Rumours 渎神的谣言 / 4:28
歌词下载
04 Only You 只有你 / 4:33
歌词下载
05 Blue Monday 忧郁的星期一 / 3:28
歌词下载
06 Sacrifice 牺牲 / 5:48
07 Ordinary World 尘世 / 7:10
歌词下载
08 Fields Of Gold 黄金国 / 4:29
歌词下载
09 Before The Dawn 黎明之前 / 4:52
10 I Won’t Hold You Back 永远支持你 / 5:30
歌词下载
11 Wicked Game 邪恶游戏 / 5:53
12 Out Of The Cold 共渡严寒 / 3:50
13 Voyage Voyage 航行 / 3:56
14 Join Me 与你同在 ("Schill Out" Version)
/ 4:01

2003.10.06   Gregorian <Masters Of Chant ChapterⅣ 上帝之声第四章>


推荐指数:★★★

    有时候觉得Gregorian一年一张发片速度未免有些过快了,随之而来的就是换汤不换药的编曲风格以及炒冷饭的翻唱大餐。熟悉的旋律配上浑厚的合唱,虽然依旧舒服好听,但听多了未免有些过于商业化之嫌。也许制作人Frank Peterson也意识到了这点,下一张专辑<黑夜极光>总算在风格上作了一些突破,玩“黑暗氛围”。那再下一张会玩什么呢?白色圣洁?哈哈哈,大家就拭目以待吧。

01 The Gift 天赐 / 4:50
02 Bridge Over Troubled Water 奈何桥 / 5:36
03 With Or Without You 有没有你 / 6:33
04 Maid Of Orleans 圣女贞德 / 5:10
05 Angels 天使 / 5:40
06 Evening Falls 夜幕降临 / 4:53
07 I’ll Find My Way Home 回家的路 / 5:59
08 Imagine 想象 / 5:10
09 For No One 不为谁 / 3:50
10 Hide And Seek 捉迷藏 / 5:15
11 World 世界 / 4:14
12 High Hopes 希望永在 / 7:05
13 Clocks 时钟 / 4:23
14 The End Of Days 世界末日 / 4:12
15 Heaven Is A Place On Earth 人间天堂 / 3:59

2004.10.25   Gregorian <Masters Of Chant ChapterⅤ~The Dark Side 上帝之声第五章~黑夜极光>


国际版封面

推荐指数:★★★

     流行巨构+圣乐史诗=Gregorian,全球销售百万抚平人心,流行圣乐第五章典——黑暗中浮现的光明,乱世里最温暖的圣音。摇滚女力伊凡塞斯、性感女皇凯莉米洛、歌德教主尼克凯芙、暴女摇滚莉塔福德、德国重工业金属Rammstein、配乐大师Jerry Goldsmith,他们的乐音都被Gregorian一一安抚。传承了几个世纪来回荡在教堂、庙宇及修道院的人声吟咏,配合先进录音技术的精密掌控及时兴曲目的重新铺陈,呈现出真正所谓跨界的音乐面相,放诸现今乐坛,所谓“上帝之声”,正是他们无可取代的正字标记。

     这次的曲目还是有许多经典的重绎,包括有刚在全球写下女力摇滚狂潮的伊凡塞斯(Evanescence)的成品作之一、同时也是电影<夜魔侠 >片尾曲的,此番以安静而迷幻的口感呈现,值得一听;散发幽暗感的歌德摇滚教主Nick Cave & the Bad Seeds当年与澳洲小野猫凯莉米洛(Kylie Minogue)合作的,现在则成了人声暗沈的合唱,与当初的乐团编制呈现手法大异其趣;摇滚猛女Lita Ford当年以嘶吼骠悍Kiss Me Deadly一炮而红,同辑中的抒情主打Close My Eyes Forever却成了Gregorian风格的12人合声,柔情稍减却添醇厚风味;德国重团Rammstein素来以工业金属与交响乐的铺陈著称,而名作 Engel获选为这次的重唱曲目,除了是对团体的成就肯定外,更是选曲严谨通彻的名证;而配乐大师Jerry Goldsmith的电影<The Omen 凶兆>之配乐<天魔组曲 Ave Satani>本就是赞美圣诗的“逆向操作”版,以黑暗阴沈的恐怖合唱呈现对撒旦与伪基督的崇拜,和专辑名称<The Dark Side>构成了完美的呼应。


限定混音特别版封面

01 Hurt 伤痛 / 6:20
02 My Immortal 我将永生 / 5:26
03 The Four Horsemen 四骑士 / 4:51
04 Unbeliever 异教徒 / 4:18
05 Where The Wild Roses Grow 野玫瑰 / 4:51
06 Close My Eyes Forever 我已瞑目 / 6:00
07 More 更多 / 6:05
08 Uninvited 不速之客 / 4:25
09 The Raven 乌鸦 / 5:28
10 Gregorian Anthem 教皇赞美歌 / 6:07
11 Ave Satani (The Omen) 撒旦万岁 / 3:27
12 The End 末日 / 2:06
13 In The Shadows 阴影 /

2001   Gregorian

<Moment Of Peace(Single) 片刻安宁(单曲)>

2001.02.12   Gregorian (Live DVD)

<Masters Of Chant In Santiago de Compostela>

2001.10.03   Gregorian

<Moments Of Peace In Ireland (DVD)>

2001.02.12   Gregorian

<Masters Of Chants ChapterⅢ (DVD)>

2000   Gregorian Chants <Love Songs 爱之歌>   ELAP Music

01 Imagine 想象 / 3:32
02 Lady In Red 红衣宫女 / 4:58
03 When You Say Nothing At All 无言 / 5:50
04 Against All Odds 无论成败 / 3:57
05 Nights In White Satin 夜色 / 5:09
06 Beauty And The Beast 美女与野兽 / 4:00
07 Can You Feel The Love Tonight 今夜感受我的爱 / 4:06
08 Angels 天使 / 4:51
09 How Deep Is Your Love 爱有多深 / 5:03
10 When I Need You 当我需要你 / 5:19
11 Perhaps Love 爱的疑问 / 4:23
12 Hard To Say I’m Sorry 说不出的道歉 / 5:30
13 Scarborough Fair 史卡保罗市集 / 4:51
14 Tears In Heaven 泪洒天堂 / 5:33
15 Fade To Grey 退色 / 4:20
16 The Sound Of Silence 寂静之声 / 4:16


推荐指数:
★☆

    严格来说,这张并不是这里介绍的格林高利合唱团的作品,只是同类型的流行化的格林高利圣歌。不过也就在这里一起介绍了。

    实话说,我个人并不太中意这张碟,准确地说是和“上帝之声”系列相比下,感觉比较失望吧。倒并不是由于歌曲本身不好,而是编曲太千篇一律了,相互之间没有什么特色, 因而显得单调而沉闷。不过这张碟在雅燃上倒是出乎意料的受欢迎,而且盗版也算常见,所以喜欢的朋友也不妨买一张试试看。

2000   Gregorian <Le Chant du Silence 纯粹的圣歌>

Chapter 1. Le qutrieme dimanche de I’Avent(第1~3曲)
Chapter 2.
La samedi saint(第4曲)
Chapter 3.
Le dimanche de Paques(第5曲)
Chapter 4.
Resurrectionis(第6~8曲)
Chapter 5. L’Asension(第9~10曲)
Chapter 6.
Le dimanche dePentecote(第11~12曲)
Chapter 7. Messe du dimanche de Pentecote(第13~22曲)
Chapter 8. Vepres du dimanche de Pentecote(第23~26曲)
Chapter 9. Final(第27~31曲)


推荐指数:
★

    Gregorian——格林高利圣歌,很多人都是由于Masters Of Chants系列而了解甚至喜欢上这种音乐的,关于这种音乐体裁想必就不需要我再多做介绍了。Masters Of Chants系列虽然是毋庸置疑的经典之作,但是听多了这种“让上帝穿上牛仔裤”的新音乐,你会否多少觉得有些浮躁,甚至厌倦?你会否想追求更简单安静的音乐体验?

    如果是的,这张专辑就是为你度身定做的最佳选择。“Le Chant du Silence 纯粹的圣歌”,CD中放出来的声音,至纯至粹。没有合成器,没有打击乐,甚至没有任何乐器,除了纯粹的人声合唱,什么都没有,或者说人声本来就是上帝赐予人类的最初的乐器。这才是格林高利圣歌铅华洗净、返璞归真的本来面目。

    提醒大家不要误会一点,这张专辑并不是出自大家熟悉的Gregorian Chant的手笔,而是由欧洲数个知名的圣诗班或合唱团分别演绎的。可以说这张专辑并不属于新世纪的范畴,而是地地道道的传统格林高利圣歌。听惯了新世纪 音乐,这种素面朝天的音乐反而已经近乎异类。我毫不奢望这张专辑会有多少人喜欢,甚至我自己买了这张CD这么久也从来没有耐心能由头到尾的听一遍,但我相 信会有人喜欢这种静谧而神圣的感觉。至少我认为,当我们沉醉于改头换面的Masters Of Chants系列的同时,我们有义务也有必要知道真正的圣歌是什么样的。这就是我购买并分享这张冷门碟的初衷。

—— 转载自 "雅然音乐天空";Aiolia 整理补充

windows C语言网络编程快速入门

Windows下C语言网络编程快速入门

  
C语言的学习,一般的方式是,先学C,然后是C++,最好还要有汇编语言和微机原理基础,然后才是Visual C++。这样的方式,对学习者来说,要花费很多时间和耐力。而在学校教学中,也没有时间深入学习Windows编程的实用技术了。

其实,具有了C语言基础后,再有一些基本的C++类的概念,就可以直接学习Windows C编程了。

一、走近Windows C语言

很多语言都把显示一个“Hello,World!”做为第一个入门程序, C语言的第一个程序是这样的:

#include<stdio.h>
main()
{
printf(“Hello,World!”);
}

如果把main函数写成带参数的main函数,应该是:

#include<stdio.h>
main(int arge,char *argv[])
{
printf(“Hello,World!”);
}

Windows C的第一个程序和这个程序在形式和原理上都是一致的,只是有两点不同:

1. 主函数接收的形参不只是命令行中的字符串的个数和字符串的首地址。

2. C语言的很多函数在Windows C中都可以继续使用,但象printf()屏幕显示等函数就不能继续使用了。因为Windows是多任务操作系统,屏幕已不再为某一个应用程序所独有,Windows C应用程序要显示字符串,需要使用Windows提供的API函数,开自己的窗口

下面是一个最简单的,显示“Hello,World!”的Windows C程序:

#include<windows.h>
APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
MessageBox(NULL,"Hello,World!","第一个Windows C程序",MB_OK|MB_ICONASTERISK);
}

主函数的形参有四个:

1) Hinstance:接收程序运行时当前实例的句柄;
2) HprivInstance:前一个实例的句柄;
3) LpCmdLine:程序命令行指针;
4) NcmdShow:一个用来指定窗口显示方式的整数。

这几个参数的使用我们会在深入的学习中介绍的。

显示Hello,Word!字符串,我们使用了一个MessageBox函数,这个函数会在屏幕上显示一个对话框,它的原型是:

int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UNIT uType)

四个参数分别是:

1) HWnd:父窗口的句柄;
2) LpText:要显示字符串的指针;
3) LpCaption:对话框标题字符串的指针;
4) UType:显示在对话框上的小图标的类型。

使用这个函数要包含windows.h头文件。

调试一下,怎么样?窗口上弹出了一个“第一个Windows C程序”对话框,上面有一行字:“Hello,World!”。

世界真的很美好啊!!

深入编程:

在C语言中,函数的声明,如果没有指明返回值类型,缺省值为void,这个程序的主函数就没有返回值。不过,在Windows编程时,我们最好养成个好习惯,指明函数的返回值类型,因为在C++中,函数返回值类型是不可以缺省的。而我们在Windows C编程时,还是会用到C++的一些概念,这样做,有利于以后深入地学习。

规范一点的程序应该是这样的:

#include<windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
MessageBox(NULL,"Hello,World!","第一个Windows C程序",MB_OK|MB_ICONASTERISK);
return 0;
}

这里,我们声明的类型为int型,并且返回一个值0,这样的函数就可以使用在复杂一点的函数调用中了。

在这一节中,我们有几处都提到了句柄的概念,句柄和指针的概念不同,它是作为操作系统内部索引表中的一个值来使用的,这样可以防止应用程序直接访问名对象的内部结构,体现了Windows资源管理的优越性。譬如说,一个窗口找开之后,好对应内存中的一个内存块,这个窗口所在的内存快地址往往会由操作系统做动态的调整,但其却不会随之变化。不过,通过它可以访问这个窗口,所以在使用的时候,可以把它当做指针一样看待。
二、 获取本地计算机的主机名和IP地址

和C语言一样,函数是Windows C编程的最基本的单位。不过,Windows C主要使用API函数,而网络编程则主要使用Winsock提供的API函数。

Winsock是90年代初,为了方便网络编程,由Microsoft联合了其他几家公司共同制定的一套WINDOWS下的网络编程接口,它是通过C语言的动态链接库方式提供给用户及软件开发者的,主要由winsock.h头文件和动态链接库winsock.dll组成,目前有两个版本:Winsock1.1和Winsock2.0。

在Win32平台上,访问众多的基层网络协议,Winsock是首选接口。

用Visual C++6.0编译Windows C程序,使用Winsock API函数时,首先要把wsock32.lib添加到它的库模块中,否刚在链接的时候,会出现“error LNK2001”错误。添加wsock32.lib的具体步骤是:打开工程菜单,选择设置,在弹出的Project settings对话框中,点击link选项卡,然后在对象/库模块文本框中添加wsock32.lib。

最简单的网络编程是获取本机的主机名和IP地址,这个程序使用了WSAStart()、WSAClenaup()、gethostname()、gethostbyname()四个winsock API函数,这四个函数的功能和使用方法介绍如下:

1. WSAStartup():

【函数原型】

int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);

【使用说明】

每一个使用winsock的应用程序,都必须进行WSAStart函数调用,并且只有在调用成功之后才能使用其它的winsock网络操作函数。

WVersionRequired:<输入>表示欲使用的Winsock版本,这是一个WORD类型的整数,它的高位字节定义的是次版本号,低位字节定义的是主版本号。

LpWSAData:<输出>是一个指向WSADATA资料的指针。这个资料我们一般不使用。

返回值:调用成功返回0;否则,返回出错信息。

2. WSAClenaup():

【函数原型】

int PASCAL FAR WSACleanup(void);

【使用说明】

winsock使用后,要调用WSACleanup函数关闭网络设备,以便释放其占用的资源。

3.gethostname()

【函数原型】

int PASCAL FAR gethostname (char FAR * name, int namelen);

【使用说明】

该函数可以获取本地主机的主机名,其中:

name:<输出>用于指向所获取的主机名的缓冲区的指针。

Namelen:<输入>缓冲区的大小,以字节为单位。

返回值:若无错误,返回0;否则,返回错误代吗。

4.gethostbyname()

【函数原型】

struct hostent FAR * PASCAL FAR gethostbyname(const char FAR * name);

【使用说明】

该函数可以从主机名数据库中得到对应的“主机”。

该函数唯一的参数name就是前面调用函数gethostname()得到的主机名。若无错误,刚返回一个指向hostent结构的批针,它可以标识一个“主机”列表。

Hostent结构定义如下:

Struct hostent
{
char FAR * h_name;
char FAR FAR ** h_aliases;
short h_addrtype;
char FAR FAR ** h_addr_list;
}

其中:

h_name:<输入>主机名地址(PC)。
h_aliases:一个由主机备用名组成的空中止数组。
H_addrtype:返回地址的类型,对于Winsock,这个域总是PF_INET。
H_lenth:每个地址的长度(字节数),对应于PF_INET域应该为4。
H_addr_list:应该以空指针结尾的主机地址的列表,返回的地址是以网络顺序排列的。

其中,h_addr_list[0]存放的就是本地主机的4个字节的IP地址,即:

h_addr_list[0][0].h_addr_list[0][1].h_addr_list[0][2].h_addr_list[0][3]

一个简单的用消息框显示主机名和IP地址的源程序如下:

#include<winsock.h>

int WSA_return;
WSADATA WSAData;

HOSTENT *host_entry;
char host_name[256];
char host_address[256];

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
WSA_return=WSAStartup(0x0101,&WSAData);

if(WSA_return==0)
{
gethostname(host_name,256);
host_entry=gethostbyname(host_name);
if(host_entry!=0)
{
wsprintf(host_address,"%d.%d.%d.%d",
(host_entry->h_addr_list[0][0]&0x00ff),
(host_entry->h_addr_list[0][1]&0x00ff),
(host_entry->h_addr_list[0][2]&0x00ff),
(host_entry->h_addr_list[0][3]&0x00ff));

MessageBox(NULL,host_address,host_name,MB_OK);
}
}
WSACleanup();
return 0;
}

深入编程:

前面显示IP地址的时候,我们使用的是消息框,规范一点的编程应该使用对话框,如何编辑一个对话框,很多书中都有介绍,编辑的对话框可参考图5的运行界面。

头文件Get_IP.h如下:

BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);

这个程序只使用了一个对话框过程,一般把这个过程的声明放在头文件中。

源程序Get_IP.c:

#include<winsock2.h>
#include"Get_IP.h"
#include"resource.h" //这个头文件在创建资源的时候会自动生成,
//并会在插入资源时自动生成控件标识号.
int WSA_return;
WSADATA WSAData;

HOSTENT *host_entry;
char host_name[256];
char host_address[256];

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
WSA_return=WSAStartup(0x0101,&WSAData);
if(WSA_return==0)
{
gethostname(host_name,256);
host_entry=gethostbyname(host_name);
if(host_entry!=0)
{
wsprintf(host_address,"%d.%d.%d.%d",
(host_entry->h_addr_list[0][0]&0x00ff),
(host_entry->h_addr_list[0][1]&0x00ff),
(host_entry->h_addr_list[0][2]&0x00ff),
(host_entry->h_addr_list[0][3]&0x00ff));
}
}
WSACleanup();
DialogBox(hInstance,"DIALOG1",NULL,(DLGPROC)Hostname_ipDlgPro);
return 0;
}

BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,
WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return(TRUE);
case WM_COMMAND:
if(LOWORD(wParam)==IDOK)
{
SetDlgItemText(hDlg,IDC_EDIT1,host_name);
SetDlgItemText(hDlg,IDC_EDIT2,host_address);
SetDlgItemText(hDlg,IDCANCEL,"确定");
}
if(LOWORD(wParam)==IDCANCEL)
EndDialog(hDlg,TRUE);
return(TRUE);
break;
}
return(FALSE);
}

做男人啊,太难

男人啊!哎
找个漂亮女人吧,太操心,
找个不漂亮的吧,又不甘心;
光顾事业了,人家说你没责任感,
光顾家了,人家又说你没本事;
专一点吧,人家说你不成熟;
花心点吧,人家说你是禽兽;
有钱,说你是坏人,
没有钱,人家骂你窝囊废;
自己奋斗吧,等有钱了女友也老了,
让女人养吧,不如自宫练葵花宝典算了。
不去应酬,怕被老板废了,
去应酬吧,怕被老婆废了。
哎!这年月做男人真难。
女人可以等嫁,俺们等啥呀?
女人还有个三八节,俺们有啥呀?
祝所有群内的爷们自安天命!
男人这辈子挺难的:
长帅点吧,太抢手,
不帅吧,拿不出手;
活泼点吧,说你太油,
不出声吧,说你太闷;
穿西装吧,说你太严肃,
穿随便一点吧,说你乡吧佬;
会挣钱吧,怕你包二奶;
不挣钱吧,又怕孩子断奶,
结婚吧,怕自己后悔;
不 结婚吧,怕她后悔,
要个孩子吧,怕出来没钱养,
不要孩子吧,怕老了没人养。
这年头做女人难,做男人更难,
男人,就要对自己好点。

全力提升 TIniFile 的读取速度

全力提升 TIniFile 的读取速度

软件保存设置一般是写入本地目录,或者写入注册表。前者使用的文件格式很多,多为 IniFile (现在 XML 也开始流行)。后者是将信息储存在注册表中,并通过的 TRegistry 或者标准的 WindowsAPI 来读写。后者有个很大的好处:不需要对多用户系统进行考虑,Windows 可以很好的控制多用户的切换。但缺点是往往卸载软件不将注册表中生成的记录信息删除干净。而制作绿色软件的作者多采用 IniFile 方式保存信息。

IniFile 本来也没有什么好多说的,有现成的工具 TIniFile,也有标准的 WindowsAPI。不过偶然发现当读取 IniFile 的一整个记录较多的 Section 时,性能很差。根据我的测试,当一个 Section 有超过 61 条记录的时候,比直接用 TStringList 打开一个文件,并分析出 Section 的记录要慢。问题出在哪里呢?我估计可能是大量的时间被耗费在打开文件和记录定位上了。

设想一下:如果我们将带有 600 条记录的语言文件保存在 IniFile 中。用上述2种方法在速度上的差异甚大。我在 GOSURF 浏览器中做了比较。使用标准的 TIniFile 读取需要 2.78 秒,而使用了利用 TStringList 之后,时间缩短为 0.102秒。这 2 秒的时间对于一个软件的启动来说,算是相当长的了。

随后我对 TIniFile 的各种操作进行了测试,发现 ReadSectionValues 是有性能明显性能瓶颈的。于是动手改造了一番:

procedure TTntIniFile.ReadSectionValuesEx(const Section: WideString; Strings: TTntStrings);

var

BeginIdx, EndIdx: Integer;

KeyValues: TTntStringList;

I: Integer;

S: WideString;

begin

KeyValues := TTntStringList.Create;

try

    KeyValues.LoadFromFile(FileName);

    BeginIdx := 0;

    while (BeginIdx <= KeyValues.Count – 1) do

    begin

      if Trim(KeyValues[BeginIdx]) = ‘[‘ + Section + ‘]’ then Break;

      Inc(BeginIdx);

    end;

    EndIdx := BeginIdx + 1;

    while (EndIdx <= KeyValues.Count – 1) do

    begin

      S := Trim(KeyValues[EndIdx]);

      if (S <> ”) and (S[1] = ‘[‘) and (S[Length(S)] = ‘]’) then Break;

      Inc(EndIdx);

    end;

    Strings.BeginUpdate;

    try

      for I := BeginIdx + 1 to EndIdx – 1 do

        if KeyValues[I] <> ” then

           Strings.Add(KeyValues[I]);

    finally

      Strings.EndUpdate;

    end;

finally

    KeyValues.Free;

end;

end;

注1:如果没有安装过 TntControls 的朋友,只要将 WideString 改成 string,将 TTnt 开头的对象都改成 T 即可。

注2:第二个参数 Strings: TTntStrings 是抽象类。你可以使用 TStringList,不过我推荐使用 THashedStringList。当记录数量很大的时候搜索某条记录 (如:Strings.Values[‘LastRecode’]) 可能也相当耗时。不使用 THashedStringList 那 ReadSectionValuesEx 的优势无法完全体现。

另外,DELPHI 中还提供了一种 TMemIniFile。原理是一次性将整个 IniFile 文件读入内存,以提高响应速度。但灵活性和稳定性不如使用 TIniFile + ReadSectionValuesEx 来的好。当然将常用的调用单条记录制作成函数会更加灵活方便。如 IniReadString(const FileName, Section, Ident, Default: WideString): WideString; 这些函数就请你自己扩充了 :D

最后说一下 XML。它的性质和 IniFile 差不多。不过他的结构更多样化,你可以轻松把一个 Object 保存在文件中,阅读也比较直观。我把 IniFile 文件看成简单的一层目录结构,那 XML 是多层目录结构。当然分析一个 XML 也相对会稍慢一些。待有时间,再向大家推荐好用高效的 TXMLParser。

印刷尺寸

正度纸张:787×1092mm
开数(正度) 尺寸 单位(mm)
全开 781×1086
2开 530×760 3开 362×781
4开 390×543 6开 362×390
8开 271×390
16开 195×271
注:成品尺寸=纸张尺寸-修边尺寸

大度纸张:850*1168mm
开数(正度) 尺寸 单位(mm)
全开 844×1162
2开 581×844 3开 387×844
4开 422×581 6开 387×422
8开 290×422
注:成品尺寸=纸张尺寸-修边尺寸

常见开本尺寸(单位:mm)
开本尺寸:787 x 1092
对开:736 x 520
4开:520 x 368
8开:368 x 260
16开:260 x 184
32开:184 x 130

开本尺寸(大度):850 x 1168
对开:570 x 840
4开:420 x 570
8开:285 x 420
16开:210 x 285
32开:203 x 140

正度纸张:787×1092mm
开数(正度) 尺寸 单位(mm)
全开 781×1086
2开 530×760
3开 362×781
4开 390×543
6开 362×390
8开 271×390
16开 195×271
注:成品尺寸=纸张尺寸-修边尺寸

大度纸张:850*1168mm
开数(正度) 尺寸 单位(mm)
全开 844×1162
2开 581×844
3开 387×844
4开 422×581
6开 387×422
8开 290×422
注:成品尺寸=纸张尺寸-修边尺寸

16开 大度:210×285 正度:185×260
8开 大度:285×420 正度:260×370
4开 大度:420×570 正度:370×540
2开 大度:570×840 正度:540×740
全开 大:889×1194 小:787×1092

名片

横版:90*55mm<方角> 85*54mm<圆角>
竖版:50*90mm<方角> 54*85mm<圆角>
方版:90*90mm 90*95mm

IC卡  85x54MM

三折页广告
标准尺寸: (A4)210mm x 285mm

普通宣传册
标准尺寸: (A4)210mm x 285mm

文件封套
标准尺寸:220mm x 305mm

招贴画:
标准尺寸:540mm x 380mm

挂旗
标准尺寸:8开 376mm x 265mm

4开 540mm x 380mm

手提袋:
标准尺寸:400mm x 285mm x 80mm

信纸 便条:
标准尺寸:185mm x 260mm 210mm x 285mm