Oberon/ETH Oberon/教程/GadgetsUse
这些教程页面由 André Fischer (afi) 编写,由 Hannes Marais 提供编辑协助,托管在 ETHZ,并保留在 ETH 许可 下。相关内容可在系统中通过 Book.Tool 找到。扩展内容也可以在 纸质版 上找到。一些教程页面位于 WayBack 档案 中。
了解如何将小部件插入显示空间,如何命名它,以及更一般地理解小部件属性的概念。回顾系统提供的丰富的小部件集合。了解和练习小部件的组合,以构建具有图形用户界面或将现有界面根据您的喜好进行调整的新应用程序。
预计时间:60 分钟。
Gadgets.Insert ViewNewProc ~ 创建指定类型视觉小部件的新实例,并将其插入到显示空间中的 插入符 位置。假设模块 M 包含一个过程 P,它的任务是动态分配某个对象类型的新实例。"M.P" 然后被称为该对象的 New 过程或生成器。执行 New 过程 M.P 会导致创建该对象类型的新实例并将其初始化为默认状态,以便它可以接受消息(即它完全功能)。由于该对象在创建后不知道该做什么,因此需要另一个命令来显示新对象(即,如果它是视觉小部件)。Oberon 模块 "Gadgets" 提供了用于创建和插入对象的标准接口。
将模型小部件链接到小部件 - Gadgets.Link
[edit | edit source]Gadgets.Link ModelNewProcedure ~ 创建指定类型模型小部件的新实例,并将其链接到所选的可视化小部件。如果模型小部件已链接到所选的小部件,则首先将其删除。
插入可视化 + 模型小部件对
[edit | edit source]Gadgets.Insert ViewNewProc ModelNewProc ~ 与以下命令序列具有相同的效果
- Gadgets.Insert ViewNewProc ~
- Gadgets.Link ModelNewProcedure ~
ViewNewProc 标识要创建的可视化小部件的 New 过程。ModelNewProc 标识要链接到新创建的小部件的模型小部件。例如,以下创建了一个按钮和布尔值的模型-视图对:
- Gadgets.Insert BasicGadgets.NewButton BasicGadgets.NewBoolean ~
此新的小部件对插入到插入符号位置。请注意,许多小部件既可以与模型一起使用,也可以不使用模型。通常,按钮 不需要模型小部件。
小部件属性
[edit | edit source]小部件的有趣特性是它们可以被修改并在任何位置使用。 Oberon 系统 3 以典型的拖放方式创建新的用户界面 (GUI) 或修改现有的用户界面。UI 构造简化为文档编辑。
为此,每个小部件类型都有自己的属性集,用于配置特定的小部件实例,但所有小部件都有两个共同属性,即Gen(生成器)和Name属性。每个属性都由属性名称和属性值对组成,它们定义了小部件外观和行为的一部分。属性通常用于指定按钮 的标题、小部件的颜色或当小部件受到鼠标中键单击的请求时必须执行的命令。
此外,小部件可以使用用户定义的属性进行扩展。
Columbus 可用于检查和更改当前属性值以进行自定义。在本教程的后面,您将有很多机会练习这一点。属性也可以使用命令或在程序控制下进行询问和设置。
Gen 属性
[edit | edit source]Gen 属性包含创建此小部件实例的生成器或New 过程的名称,如果您愿意,也可以将其分配。它是一个只读值,也就是说它不能被定制。但是,可以使用命令Gadgets.Change 将给定类型的小部件转换为另一种类型的小部件。这种可能性很少使用。
Name 属性
[edit | edit source]Name 是小部件最重要的属性之一,每个小部件都有这样的属性。当小部件被实例化时,属性包含空字符串。它用于引用小部件,无论是来自其他小部件还是来自应用程序。引用另一个小部件名称的小部件或应用程序可以在指定的环境或上下文 中搜索并找到(或找不到)该另一个小部件。小部件通常使用名称来引用彼此的属性。实际上,小部件使用以下语法来引用另一个小部件的属性
- ObjectName.AttributeName
其中ObjectName 是小部件的名称(属性),AttributeName 是要访问的属性名称。您观察到“名称属性”和“属性名称”之间的区别了吗?
名称属于小部件,即它存储在小部件本身内部,这意味着命名小部件的副本具有相同的名称。
名称范围
[edit | edit source]当命名小部件属于私有库时,使用名称范围。系统搜索小部件的范围由容器元素的层次结构决定。当前名称范围是在小部件执行命令或接收消息时确定的,并且正是小部件所在的容器。祖先会收到一个特殊的Find 消息来搜索指定的对象。find 消息以广度优先的方式从祖先传播到所有后代,直到找到命名对象。如果需要,小部件可以通过在容器层次结构中更高的点开始查找操作来扩大搜索空间,但可能会遇到歧义名称的风险。
Cmd 属性
[edit | edit source]Cmd 属性可能包含一个字符串,指定当用户用鼠标中键单击小部件时应采取的操作。此操作在 Oberon 语言中被编码为一个过程,即该字符串必须表示一个 Oberon 命令,无论是否有参数。该过程可以搜索用户界面中的对象,并相应地更改其状态。例如,在按钮中指定的命令属性“Edit.Open Test.Text”将在您单击它时打开一个显示文件“Test.Text”的文本查看器。使用非常简单的脚本工具,可以在将参数传递给过程之前对其进行编辑:在命令字符串中嵌入特殊宏 字符允许访问属性、处理选择、编辑字符串等。这些宏用于将不同的小部件组合在一起,并具有构建某些类别的 Oberon 应用程序的图形界面的足够功能。
如果此字符串为空或无法解释为命令,则不执行任何操作。
很少有小部件没有此属性,例如日历、时钟等。
ConsumeCmd 属性
[edit | edit source]ConsumeCmd 属性可能包含一个字符串,指定当小部件被小部件消耗时应采取的操作。该字符串的规格与上面 Cmd 属性字符串的规格相同。此外,可以使用宏 字符来控制消耗操作,处理被消耗者。目前,只有图标 小部件配备了此属性。
Color 属性
[edit | edit source]一些小部件具有Color 属性。小部件系统使用 16 色或 256 色调色板,具体取决于安装的硬件。每种颜色都由一个整数 0 .. 15 或 0 .. 255 标识,具体取决于硬件。使用颜色选择器 可以非常方便地设置小部件的颜色属性:为此,其Cmd 属性的默认值已定义。
GridSnap 属性
[edit | edit source]容器小部件,如面板,配备了网格捕捉属性,允许轻松定位其后代。捕捉功能(在手工绘图中没有等效功能)强制可显示的小部件在移动或复制时对齐到(不可见的)垂直和水平线的栅格。分配给属性的整数值指定栅格线的距离(以像素为单位)。默认捕捉距离为 4 像素。
Locked 属性
[edit | edit source]通常您可能希望限制您创建的小工具的可编辑性。编辑可能意味着更改小工具在面板或其他容器中的位置或大小(请参见 调整大小和移动)。此可编辑性由两个因素决定。首先,小工具可能 编程 方式使其无法移动或调整大小。这是由程序员决定的内在限制。其次,锁定 属性是一个布尔值,它决定了小工具的可编辑性。
您将在视觉小工具集合的呈现中观察到,所有容器小工具(图标化器、笔记本、组织器、面板、面板文档、文本小工具)都具有此属性。请注意,该属性控制容器的所有和仅直接后代。也就是说,您不能选择性地仅锁定某些后代,并且必须自己锁定嵌套容器。由于包含的小工具的可编辑性由其上下文(祖先)控制,因此当它移动到另一个上下文时,其编辑行为会发生变化。
在创建 UI 后,您可以使用 Columbus 明确冻结它,用户可以随时解锁 UI 以进行调整。
Oberon 系统 3 为您提供了一个全面的小工具集合,每个小工具将在后面详细描述。将来,与系统一起提供的新的应用程序可能会添加它们自己的小工具。
每个小工具描述都包含以下部分
小工具属性和与小工具相关的命令的详细说明包含在“The Oberon Companion”的第 4 章中,该文件包含在发行版中。此材料最好以印刷文档的形式消化,并且过于庞大,无法放入 HTML 文档中。
为了支持以下详细说明,我们建议您准备并保留您 桌面 上的一小块空闲区域,以便在该区域中插入新小工具(只需单击命令),并且您可以使用 Columbus 同时研究各种属性,因为您阅读本教程。这些小工具立即可以使用,可以随意修改和组合,您甚至可以磨练它们,直到它们成为可操作的对象,最终。否则,它们就是一次性产品。
或者,您也可以通过单击一次 BasicGadgets.Panel 来插入几乎完整的小工具集合。在这种情况下,您还需要 Columbus。然后您将观察到所有这些小工具都配备了一个名为“Tutorial”的“自定义”属性,否则没有记录。它用于将帮助图标 指向本教程中小工具的描述。因此,您可以选择按顺序阅读本教程(小工具按字母顺序排列)或随机阅读。
这种替代方案的缺点是它使用了一个光学上很大的面板,并且您的显示空间会很拥挤。您最好使用桌面上的“文档列表”按钮!不要“存储”该面板,只需“关闭”它。
生成器: Gadgets.Insert BasicGadgets.NewButton ~
别名: 按钮
功能: 按钮可以使用中间鼠标键单击进行推入和推出。您已经在另一个教程中练习过 按钮。它可能有一个字符串或一个视觉小工具作为 标题,用于标识按钮的功能。它可以链接到 布尔 或 整数 模型小工具。按钮在单击时能够执行命令。一个属性指示按钮是否应该在单击后弹出。按钮在链接到整数值时充当单选按钮。要构建一组单选按钮,多个按钮链接到同一个整数小工具。每个小工具都记住一个特定的数字,当整数小工具具有该值时,该按钮将被按下。提供了一个命令来为按钮小工具分配唯一的数字。
生成器: Gadgets.Insert Clocks.NewCalendar ~
别名: 日历
功能: 显示当前星期几和日期的日历。
生成器: Gadgets.Insert TextFields.NewCaption ~
别名: 无
功能: 标题是一段文本,通常用于面板和其他容器小工具中的标题或注释。标题可能包含多行文本。标题仅提供有限的编辑功能。焦点位置使用左键单击设置。然后该小工具被框在一个细矩形中,但没有可见的光标。当处于焦点状态时,键入的字符将追加到标题中。使用退格键来更正或修改标题。也可以通过复制来追加选定的文本。当标题被选中时,可以使用其中一个 EditTools 命令更改字体和文本颜色。
有用提示: 可以直接在光标位置的面板中键入标题。不需要首先使用 Gadgets.Insert Caption ~ 插入标题。
生成器: Gadgets.Insert BasicGadgets.NewCheckBox ~
别名: 复选框
功能: 复选框的功能类似于 按钮,只是它在设置为 TRUE 时会显示一个小勾号。它可以链接到 布尔 或 整数 模型小工具。它在连接到整数小工具时充当单选按钮。在这种情况下,勾号是矩形的。
生成器: Gadgets.Insert BasicFigures.NewCircle ~
别名: 圆形
功能: 具有可变半径的圆形。选择圆形会导致出现两个控制点,一个位于中心,另一个位于圆周上。可以使用中间鼠标键拖动任何一个控制点来更改圆形的位置和半径。
生成器: Gadgets.Insert Clocks.NewClock ~
别名: 时钟
功能: 带有时针和分针的模拟时钟,显示当前时间。
生成器: Gadgets.Insert ColorTools.NewColorPicker ~
别名: 颜色选择器
功能: 颜色选择器显示系统当前的调色板。颜色从上到下、从左到右排列,从颜色索引 0 到可用的颜色数量。按下颜色选择器上的中间鼠标键会弹出一个菜单,从中可以选择一种颜色。然后将该颜色应用于上次选择,无论是文本、小工具还是小工具组。请注意,并非所有小工具都可以着色。
生成器: Gadgets.Insert Clocks.NewDigiClock ~
别名: 数字时钟
功能:一个显示当前时间(小时和分钟)的数字时钟。
生成器:Gadgets.Insert Finder.NewDocList ~
别名:查找器
功能:查找器用于快速在堆积在容器中的许多文档中找到一个文档。查找器通常放置在桌面上,尽管它们也可以在其他容器中使用。将鼠标光标移动到查找器上并按下鼠标中键会弹出一个文档名称列表,从中可以选择一个。当释放鼠标键时,选定的文档将被带到容器的最前面。查找器标有“文档列表”。
生成器:Gadgets.Insert Icons.NewIcon ~
别名:图标
功能:图标为其内容(单个子项)提供标题。创建时,图标不包含任何内容。在此阶段,它将消耗一个组件作为其内容。一旦图标消耗了组件,它将不再接受任何其他组件供其消耗。选择此类图标并发出命令Icons.Break将逆转操作。
生成器:Gadgets.Insert Icons.NewIconizer ~
别名:图标器
功能:图标器用于构建各种类型的菜单。它可以被视为翻转卡片,卡片的每一面都有一个组件。翻转卡片会从一个组件切换到另一个组件。最初,图标器不包含任何组件,但可以在其两个面打开和关闭之间翻转。翻转按钮位于图标器的左上角。点击此按钮会翻转图标器。在构建菜单时,卡片的一面代表菜单,另一面代表菜单项。当一个状态为空时,可以将组件放到图标器中,使其成为卡片那一面的视图。通过设置属性,可以将图标器更改为不同类型的弹出菜单。
生成器:Gadgets.Insert BasicFigures.NewLine ~
别名:线条
功能:显示一条线。
生成器:Gadgets.Insert Lists.NewList ~
别名:列表
功能:参见 列表
生成器:Gadgets.Insert NamePlates.NewNamePlate ~
别名:名称板
功能:名称板显示文档菜单栏中文档的名称,以及位于桌面内部时桌面的名称。名称是在 TextDoc 组件、LogDoc 组件或 PanelDoc 组件的DocumentName属性中找到的字符串值,在桌面情况下。大多数编辑操作的工作方式与主可编辑文本中的操作相同 - 名称可以更改,可以选中一段文本,删除或复制。一个限制是,为了设置插入符号(点击鼠标左键),鼠标焦点必须指向名称板的底部。然后名称板进入本地编辑模式,其中回车键 (RETURN) 不被接受。另一个限制是字体、颜色和垂直偏移量不能更改。
生成器:Gadgets.Insert Navigators.NewNavigator ~
别名:导航器
功能:你的桌面,由组件系统提供,是显示屏大小的四倍。它被组织成四个象限,每次只有一个象限可见。导航器是这四个象限的微型表示,显示了放置在桌面上的对象的轮廓,以及显示屏上显示的象限用黑色标记。你可以将对象从当前象限拖动到其他三个相邻的象限中,或者通过将对象放置在象限之间的边界上将对象带到当前象限。点击象限之一会将你传送到该象限,该象限将变得可见。
生成器:Gadgets.Insert NoteBooks.New ~
别名:笔记本
功能:笔记本将组件组织为笔记本的页面。所有页面都具有相同的大小,这意味着如果未锁定,调整页面大小会导致所有其他页面也相应调整大小。标题,即当前页面的名称属性,显示在笔记本的顶部。两个箭头形按钮允许你向前或向后翻页。标题栏消耗一个新页面,然后将其添加到笔记本的末尾。可以通过将其放到其他位置或使用右键加左键单击来删除页面。
生成器:Gadgets.Insert Organizers.NewPanel ~
别名:组织器
功能:组织器是一个面板,扩展了一个简单的约束求解器,以便在组织器的大小发生变化时自动重新排列子项。组织器通过组织器左上角的对角线与面板区分开来。约束系统基于虚拟线:四条线在子项的四个边和面板的边缘之间延伸。子组件的水平边连接到面板的顶部或底部,垂直边连接到左侧或右侧。四根线的长度以四个数字的形式给出,在子项的Constraint字符串属性中。正数将线“向外”延伸,负数将线“穿过”组件。
也就是说
Gadgets.ChangeAttr Constraints "10 20 10 10" ~
在选定子项上设置一个约束,其中组件的左边缘距离面板左侧 10 像素,顶部边缘距离面板顶部 20 像素,右侧边缘距离面板右侧 10 像素,底部边缘距离面板底部 10 像素。因此数字的顺序是左、上、右和下线距离。将 20 更改为 -20 会将组件的顶部边缘连接到面板底部 20 像素处。
生成器:Gadgets.Insert Outlines.NewOutline ~
别名:轮廓
功能:轮廓,它仅在文本组件内部工作,实现了一种将文本折叠到组件中的方法。折叠时,轮廓是一个黑色矩形。在折叠的轮廓上中间点击会将它的内容“展开”在两个箭头之间。展开的轮廓中的文本可以自由编辑。点击两个箭头之一会将文本重新折叠到轮廓中:这是一种有趣的方式,可以在不使主文本过载的情况下呈现细节或解释性信息。但是要注意,删除轮廓箭头可能会阻止轮廓再次折叠。请注意,编译器无法编译折叠的轮廓中包含的文本,你需要先展开它们。
生成器:Gadgets.Insert Panels.NewPanel ~
别名:面板
功能:参见 额外描述
生成器:Gadgets.Insert PanelDocs.NewDoc ~
别名:面板文档
功能:面板文档是一个文档,包含一个面板组件。可以为文档指定一个名称,并以该名称保存在文件中。如果使用命令 Desktops.OpenDoc (PanelDoc) 打开面板文档,它将显示一个菜单栏,其中包含标有 [关闭] 和 [存储] 的按钮。如果它在文本用户界面的查看器中打开,菜单栏将显示另外两个按钮 [复制] 和 [增长]。
生成器: Gadgets.Insert ProgressMeter.NewFrame ~
别名: ProgressMeter
功能: 显示一个进度条,显示数据传输的进度。例如,它被用于 HyperDocs.Panel 中。
生成器: Gadgets.Insert BasicFigures.NewRect ~
别名: Rectangle
功能: 一个矩形,可能被填充。选择一个矩形会导致两个对角线相对的控制点出现。控制点可以通过拖动鼠标中键来调整。一个橡皮筋线指示当前矩形,当鼠标键释放时,它将呈现最终形状。
生成器: Gadgets.Insert BasicFigures.NewRect3D ~
别名: Rectangle3D
功能: 一个具有 3D 效果的矩形,可能被填充。选择一个矩形会导致两个对角线相对的控制点出现。控制点可以通过拖动鼠标中键来调整。一个橡皮筋线指示当前矩形,当鼠标键释放时,它将呈现最终形状。
生成器: Gadgets.Insert RefGadgets.NewFrame ~
别名: RefFrame
功能: 一个引用框架(也称为视觉引用小工具)提供了一个框架,用于可视化对任何类型为 Objects.Object 的对象的引用。此框架可以有三种不同的表示形式
此小工具的实际优势在于,引用代表了一个对象,无论其类型(视觉小工具或模型)和大小。它可以像它所代表的对象一样轻松地被拖放到另一个上下文,或被复制到另一个上下文。
视觉引用可以通过将视觉小工具拖放到其框架中或通过复制选定的视觉小工具来更改。或者,来自另一个引用的引用可以被拖放到或复制到该框架,效果相同。当引用通过这样的用户交互更改时,如果指定了,它将执行一个消费命令。鼠标中键单击引用以使用 Columbus 检查它。要删除(或清除)引用,请在引用内进行左右互换单击。与大多数其他视觉小工具一样,引用在被单击时可能会执行命令。此小工具用于 Objects.Panel 和 Libraries.Panel 中,这两个是为其设计的 Columbus 的两个组件,但可以在任何其他环境中使用。
生成器: Gadgets.Insert Gages.NewFrame ~
别名: Scope
功能: 与之链接的模型小工具所采用的先前值的条形图。当模型更改其值时,会在右侧添加一个垂直条。当图表填满范围时,条形图会随着新添加的垂直条向左滚动。图表可见部分中观察到的最小值和最大值显示在左侧。范围会根据此值范围自动调整其比例。
生成器: Gadgets.Insert RembrandtDocs.NewDoc ~
别名: RembrandtDoc
功能: 一个图片文档,显示单个图片小工具。包含的图片可以用伦勃朗.Panel 提供的绘图、操作和颜色工具进行编辑。如果用命令 Desktops.OpenDoc (RembrandtDoc) 打开,它会显示一个菜单栏,其中包含标有 [关闭]、[+]、[-] 和 [存储] 的按钮。[+] 放大选择,或者如果没有选择,则放大整个图片。该按钮可以连续点击 5 次,以获得 16 倍的放大倍数。这使得像素级修补图片变得非常容易。[-] 缩小整个图片。该按钮可以连续点击最多 5 次,直到恢复原始大小,不能超过。如果文档在文本用户界面的查看器中打开,则菜单栏会显示两个额外的按钮 [复制] 和 [增长]。
生成器: Gadgets.Insert Rembrandt.New ~
别名: 无
功能: 一个伦勃朗框架提供了一个框架,用于可视化单个图片模型小工具。
生成器: Gadgets.Insert Gages.NewFrame ~
别名: ScrollView
功能: 一个滚动视图是一个视图,可以根据其属性值,用水平或垂直滚动条,或两者同时来进行装饰。
生成器: Gadgets.Insert SetGadgets.NewFrame ~
别名: SetFrame
功能: 一个设置框架提供了一个框架,用于可视化一个集合模型小工具。可以通过单击其占位符(位 0 从小工具的左侧开始)来包含或排除一个位。当黑条出现在其对应位置时,一个位处于开状态。一个设置框架可以与一个整数或一个集合模型小工具链接。
生成器: Gadgets.Insert Sisiphus.New ~
别名: Sisiphus
功能: 一个动画卡通,代表一个名为西西弗斯的步行者。单击西西弗斯会激活屏幕保护程序,然后按下 Esc 键会将其移除。
生成器: Gadgets.Insert BasicGadgets.NewSlider ~
别名: Slider
功能: 请参见滑块。它可以与一个整数、一个实数或一个字符串 模型小工具链接。与任何其他小工具一样,滑块可以调整大小,但它的特殊之处在于,它可以调整为具有垂直或水平设备,并且手柄会相应地滑动。
生成器: Gadgets.Insert BasicFigures.NewSpline ~
别名: Spline
功能:样条线,可能填充。选择样条线会导致控制点出现在线连接处。控制点可以使用鼠标中键调整。在拖动控制点时右键单击会插入一个额外的控制点。在拖动控制点时左键单击会删除该点。
生成器:Gadgets.Insert TextDocs.NewDoc ~
别名:TextDoc
功能:文本文档提供将文本保存到文件的功能。文本文档容器的子级是文本工具。如果文本文档使用命令 Desktops.OpenDoc (TextDoc) 打开,它将显示一个菜单栏,其中包含标有 [搜索]、[替换] 和 [存储] 的按钮。[搜索] 按钮在文本中搜索选定的文本段。每次按下 [搜索] 按钮时,光标都会向前移动到文本中出现模式的下一个位置。当到达文本结尾时,搜索将从文本开头循环。[替换] 按钮将最后搜索的模式替换为当前文本选择。然后光标将向前移动到搜索模式的下一个出现位置。重复按下 [替换] 按钮将替换搜索模式的所有后续出现位置。可以通过按下 [搜索] 按钮(次数取决于需要)来跳过替换。在任何时候都可以按下 [替换] 按钮以开始替换搜索模式的出现位置。
生成器:Gadgets.Insert TextFields.NewTextField ~
别名:TextField
功能:TextField 允许编辑一行文本。它可以链接到 Integer、Real、String 或兼容的模型工具。完整的 Oberon-like 文本编辑 功能可用于文本字段。光标或焦点位置使用鼠标左键单击设置,选择使用鼠标右键处理。文本字段在编辑过程中进入临时本地编辑模式。在此期间,文本字段的框架似乎从屏幕中弹出。在该编辑模式下,对包含的文本字符串所做的更改不会立即反映在链接到文本字段的模型工具中。一旦光标移开或按下 RETURN 键,本地编辑模式就退出,模型和视图保持一致。当按下 ESC 时,文本字段将恢复以前的值(如果模型工具中仍然可用)。当文本字段链接到除字符串模型工具以外的模型工具时,将执行值转换,以与模型工具相同的格式进行转换。在某些情况下,转换不可行,这将导致根据模型工具的确切性质显示默认值。当多个文本字段位于同一个容器中时,TAB 键将光标从一个文本字段移到另一个文本字段。设置光标并按下左右箭头键会水平滚动包含的文本,前提是内容比文本字段的宽度更宽。
生成器:Gadgets.Insert Gadgets.New ~
别名:TextGadget
功能:文本工具允许编辑文本。完整的 Oberon 文本编辑功能可用于文本工具。大多数 编辑命令 也会对文本工具起作用。但是,Locate、Search 和 Replace 命令已被 TextDocs 模块中实现的类似但更强大的命令所取代。除了 Edit 的基本编辑功能外,还支持样式。通过按下 Ctrl-Enter (键盘) 在文本工具中插入样式。样式可能具有以下模式之一:左、中、右和垫。
生成器:Gadgets.Insert TextGadgets.NewControl ~
别名:TextHyperlink
功能:TextHyperlink 是一个文本控件,仅在文本工具中打开控件查看(使用 TextDocs.Controls 命令)时可见。超链接包含一个 Oberon 命令,该命令将在鼠标中键单击位于该文本正前方的彩色文本时执行。请注意,超链接前面的文本必须与黑色不同的颜色才能激活超链接。
生成器:Gadgets.Insert TextGadgets.New ~
别名:TextNote
功能:TextNote 是一个 TextGadget,没有滚动条。唯一的区别是由于没有滚动,文本注释会自动增长(宽度和高度)以确保整个文本可见。该工具可以像便笺簿或便签一样使用,一组 TextNotes 可以组织在 笔记本 中。它也可以用作弹出菜单,作为 List 的替代,它还具有允许工具在文本中流动的附加功能。颜色可以用来增强演示效果。
生成器:Gadgets.Insert TextGadgets.NewStyleProc ~
别名:TextStyle
功能:TextStyle 是一种文本控件工具,它会影响文本的格式。样式工具的可见性使用 TextDocs.Controls 命令切换。它们的形状是一条细的水平虚线,两端有黑色的权重。可以使用 TextGadgets.NewStyle 命令在光标处插入样式,也可以通过按下键盘上的 CTRL-ENTER 来插入样式。在这种情况下,所有样式都将变为可见。在 Macintosh 上,请改用 num-lock 键。样式分为两个部分,上面部分(虚线以上)控制格式;下面部分控制制表符(或制表符)的设置。鼠标中键单击虚线以上的区域如下:在按住并拖动黑色权重所在的区域时,可以指定左边界和格式宽度;单击权重旁边(但不在权重顶部),会打开和关闭权重。权重将文本行左右两端的文本拉向自己。这样就可以选择左对齐、块对齐、居中对齐和右对齐。当鼠标焦点位于虚线以下时,鼠标中键和左键的组合单击会插入一个新的制表符。制表符显示为一个小小的黑色矩形,可以通过拖动鼠标中键来移动。通过将制表符完全拖出样式工具来删除制表符。通过将值分配给Tabs、Left 和Width 属性,所有这些调整都可以比使用鼠标更方便地进行。请注意,制表符仅在选择左对齐模式时才会显示自己。复制一段文本总是会复制包含在该段中的工具(样式也是工具)。Pagebreak 属性用于指定打印时是否应该在样式之前插入分页符。导致分页的样式将显示为实线而不是虚线。当 TextStyle 被命名并放置在公共库中时,它可以在同一个文档中甚至在不同的文档中多次重复使用。
生成器:Gadgets.Insert TimeStamps.New ~
别名:TimeStamp
功能:TimeStamp 显示包含它的文档最后一次存储在磁盘上的日期和时间。日期和时间根据注册表 [System] 部分中的 DateFormat 和 TimeFormat 字段中包含的规范进行格式化。在新交付的系统的注册表中,分别为这些字段分配了默认值 DD.MM.YY 和 HH:MM:SS。
生成器:Gadgets.Insert Views.NewView ~
别名:View
功能: 视图就像一个摄像头,显示单个视觉小部件。这允许您对同一个小部件拥有许多不同的视图。视图可能为空,即不显示任何内容,在这种情况下,它可以消耗一个小部件来显示。每个视图对它显示的内容都有一个特定的视角(摄像头角度)。可以通过用鼠标抓取显示的小部件的边框并将其移动到新位置来更改视角。如果小部件太大导致边框不可见,则可以使用视图左上角周围的不可见区域来抓取和移动显示的小部件。另请参阅 ScrollView,它是一个带有可选水平和垂直滚动条的 View。
有关模型小部件的解释,请参阅 小部件介绍 和 使用模型小部件。
每个小工具描述都包含以下部分
生成器: Gadgets.Link BasicGadgets.NewBoolean
别名: Boolean
功能: 布尔值是一个模型小部件,它存储一个 BOOLEAN 值。布尔值充当按钮和小部件模型。参见 布尔值
生成器: Gadgets.Link Complex.New
别名: Complex
功能: Complex 是一个复合模型小部件,它具有指定复数的实部和虚部的属性。
生成器: Gadgets.Link Gages.NewDrv
别名: CurrentDirectory
功能: CurrentDirectory 模型小部件存储系统当前使用的工作目录。此模型小部件通常由 TextField 小部件可视化。
练习: 将光标设置在桌面上,然后单击
- Gadgets.Insert TextField CurrentDirectory ~
生成器: Gadgets.Link Gages.NewLoad
别名: CurrentLoad
功能: CurrentLoad 模型小部件存储 Oberon 系统的当前工作负载。工作负载是根据系统在 Oberon 循环中获取控制权的频率估计的。此模型小部件通常由 Scope 小部件可视化。
练习: 将光标设置在桌面上,然后单击
- Gadgets.Insert Scope CurrentLoad~
生成器: Gadgets.Link Gages.NewLap
别名: EventTimer
功能: EventTimer 模型小部件存储当前系统负载,该负载是根据系统在 Oberon 跟踪和事件循环中获取控制权的频率计算得出的。它是一个未缩放的数字。
练习: 将光标设置在桌面上,然后单击
- Gadgets.Insert TextField EventTimer~
生成器: Gadgets.Link BasicGadgets.NewInteger
别名: Integer
功能: Integer 是一个模型小部件,它存储一个 LONGINT 值。它可以通过文本字段、滑块或按钮进行可视化。当与一组按钮或复选框(或按钮和复选框的混合)链接时,按钮和复选框充当单选按钮。在这种情况下,按钮和复选框应被分配唯一的整数值以存储在其各自的 SetVal 属性中。这可以通过 BasicGadgets.SetValues 命令方便地完成。当其分配的整数值与整数小部件值对应时,按钮或复选框为“开启”。参见 整数。
生成器: Gadgets.Link Gages.NewMem
别名: MemoryUsed
功能: MemoryUsed 模型小部件包含有关当前使用 Oberon 堆的多少内容的最新指示。
练习: 将光标设置在桌面上,然后单击
- Gadgets.Insert TextField MemoryUsed ~
生成器: Gadgets.Link Pictures.NewPicture
别名: Picture
功能: Picture 是一个模型对象,包含一个彩色二维位图,由与它链接为模型的 RembrandtFrame 可视化。它根本没有属性,也不能附加任何其他属性。系统中包含一个名为 Rembrandt 的图片编辑器,用于编辑位图。
练习: 将光标设置在桌面上,然后单击
- Gadgets.Insert Rembrandt.New Picture ~
生成器: Gadgets.Link BasicGadgets.NewReal
别名: Real
功能: Real 是一个模型小部件,它存储一个 LONGREAL 值。它可以与滑块或文本字段小部件链接。参见 实数
生成器: Gadgets.Link RefGadgets.NewReference
别名: Reference
功能: 对任何对象的引用,该对象是 Objects.Object 的扩展。此模型小部件由 RefFrame 小部件可视化。
生成器: Gadgets.Link SetGadgets.NewSet
别名: Set
功能: Set 是一个模型小部件,它存储一个 32 位集合。它通常由 SetFrame 小部件可视化,但也可以链接到文本字段、滑块、按钮或其组合。
生成器: Gadgets.Link BasicGadgets.NewString
别名: String
功能: String 是一个模型小部件,它存储一个最多 64 个字符的字符串值。参见 字符串
生成器: Gadgets.Link Texts.New
别名: Text
功能: Text 是 Oberon 系统中用于操作文本的抽象数据类型。文本可以是(实际上)无限长度,并且包含字体、颜色和垂直偏移信息。小部件可以在文本流中浮动。文本不是真正的小部件,没有属性。
复制小部件可以通过两种不同的方式完成。复制视觉小部件和模型小部件被称为深层复制。 仅复制视觉小部件(然后可视化与原始小部件相同的模型小部件)被称为浅层复制。浅层复制可以直接用鼠标完成。例如,用中间键拖动一个小部件,然后右键单击会导致在鼠标位置插入小部件的浅层复制。深层复制必须使用以下命令显式完成:
- Gadgets.Copy
它获取选择,对其进行深层复制,并将副本插入光标位置。深层复制是结构保持的。 Gadgets.Panel 提供一个按钮来进行深层复制。
为了允许程序员添加与现有可视化小部件(滑块、按钮、文本字段等)一起工作的新的模型小部件,使用模型和可视化小部件之间的消息协议。 消息协议目前仅限于简单类型布尔值、整数、字符串和实数。 本质上,可视化小部件可以指示它对模型小部件的哪个属性(或字段或组件)感兴趣。 一些可视化小部件具有一个名为“Field”的字符串属性,其中包含这样的属性名称。 如果此属性为空,则假定默认属性“Value”。 因此,模型小部件可能是复合的,并且可以由许多不同的可视化小部件可视化,每个可视化小部件都显示与其链接的模型小部件的不同属性。 如果模型或视图发生变化,则将激活消息交换协议以确保模型和视图之间的一致性。
除了实例化小部件和操作属性的命令之外,小部件模块还导出以下命令
更改可视化小部件的类型 - Gadgets.Change
[edit | edit source]Gadgets.Change viewNewProcedure ~ 将选定的(当然,是可视化的)小部件更改为新的类型。 这些小部件的旧模型将被保留。
设置属性值 - Gadgets.Set
[edit | edit source]Gadgets.Set Obj.Attr value ~ 更改所指示小部件的属性。 此命令必须与目标的上下文在同一个上下文中执行。
设置属性 - Gadgets.ChangeAttr
[edit | edit source]Gadgets.ChangeAttr attrName attrValue ~ 设置选定小部件的属性值。
可以使用 Oberon 命令直接设置属性。 这些命令很少使用,但有时在另一个小部件控制下更改属性时很有用。
AttributeValue 可以采用多种形式,具体取决于属性的类型
名称 对于字符串属性 是/否 对于布尔属性 1234 对于数字属性 "字符串" 对于字符串属性
请注意,您可以向小部件添加任何您想要的属性。 小部件知道的属性将被强制转换为特定类型。 未知的属性将被存储,但会被忽略。
宏
[edit | edit source]宏用于处理小部件的属性。 它们充当不同小部件之间的粘合剂。 通常,小部件在激活时执行命令,命令的参数是从显示中检索的。 参数可能是选择,例如,或某个小部件属性的值。 宏首先完全展开,然后将生成的文本以正常 Oberon 方式传递给执行的程序。 这使得向现有 Oberon 应用程序添加用户界面成为可能。 系统以这样一种方式整理参数,使其可以以传统方式解析。
查找宏 &
[edit | edit source]当您想向命令传递参数(参数的值是某个小部件的属性值)时,查找宏非常有用。 宏的语法为&ObjName.AttrName,展开时它会在当前范围内搜索名为ObjName的对象,提取其AttrName属性值,并将此值插入到命令字符串中。 例如,当您单击按钮时,您希望打开一个文本文件(其名称写在文本字段中)。 首先,您必须使用 Columbus 为文本字段命名,例如TF。 然后,通过执行以下命令,可以设置按钮的Cmd属性
- Gadgets.ChangeAttr Cmd "Edit.Open &TF.Value"
请注意,按钮和文本字段必须在同一个命名空间中,即具有相同的容器。
激活器宏 #
[edit | edit source]激活器宏返回执行命令的小部件的属性值。 它以#AttrName的形式使用,其中AttrName标识属性的名称。 在List小部件中可以找到一个示例。 这里一个属性Point包含在列表中点击的项目。
发起者宏 !
[edit | edit source]当对象被其他对象使用时,被使用的对象被称为发起者或发送者,而使用对象的被称为接收者或接收者。 此宏经常出现在ConsumeCmd属性中,并允许访问发起者的属性值。 使用命令由接收者执行。 宏采用!AttrName的形式,并扩展到发起者组中每个对象的属性值列表。 它可用于在将文件图标拖放到编译器图标上时编译文件列表。 假设属性Filename指示文件名称(它必须是文件图标的属性),那么以下内容可用于设置编译器图标的ConsumeCmd属性
- Gadgets.ChangeAttr ConsumeCmd "Compiler.Compile !Filename ~"
选择宏 ^
[edit | edit source]与标准 Oberon 系统一样,此宏扩展到当前选择。 小部件系统使用略微扩展的选择语义。 在这里,以^AttrName形式的宏扩展为所有选定对象的属性值列表。 如果没有选择小部件,则假定文本选择。 例如,这允许创建对选定的小部件组起作用的命令。 与以前一样,该设备可用于优雅地构建将选择作为参数的编译按钮。 请注意,返回的选择始终包含至少一个完整的单词,即使只选择了单词的开头。
处理器宏 {, }, |
[edit | edit source]处理器宏始终具有以下形式:{ 前缀 | 后缀 | 列表}。 当它展开时,列表中的每个单词都会像指示的那样获得前缀和/或后缀。 前缀和后缀可以省略。 像 { | /s | ^ } 这样的处理器序列将扩展到当前选择,其中每个单词都有一个 /s 后缀。
字符串串联
[edit | edit source]大多数宏的行为一开始可能看起来很奇怪。宏用特殊的起始符号 !,&等标识,后面跟着一个参数。在扩展宏时,系统需要知道何时停止解析参数。默认情况下,这是在没有字符剩余要扫描(字符串结束)或遇到空格时。但是,当先遇到空格时,空格不会包含在扩展的宏中。如果你想在扩展的文本中包含空格,你必须在第一个空格后面显式插入另一个空格。此功能允许你连接宏。例如,如果 O1.Value 是 "Hello" 并且 O2.Value 是 "World",那么
- "&O1.Value &O2.Value" (一个空格分隔符)
将扩展为 "HelloWorld",而
- "&O1.Value &O2.Value" (中间有两个空格)
将扩展为 "Hello World"。
小部件最有趣和新颖的一点是,除了从创建开始到用户明确锁定它们之外,它们的大小和位置都可以改变。这与大多数其他系统形成对比,在那些系统中,用户收到锁定用户界面的,并且必须“接受或拒绝”。用户的大量时间可能花在组织现有用户界面或构建新界面上。这可以比作用户在经典的 Oberon 系统中调整其私有的文本工具。
本章解释了如何在运行时进行小部件的交互式组合。创建新界面或更改界面并不一定需要编程。
尝试这个简单的界面组合示例。逐步执行以下说明将引导你创建一个简单的编译器界面面板。
- 创建一个新的、空面板:Desktops.OpenDoc (PanelDocs.NewDoc).
- 打开 Gadgets.Panel:Desktops.OpenDoc Gadgets.Panel.
- 将插入符号放在新创建的面板中,然后通过单击 Gadgets.Panel 中“视图”列表中的“按钮”来插入一个按钮。
- 单击按钮几次,看看它如何工作。
- 通过单击 Gadgets.Panel 中的 [哥伦布] 按钮打开检查器。
- 使用鼠标右键选择新按钮。
- 点击检查器的[检查]按钮。
- 将“标题”文本字段更改为编译。
- 在“命令”文本字段中键入Compiler.Compile *。
- 选中“弹出”复选框。
- 点击[应用]按钮。请注意,按钮的标题已更改。
- 通过点击 Esc 键或再次使用右键选择按钮来取消选择按钮。
- 打开一个带有 Oberon 源文本(任何 *.Mod 文件)的文本查看器。
- 标记查看器.
- 点击[编译]按钮开始编译。
- 将插入符号放在名称面板中,通过键入“My.Panel”为面板命名。
- 通过单击菜单栏(面板)中的“存储”按钮来存储面板。你的工作现已保存,可以重复使用。
- 通过单击菜单栏中的[关闭]按钮关闭面板。
- 重新打开面板以使用它 Desktops.OpenDoc My.Panel.
为了帮助你组合新的用户界面或修改现有的用户界面,我们提供了 Gadgets.Panel。在幕后,它使用一组之前已经审查过的小部件模块命令。不要忘记,这些命令也可以在通常的 Oberon 方式中直接在文本中执行。
这两个列表包含标准的视觉和模型小部件集。顺带一提,“视图”比“视觉小部件”更简洁,“模型”比“模型小部件”更简洁。同样为了用户的方便,列表条目是真实 New 过程名称的别名。单击“视图”列表中的一个条目将在插入符号位置插入该类型的小部件。单击“模型”列表中的一个条目将该类型的模型小部件链接到所选的小部件或小部件。[恢复] 按钮会恢复最后一个删除的面板(注意:它只对面板小部件起作用)。[哥伦布] 按钮会打开一个新的哥伦布面板,[后退] 和 [前进] 按钮会更改所选小部件的显示优先级。显示优先级是指在面板中哪个小部件重叠其他小部件。默认情况下,新小部件始终插入到已位于容器中的小部件的前面,并保持其当前优先级,直到它被显式更改。一个例外是文档小部件;当这些小部件获得焦点时,它们会弹出到最前面。如果你想将一个小部件带到容器的最前面,可以使用 consume interclick 组合作为快捷方式。但是请注意,新的 consume 位置与之前的容器相同,否则小部件可能会意外地更改容器。
[深度复制] 按钮控制 Gadgets.Copy 命令的执行。
对齐菜单 面板允许你控制所选小部件的对齐方式。
对齐通常相对于某条假想线进行。例如,左对齐 意味着所有选定的小部件都应该在其左边缘对齐,参考线是最左边的选定小部件的左边缘。
记住所有 New 过程可能相当困难。Gadgets 包含一个别名功能,允许你为 New 过程使用更短的名称。注册表 (_OBERON.INI) 中的 [别名] 部分决定了这些别名。使用以下命令可以在系统日志中显示当前定义的完整别名列表:System.Get Aliases
每个别名在这个部分的文本行中只出现一次,格式如下
- AliasName = M.P
其中AliasName 标识了 M.P 过程的别名。现在可以使用以下更短的命令来创建模型-视图对,例如
- Gadgets.Insert Button Boolean ~
别名功能仅适用于 "Gadgets.Insert" 和 "Gadgets.Link" 命令。
要修改别名,请使用以下命令:System.Set Aliases AliasName := M.P ~
了解如何在 Oberon 程序中操作小部件,请参阅在 Oberon 中使用小部件。
如果你想开发自己的小部件,请在编程新的 Gadget中了解所有内容。
A
B
C
日历
标题
复选框
圆形
时钟
Cmd 属性
颜色属性
颜色选择器
复数
组合工具
连接
ConsumeCmd 属性
当前目录
当前负载
D
E
F
G
小部件组合
小部件实例
Gadgets.Change
Gadgets.ChangeAttr
Gadgets.Copy
Gadgets.Insert
Gadgets.Insert
Gadgets.Link
Gadgets.Set
Gen 属性
生成器
网格捕捉属性
GUI
I
L
M
N
O
P
R
S
范围
滚动视图
选择宏 ^
设置框架
集合
浅拷贝
西西弗斯
滑块
样条曲线
字符串
T
TextDoc
TextField
TextGadget
TextHyperlink
TextNote
TextStyle
文本
TimeStamp
U
V
修订,afi 1996 年 11 月 26 日
安装于 1997 年 05 月 30 日