二十四史简介——北齐书

《北齐书》,五十卷,其中本纪八卷,列传四十二卷,唐李百药撰。
北魏末年,北方六镇发生声势浩大的反叛浪潮,后出身于怀朔镇低级武官的高欢获得了对二十余万鲜卑人的领导权,控制了北魏朝政。公元534年,高欢所立的孝武帝元修被逼西奔长安,高欢于是另立孝静帝元善见,迁都邺城,史称东魏。公元550年,高欢之子高洋废孝静帝自立,建立北齐。东魏、北齐统治区域南至长江,与梁、陈两朝先后对峙,西边在今山西、河南、湖北,与西魏、北周分界。公元577年,北齐被北周吞并。
《北齐书》本名《齐书》,宋时才加一“北”字而成今名。它虽以记载北齐历史为主,但实际上记述了从高欢起兵到北齐灭亡前后约八十年的历史,集中反映了东魏、北齐王朝的盛衰兴亡。
李百药(公元565–648年),字重规,定州安平(今河北安平)人,出身仕宦之家。李百药从小好学,博览经史著作,隋初曾任太子舍人,袭父爵为安平公。贞观二十二年卒,享年八十四岁。
北齐政权中,皇族内部叔侄、兄弟相互残杀,使这个二十年的短命王朝换了六个皇帝。《北齐书》对封建统治者之间的权势争夺有较多的叙述。
《北齐书》在流传过程中残缺严重,现在只有十七卷保持原貌,其他都是后人用《北史》等著作增补,这使《北齐书》的价值大大降低。但即便如此,它还是为我们了解东魏、北齐历史提供了一部断代史著作。

后期绑定与前期绑定

后期绑定

  将对象分配给一个声明为objcet类型的变量,若将一个变量声明为variant or object , 包括as form,as control变量,vb编译时就无法确定该变量讲引用那种类型的对象,应用程序只能在运行时确定对象的属性和方法。

  使用后期绑定,每次调用属性或者方法时,vb都将成员名传给该对象IDispatch接口的方法-GetIDsOfNames方法,GetIDsOfNames返回 该成员的id或者DispId,vb程序再将DispID传给IDispathch接口的Invoke方法来调用该成员。

  对于进程外部件而言,这就意味着一次额外跨进程调用,调用开销增大。

