第二十章开发delphi对象式数据管理功能五内容摘要:
是非可视化的。 但可以借助于静态 DFM文件的可视化设计。 这就是生成和使用动态 DFM 文件的第二种方法。 也就是在应用程序运行前,在 Delphi 开发环境中,使用可视化开发工具设计所需窗口或部件的样式,以 DFM 文件保存。 然后在应用程序运行过程中,将 DFM 文件读入内存。 Delphi 的 Stream 对象和 Filer 对象在读取 DFM 文件时,会根据 DFM文件的内容自动创建部件及其拥有的所有部件。 在使用动态 DFM 文件时有两点需要注意。 ● 每一个动态插入的控制或部件必须在程序中调用 RegisterClass 进行注册 ● 读入 DFM 文件自动创建部件后,如果调用了 InsertControl 方法, 则在关闭窗口时要调用 RemoveControl 方法移去该控制,否则会产生异常事件 2. 动态 DFM 文件应用之一:超媒体系统的卡片设计 Delphi 多种类型的可视部件,如文本部件、编辑部件、图形图像部件 、数据库部件、媒体媒放部件和 OLE 部件等,每一种部件在屏幕中占据一定的区域,具有相当丰富的表现能力,可以作为卡片中的一种媒体,因此可以利用这些可视部件进行超媒体系统的卡片设计。 超媒体卡片设计要求卡片中的媒体数目和媒体种类是不受限制的,而且必须能够修改和存取卡片,因此,采用动态 DFM 文件是比较合适的。 而且如果利用Stream 对象,将卡片存储在数据库 BLOB 字段中,就为把超文本与关系数据库技术结合起来创造了契机。 下面是超媒体卡片设计子系统中的部分源程序,它演示了如何创建对象、插入对象和存取动态 DFM 文件。 ⑴ 在应用程序中注册对象 procedure (Sender: TObject)。 begin RegisterClass(TLabel)。 RegisterClass(TEdit)。 RegisterClass(TMemo)。 RegisterClass(TButton)。 RegisterClass(TPanel)。 RegisterClass(TPanelP)。 RegisterClass(TBitBtn)。 „ end。 ⑵ 创建和插入对象 procedure (Sender: TObject)。 var Ctrl : TControl。 Point: TPoint。 begin GetCursorPos(Point)。 Point := (Point)。 case CurToolIndex of 1 : begin Ctrl := (self)。 TLabel(Ctrl).AutoSize := False。 TLabel(ctrl).Caption := 39。 Label39。 +S。 TLabel(ctrl).Name := 39。 Label 139。 TLabel(ctrl).Top :=。 TLabel(ctrl).Left :=。 TLabel(Ctrl).Height := Round(100*Res/1000/Ratio)。 TLabel(Ctrl).Width := Round(600*Res/1000/Ratio)。 TLabel(Ctrl).Color := clWhite。 TLabel(Ctrl). := clBlack。 TLabel(Ctrl). := 39。 Roman39。 TLabel(Ctrl). := TLabel(Ctrl).Height。 TLabel(Ctrl). := fpFixed。 TLabel(Ctrl).Enabled := False。 TLabel(Ctrl).OnClick := LabelClick。 TLabel(Ctrl).OnMouseMove := ReportPos。 (Ctrl)。 := False。 CurTool := nil。 „ end。 2: begin Ctrl := (self)。 TEdit(ctrl).AutoSize := True。 TEdit(ctrl).Top :=。 TEdit(ctrl).Left :=。 TEdit(Ctrl).Height := 20。 (Ctrl)。 „ end。 3: „ end。 end。 ⑵ 存取动态 DFM 文件 procedure (Sender: TObject)。 begin if then begin DesignWin := (Application)。 ReadComponentResFile(, DesignWin)。 FileName :=。 := FFileName。 end。 end。 DesignWin是在 TMainForm 中定义的 TMDIChild 类型的窗体部件,是卡片设计平台; FFileName 是私有变量,用来保存当前编辑的卡片文件名。 DesignWin的 Init 方法实现如下: procedure。 var I: Integer。 Ctrl: TControl。 begin。 with BackGround do for I:= 0 to ControlCount 1 do if Controls[I].Name 39。 39。 then (Controls[I].Name, Controls[I])。 end。 BackGround 是 TPanel 类型的部件,所有的动态创建对象都插入到BackGround 中,所以,后面调用 (Ctrl); ObjectIns是个仿 Delphi 的媒体属性编辑器。 动态 DFM 文件的存储过程是这样的: procedure (Sender: TObject)。 begin if nil then := True。 WriteComponentResFile(FFilename, DesignWin)。 := FileName。 end。 end。 因为在 DesignWin 的 Init 方法 中调用了 InsertControl 方法,所以在关闭DesignWin窗口时要相应地调用 RemoveControl,否则在关闭 DesignWin窗口时会产生内存错误。 procedure (Sender: TObject。 var CanClose: Boolean)。 var I: Integer。 Ctrl: TControl。 Removed: Boolean。 begin if Modified = True then if MessageDlg(39。 Close the form?39。 , mtConfirmation, [mbOk, mbCancel], 0) = mrCancel then CanClose := False。 if CanClose = True then begin repeat removed := False。 I := 0。 repeat if [I].Name 39。 39。 then begin ([I])。 Removed := True。 end。 I := I + 1 until (I = ) or (Removed = True)。 until (Removed = False)。 SendMessage(, WM_MDICHILDCLOSED, 0, 0)。 end。 end。 3. 动态 DFM 文件应用之二:超媒体系统脚本语言设计 超媒体脚本语言设计是超媒体系统设计的重要内容。 脚本语言必须能够表达卡片中的多种 媒体对象,必须是可编程,可理解的,必须是可执行的,应该可以由脚本语言生成超媒体系统中的卡片和链。 DFM 文件可以看作是超媒体系统的卡片, DFM 脚本能够表达 DFM 文件中的多种控制,也就是说能够表达卡片中的多种媒体对象,再加上 DFM 脚本的对象式表达,可编辑性,可转换为 DFM 文件,因此用作超媒体系统脚本语言较好的形式。 ObjectBinaryToText和 ObjectTextToBinary过程提供了在部件和 DFM脚本之间相互转化的功能, ObjectResourceToText 和 ObjectTextToResoure 过程提供了 DFM 文件和 DFM 脚本之间相互转化的功能。 这样就可以在应用程序中自如实现超媒体卡片和超媒体脚本语言相互转化。 下面是卡片和脚本语言相互转化的程序:。第二十章开发delphi对象式数据管理功能五
相关推荐
的实现。 它们在 TReader 中的实现如下: procedure (const Name: string。 ReadData: TReaderProc。 WriteData: TWriterProc。 HasData: Boolean)。 begin if CompareText(Name, FPropName) = 0 then begin ReadData(Self)。
利用卵磷脂溶解于乙醇,然后采用层析技术进一步充分除去卵磷脂浓缩液中残留的油脂和脂肪酸,最后利用超滤技术将卵磷脂浓缩液中的其它成分加以分离和 提纯 孙其昌 04675999123 13946810399 10 黑龙江乌苏里江制药有限公司 刺五加注射液脱色技术。 我公司生产的刺五加注射液为橙黄色澄明液体,色素为中药杂质之一,刺五加注射液标准以前是棕色澄明液体,现在是橙黄色澄明液体
个具体的方法时,就不能使用其他方法去完成任务。 25. 可逆的动作 如果出现不允许的动作后,裁判恢复(取消)这个动作,这对 分数没有影响,然后裁判会提醒你这个动作是不允许的。 注意允许机器人出错,搞乱场地等,但是这些动作是不能恢复的。 26. 机器人损坏 在比赛过程中,因为不是故意地让机器人部件掉落而导致机器人损坏,你可以恢复机器人。 你可以自己取回也可以请求裁判帮助。 27. 场地损坏
Longint。 var Pos: Longint。 begin Pos := Seek(0, 1)。 Result := Seek(0, 2)。 Seek(Pos, 0)。 end。 2. TStream 方法的实现 ⑴ CopyFrom 方法 CopyFrom 是 Stream 对象中很有用的方法,它用于在不同存储媒介中拷贝数据。 例如,内存与外部文件 之间、内存与数据库字段之间等。
+、葡萄糖等物质进入该细胞是采用 方式,而 O CO2 等则通过 方式进出细胞。 29. 1958 年美国科学家从胡萝卜韧皮部中取出一些细胞进行培养,最终获得了完整的新植株,请根据下面实验过程示意图分析回答: ( 1)过程 ① 在生物技术中称为 ,由单个细胞形成细胞团需要经过 过程。 ( 2)过程 ② 由细胞团形成胚状体要经过 过程,其结果是。 5 第二单元《生命的基本单位 —— 细胞》测试卷(
搭 界;有的虽然痛恨别人破坏生态的行为,对别人讲生态,但从不检点自己的行为,如不少人习惯于随意扔烟头垃圾,随意践踏花草,他们不懂得生态环境保护要从我做起。 2. 多元化的投入机制未形成,生态市建设的投入不足。 目前,生态市建设的投入主要依赖于政府,投资渠道单一,市场化、多元化的投融资体制尚未形成。 而我市财政仅仅是吃饭财政,无力加大对生态市建设的资金投入