使用表单

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
doc OOo
Book.png


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 对象提供了 SizePosition 属性以实现此目的:

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).


Personal tools