(idispatch接口:IDispatch接口把所有成员函数的入口地址放入到一个数组中,并且内部组织了一个Map,将数组索引和方法名称一一影射,DispId(COM 事件或者函数的调度 ID)就是这些方法在数组中的索引。通过DispId可以找到该方法的地址,调用该方法。

如,Dim oAutoCAD As Object
Set oAutoCAD = GetObject(, “Autocad.Application”)

前期绑定

  VB在编译时就知道属性或者方法的所在对象。

  前期帮定预先知道函数成员在类型中的DispID,不需要调用GetIDsOfNames方法。而且早期绑定允许程序在编译时分配内存,或者进行其他优化,从而生成更高效的应用程序。

如,Dim oAutoCAD As AcadApplication
Set oAutoCAD = GetObject(, “Autocad.Application”)

 使用比较

  可见,前期绑定的效率高于后期绑定的效率,在进程内创建对象,据说速度比例是2:3。而且前期绑定,在集成开发环境下,方法成员会自动显示。前期绑定会减少运行时的错误,但前期绑定时,在vb下需要引用dll文件或tlb文件,如果被引用的组件不存在,整个引用程序也不能运行,如果是后期绑定,只要在创建对象createobect时才会出错。前期帮定时,如果被引用组件版本不同,可能会有兼容性问题,但是如果是后期绑定,则没有问题。

二十四史简介——魏书

《魏书》,一百二十四卷,其中本纪十二卷,列传九十二卷,志二十卷。因有些纪、列传和志篇幅过长,又分为上、下、或上、中、下三卷,实共一百三十卷。
北齐魏收撰。
鲜卑族是我国古代东北大兴安岭东麓一个古老的民族。公元一世纪末,随着匈奴帝国的解体,鲜卑族逐渐向西迁徒,成为大漠一个强大的民族集团,公元三世纪初,鲜卑拓跋部首领猗卢在塞北建立了代国,公元376年,代政权被氐族建立的前秦消灭。公元386年,拓跋鲜卑各部复拥拓跋为代王,重建政权。拓跋解散了拓跋鲜卑原有的部落组织,定居农耕,迁都平城,于公元398年改称魏,史称北魏。由于吸收先进的汉族文化,北魏国力日益强盛,终于在公元439年统一中国北方,结束了十六国时期的动荡局面。公元493年,孝文帝拓跋宏迁都洛阳,改姓元氏,推行了一系列汉化改革措施。到宣武帝元恪时,北魏达到鼎盛时期,在西边夺取汉中,进窥巴蜀,在东边巩固了洛阳周边的防御,并与梁朝争夺淮南,但不久就由于政治腐败和人民的反抗而崩溃,分为东魏和西魏两个对峙的政权。《魏书》记载了鲜卑拓跋部早期至公元550年东魏被北齐取代这一阶段的历史。
拓跋时就曾命令邓渊撰《代记》十卷,按年月编次本朝史事。太武帝拓跋焘神嘉二年,诏撰《国记》,由崔浩定为编年体,成书三十卷。
《魏书》在流传过程中亡佚甚多,本纪缺二卷,列传缺二十二卷,此外又有三卷残缺不全,分别由后人取其它史书补足。
魏收,北齐钜鹿下曲阳人,字伯起,小字佛助。他机警能文,与温子升、邢子才号称三才子,但生性轻薄,人称“惊蛱蝶”。他奉命著《魏书》时曾声称:
“何物小子,敢共魏收作色,举之则使上天,按之则使入地。”书成之后,众口喧嚷,指为“秽史”,魏收三易其稿,方成定本。

二十四史简介——陈书

《陈书》是南朝陈的纪传体断代史著作,记载了自陈武帝陈霸先即位至陈后主陈叔宝被隋文帝灭国首尾三十三年间的史事,由姚察及其子姚思廉两代人撰写的。
姚察,字伯审,吴兴武康人,姚思廉,字简之,陈亡后,迁家关中,为万安人。两人事迹已于本书《梁书》前言中作了介绍,可以参阅。
《陈书》中的帝纪六卷,列传三十卷,共三十六卷,无表志。
陈朝封建政权只存在了三十三年,在政治、经济、文化方面没有特别的建树,或许与此有关。《陈书》内容比不上《梁书》那样充实,本纪和列传都过于简略。

面向对象编程(OOP)

对象(Object)

对象代表应用程序中的元素,类似于汽车中的轮子、发动机等,抑或汽车本身。AutoCAD中有许多对象,例如:文档、模型空间、直线、图层、字典等。Excel中也有许多对象,例如:工作簿、工作表、单元格、图表、窗体,或是一份报告。程序中调用对象的任一方法或改变它的属性之前,必须先声明对象如,Dim oDraw As Object或Dim Workbooks As Object。

对象集合(Collection)

对象集合是一个包含几个相同性质的对象的集合。例如,在AutoCAD中的Documents 对象包含了所有已打开的Document(文档)对象,这当然指多文档环境(MDI)。在Excel中的Workbooks 对象包含了所有已打开的Workbook(工作簿)对象,Worksheets对象集合包含了某个工作簿中的所有工作表Worksheet。

集合中的项目可以通过索引号或名称来做识别。例如,Documents(1) 指的是索引号是1的文档对象。Workbooks(1) 指的是索引号是1的工作簿对象。需要注意的是AutoDesk是从0开始,而MicroSoft则是从1开始。

父对象与子对象(Parent Object And Subobject)

汽车可以包含轮子和发动机,这就是典型的父对象与子对象。

在AutoCAD中,文档对象可以包含直线对象、圆弧对象等。在Excel中,Worksheet对象可以包含单元格对象和图表对象等。

方法(Method)

方法指的是对象能执行的动作。例如,Add是下拉列表控件ComboBox对象的一个方法,因为它会增加一个新项目到下拉式列表框中。

下面的程序调用 Add 方法,增加一个新的项目到下拉列表控件“Combo1”项目中。

Sub AddEntry(newEntry as String) ‘ newEntry作为过程的参数被传入过程AddEntry

Combo1.Add newEntry ‘ newEntry作为一个项目增加到下拉列表框中

End Sub

某文档oDraw另存为AutoCAD 2000版,SaveAs就是文档的一个方法。oDraw.SaveAs sFullName, 12 ‘ac2000_dwg = 12, AutoCAD 2000 DWG (*.dwg)

如果对象共享共同的方法,则可以操作整个对象集合。例如,下列的过程会预览本工作簿所有的工作表。oWorkbook.Worksheets.PrintPreview

事件(Event)

事件是一个对象可以识别的动作,像单击鼠标或按某键等,在系统捕捉到对象的事件后,执行该事件对应的程序代码,从而实现相应控制。

不同的对象具有不同的事件。例如,文档拥有的事件:Activate、Deactivate、ObjectModified、Save等。工作簿拥有的事件:Open、Activate、BeforeClose、BeforePrint、BeforeSave、NewSheet、SheetChange等,工作表拥有的事件:SelectionChange、Change、Activate等。

在事件模块中写入需要的代码,当对象可识别的事件发生时,这些代码将被执行。

简要示例如下:

Private Sub oWorkbook_Open()

MsgBox “您打开了当前的工作簿!”

End Sub

属性(Property)

一个对象的属性定义了对象的特征,诸如大小、颜色或屏幕位置,或某一方面的行为,诸如对象是否激活或是否可见。可以通过修改对象的属性值来改变对象的特性。

若要设置属性值,则在对象的引用后面加上一个表达式,它是由属性名加上等号(=) 以及属性值所组成的。

例如,oDraw(0).Name = “test11″设置了0号文档名为test11。下面的语句设置“test”工作表的名称而改变工作表的标签名称。oWorkbook.Worksheets(“test”).Name = “test11”

有些属性并不能设置,只能读取。通过检索每属性的帮助主题,可以看到是否可以设置此属性(读与写),或只能读取此属性(只读),还是只能写入此属性(只写)。

可以通过属性的返回值,来检索对象的信息。

Debug.Print oDraw(0).FullName