Difference between revisions of "ZH/Documentation/BASIC Guide/Working With Forms"
Line 169: | Line 169: | ||
{{PDL1}} | {{PDL1}} | ||
− | + | ||
+ | |||
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Working With Forms}} | {{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Working With Forms}} |
Latest revision as of 22:29, 16 December 2008
Apache OpenOffice 表单可以包含文本字段、列表框、单选按钮以及一系列其他控制元素,可以将其直接插入文本或电子表格中。可以使用表单功能工具栏来编辑表单。
Apache OpenOffice 表单可能会采用以下两种模式之一:草稿模式和显示模式。在草稿模式下,可以更改控制元素的位置,并可以使用属性窗口编辑其属性。
还可以使用表单功能工具栏在两种模式之间切换。
确定对象表单
Apache OpenOffice 将表单的控制元素置于绘图对象级别。可通过绘图级别的“表单”列表来访问实际的对象表单。可以在文本文档中按以下方式访问这些对象:
Dim Doc As Object Dim DrawPage As Object Dim Form As Object Doc = StarDesktop.CurrentComponent DrawPage = Doc.DrawPage Form = DrawPage.Forms.GetByIndex(0)
GetByIndex 方法返回索引编号为 0 的表单。
在使用电子表格时,需要为“工作表”列表设置一个中间级别,因为绘图级别并不是直接位于文档中,而是位于各个工作表中:
Dim Doc As Object Dim Sheet As Object Dim DrawPage As Object Dim Form As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets.GetByIndex(0) DrawPage = Sheet.DrawPage Form = DrawPage.Forms.GetByIndex(0)
正如 GetByIndex 方法名称所暗示的一样,文档可能会包含多个表单。在某些情况下这将非常有用,例如,在一个文档中显示不同数据库的内容,或者在表单中显示 1:n 数据库关系。为此,还提供了创建子表单的选项。
控制元素表单的三个要素
表单的控制元素具有三个要素:
- 控制元素的模型;在使用控制元素表单时,对于 Apache OpenOffice Basic 程序员来说,它是关键对象。
- 与此对应的是控制元素的视图(用于管理显示信息)。
- 由于文档中的控制元素表单是作为一种特殊绘图元素进行管理的,因此还提供了一个 Shape 对象,用于反映控制元素的绘图元素特有属性(尤其是位置和大小)。
访问控制元素表单的模型
可通过 Object 表单的 GetByName 方法提供表单控制元素的模型:
Dim Doc As Object Dim Form As Object Dim Ctl As Object Doc = StarDesktop.CurrentComponent Form = Doc.DrawPage.Forms.GetByIndex(0) Ctl = Form.getByName("MyListBox")
本示例将确定 MyListBox 控制元素的模型,该控制元素位于当前打开的文本文档的第一个表单中。
如果不确定控制元素所属的表单,则可以使用搜索选项对所有表单进行搜索,以便找出控制元素所需的表单:
Dim Doc As Object Dim Forms As Object Dim Form As Object Dim Ctl As Object Dim I as Integer Doc = StarDesktop.CurrentComponent Forms = Doc.Drawpage.Forms For I = 0 To Forms.Count - 1 Form = Forms.GetbyIndex(I) If Form.HasByName("MyListBox") Then Ctl = Form.GetbyName("MyListBox") Exit Function End If Next I
本示例使用 HasByName 方法检查文本文档的所有表单,以确定这些表单是否包含一个名为 MyListBox 的控制元素模型。如果找到相应的模型,则会将对该模型的引用保存到 Ctl 变量中,然后终止搜索。
访问控制元素表单的视图
要访问控制元素表单的视图,您需要使用关联的模型。然后,可以使用该模型通过文档控制器确定控制元素的视图。
Dim Doc As Object Dim DocCrl As Object Dim Forms As Object Dim Form As Object Dim Ctl As Object Dim CtlView As Object Dim I as Integer Doc = StarDesktop.CurrentComponent DocCrl = Doc.getCurrentControler() Forms = Doc.Drawpage.Forms For I = 0 To Forms.Count - 1 Form = Forms.GetbyIndex(I) If Form.HasByName("MyListBox") Then Ctl = Form.GetbyName("MyListBox") CtlView = DocCrl.GetControl(Ctl) Exit Function End If Next I
本示例中列出的代码与上一示例中列出的用于确定控制元素模型的代码非常相似。它不仅使用 Doc 文档对象,而且还使用引用当前文档窗口的 DocCrl 文档控制器对象。借助该控制器对象和控制元素的模型,本示例随后使用 GetControl 方法来确定控制元素表单的视图(CtlView 变量)。
访问控制元素表单的 Shape 对象
用于访问控制元素 Shape 对象的方法也使用文档的相应绘图级别。要确定特殊的控制元素,必须在该绘图级别的所有绘图元素中进行搜索。
Dim Doc As Object Dim Shape as Object Dim I as integer Doc = StarDesktop.CurrentComponent For i = 0 to Doc.DrawPage.Count - 1 Shape = Doc.DrawPage(i) If HasUnoInterfaces(Shape, "com.sun.star.drawing.XControlShape") Then If Shape.Control.Name = "MyListBox" Then Exit Function End If End If Next
本示例检查了所有绘图元素,以确定它们是否支持控制元素表单所需的 com.sun.star.drawing.XControlShape 接口。如果支持,Control.Name 属性随后将检查控制元素的名称是否为 MyListBox。如果是,该函数将结束搜索。
确定控制元素的大小和位置
如上所述,可以使用关联的 shape 对象确定控制元素的大小和位置。与所有其他 shape 对象一样,控制元素 Shape 对象提供了 Size 和 Position 属性以实现此目的:
- Size (struct)
- 控制元素的大小(com.sun.star.awt.Size 数据结构)
- Position (struct)
- 控制元素的位置(com.sun.star.awt.Point 数据结构)
以下示例说明了如何使用关联的 Shape 对象设置控制元素的位置和大小:
Dim Shape As Object Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Shape.Size = Size Shape.Position = Point
要使代码生效,控制元素的 shape 对象必须为已知对象。如果不是已知对象,则必须使用以上代码确定此对象。
Content on this page is licensed under the Public Documentation License (PDL). |