点击或拖拽改变大小

ToolBar 类

X#
创建一个工具栏。
继承层次
Object
  VObject
    Control
      ToolBar

命名空间:  VO
程序集:  VOGUIClasses (在 VOGUIClasses.dll 中) 版本:2.22 GA
语法
 CLASS ToolBar INHERIT Control
查看代码

ToolBar 类型公开以下成员。

构造函数
  名称说明
公共方法ToolBar
创建一个工具栏。
Top
属性
  名称说明
公共属性Background
用于绘制控件背景的画刷。例如,在单行编辑控件中,背景是编辑控件中文本后面的颜色。
(继承自 Control。)
公共属性BandCount
工具栏中的带的数量。
公共属性BandImageList
用于带的 Image List 对象。
公共属性Bitmap
用于在工具栏上显示按钮的 Bitmap 对象(包含一个或多个按钮图像的位图带)。如果未分配,将使用默认位图。
公共属性BorderStyle
此属性不再受支持。仅用于与现有 X#1.0 代码的兼容性。
公共属性BoundingBox
表示包围工具栏的最小区域的画布坐标中的边界框。
公共属性ButtonCount
表示当前工具栏上的按钮数量的数字值。
公共属性ButtonSize
表示工具栏上按钮的大小的 Dimension 对象。如果未分配,将使用默认的16 x 16按钮。
公共属性ButtonStyle
代表按钮显示方式的常量:
公共属性Caption
表示控件标题的字符串(即标识控件的静态文本)
(继承自 Control。)
公共属性ClientArea
表示其父窗口的区域的边界框(组或字符框),该区域在放置工具栏时仍然可用。
公共属性ContextMenu
表示控件的本地弹出菜单的菜单对象。
(继承自 Control。)
公共属性ControlID
表示控件唯一 ID 的 1 到 8000 之间的数字
(继承自 Control。)
公共属性FieldSpec
连接到控件的字段规范。
(继承自 Control。)
公共属性GapSize
此属性不再受支持。仅用于与现有 X#1.0 代码的兼容性。
公共属性HyperLabel
连接到控件的链接。
(继承自 Control。)
公共属性ImageCount
代表工具栏位图中的图像数量的数字值。如果已将自定义位图分配给工具栏,必须将此值分配为该位图中的图像数量。
公共属性Location
此属性不再受支持。仅用于与现有 X#1.0 代码的兼容性。
公共属性Modified
当标准编辑控件或可编辑组合框正在修改时,设置为逻辑值 TRUE 。
(继承自 Control。)
公共属性Name
表示控件名称的字符串。
(继承自 Control。)
公共属性NameSym
表示控件名称的符号。
(继承自 Control。)
公共属性Origin
表示控件在其所有者窗口上的位置的点,以画布坐标表示。
(继承自 Control。)
公共属性Owner
控件的所有者窗口。
(继承自 Control。)
公共属性OwnerAlignment
表示窗口在其所有者窗口内对齐方式的常量。
(继承自 Control。)
公共属性ReadOnly
控件是否为只读?
(继承自 Control。)
公共属性代码示例Rows
表示工具栏上的按钮行数的数字值。 请注意,Rows现在有一个可选参数,<symTB>,用于指示要查询的工具栏或子工具栏。如果未指定,将假定为#MAINTOOLBAR。
公共属性SeparatorSize
此属性不再受支持。仅用于与现有X#1.0代码的兼容性。
公共属性Server
当前连接到此控件的服务器对象。如果没有连接服务器,则值为 NIL。
(继承自 Control。)
公共属性Size
表示控件大小的尺寸。
(继承自 Control。)
公共属性Status
表示控件在验证尝试或其他操作后的状态的链接。
(继承自 Control。)
公共属性代码示例TextValue
表示控件中保存的值的字符串。
(继承自 Control。)
公共属性ToolTipText
表示当用户将鼠标指针移动到控件上时使用的工具提示文本的字符串值。
(继承自 Control。)
公共属性UseHLForToolTip
确定是否应将控件的链接描述文本用作工具提示文本的逻辑值。
(继承自 Control。)
公共属性代码示例Value
控件中保存的值,以控件保存的任何数据类型表示。
(继承自 Control。)
公共属性ValueChanged
表示控件的值是否已从先前的设置更改的逻辑值。
(继承自 Control。)
Top
方法
  名称说明
公共方法Activate
提供在控件具有焦点并激活窗口时调用的方法。

(继承自 Control。)
公共方法代码示例AddBand
使用此方法向工具栏添加一个带。
公共方法AddSubToolBarBand
将一个新的带作为子工具栏添加到工具栏。
公共方法AddTipText
添加一个字符串作为按钮的提示文本。
公共方法代码示例AppendItem
将一个新的工具栏按钮项添加到工具栏的末尾,该按钮项来自可用按钮的列表。
公共方法AsString
返回控件的内容(或其标识标签)。
(继承自 Control。)
公共方法ChangeTipText
更改按钮的当前提示文本。
公共方法ClickItem
使按钮看起来像已被点击,表示已被选中。
公共方法Configure
此方法不再受支持。仅用于与现有 X#1.0 代码的兼容性。
公共方法Deactivate
提供在控件具有焦点并且窗口被停用时调用的方法。
(继承自 Control。)
公共方法DEFAULT
调用控件的默认 Windows 过程并设置 EventReturnValue。
(继承自 Control。)
公共方法DeleteItem
从工具栏中删除一个按钮。
公共方法Destroy
提供一种取消实例化 ToolBar 对象的方法。
(重写 Destroy.)
公共方法DimItem
使一个按钮变暗。
公共方法Disable
禁用控件(直到后续调用 Control:Enable())。
(继承自 Control。)
公共方法DisableItem
禁用一个按钮。
公共方法DisableTheme
禁用控件的 WinXP 主题。
(继承自 Control。)
公共方法Dispatch
提供在控件具有焦点时系统内事件的原型调度程序;将各种事件路由到其相应的事件处理程序。
(继承自 Control。)
公共方法Enable
启用先前禁用的控件。
(继承自 Control。)
公共方法代码示例EnableBands
启用工具栏带支持。
公共方法EnableDrag
允许用户使用鼠标移动工具栏。
公共方法EnableItem
启用已禁用的按钮。
公共方法Expose
提供在控件具有焦点并且窗口的某部分需要重绘时调用的方法。
(继承自 Control。)
公共方法FocusChange
提供在控件具有焦点并且输入焦点从当前控件更改为另一个控件(或反之亦然)时调用的方法。
(继承自 Control。)
公共方法GetButtonDescription
检索工具栏按钮的描述。
公共方法GetExStyle
检索控件的扩展样式。
(继承自 Control。)
公共方法GetImageList
获取由传递的参数指定的 ImageList。
公共方法GetStyle
检索控件的样式。
(继承自 Control。)
公共方法GetTipText
返回按钮的当前提示文本。
公共方法Handle
返回控件的句柄。
(继承自 Control。)
公共方法HasBorder
检查控件是否设置了边框
(继承自 Control。)
公共方法HasStyle
检查控件是否设置了样式值
(继承自 Control。)
公共方法Hide
隐藏工具栏,使其不可见。
(重写 Hide.)
公共方法HideItem
隐藏一个按钮。
公共方法HorizontalScroll
提供在控件具有焦点并且水平滚动条滚动时调用的方法。

(继承自 Control。)
公共方法InsertItem
在可用按钮列表中的指定工具栏按钮项之前插入一个新的工具栏按钮项。
公共方法代码示例IsClicked
返回一个逻辑值,指示指定的按钮当前是否被点击或选中。
公共方法代码示例IsDimmed
确定按钮是否被禁用。
公共方法IsEnabled
报告此控件当前是否启用。
(继承自 Control。)
公共方法代码示例IsEnabled(__Usual, __Usual, __Usual)
返回一个逻辑值,指示指定的按钮当前是否被启用。
公共方法IsExStyle
检查控件是否设置了扩展样式值
(继承自 Control。)
公共方法IsHidden
确定按钮是否被隐藏。
公共方法IsPressed
确定按钮是否被按下。
公共方法IsReadOnly
报告此控件当前是否为只读。
(继承自 Control。)
公共方法IsStyle
检查控件是否设置了样式值
(继承自 Control。)
公共方法IsVisible
报告此控件是可见(完全或部分)还是隐藏。
(继承自 Control。)
公共方法KeyDown
提供在控件具有焦点并且按下键盘上的键时调用的方法。

(继承自 Control。)
公共方法KeyUp
提供在控件具有焦点并且释放键盘上的键时调用的方法。

(继承自 Control。)
公共方法LinkDF
将控件连接到数据服务中的数据字段。
(继承自 Control。)
公共方法MenuInit
提供在控件拥有的弹出菜单即将弹出时调用的方法。
(继承自 Control。)
公共方法MenuSelect
提供在控件拥有的菜单上的项目被高亮显示时调用的方法。
(继承自 Control。)
公共方法MouseButtonDoubleClick
提供在控件具有焦点、鼠标指针位于窗口上方并且双击鼠标按钮时调用的方法。

(继承自 Control。)
公共方法MouseButtonDown
提供在控件具有焦点、鼠标指针位于窗口上方并且单击鼠标按钮时调用的方法。
(继承自 Control。)
公共方法MouseButtonUp
提供在控件具有焦点、鼠标指针位于窗口上方并且释放鼠标按钮时调用的方法。
(继承自 Control。)
公共方法MouseDrag
提供在控件具有焦点并且在窗口中移动一个或多个按钮被单击的鼠标时调用的方法。
(继承自 Control。)
公共方法MouseMove
提供在控件具有焦点并且在控件中移动鼠标时调用的方法。
(继承自 Control。)
公共方法Move
提供在控件具有焦点并且控件被移动(由用户或应用程序)时调用的方法。
(继承自 Control。)
公共方法OverRide
这是一个不再使用或需要的兼容性方法。
(继承自 Control。)
公共方法PerformValidations
执行所有定义在此控件字段规范中的验证(例如,必填项、最大和最小位数、最大和最小值、验证规则)并返回测试结果。
(继承自 Control。)
公共方法PressItem
按下一个按钮。
公共方法RegisterTimer
注册一个计时器方法以供控件调用。
(继承自 Control。)
公共方法RemoveTipText
删除按钮的当前提示文本。
公共方法RePaint
发送 ExposeEvent 以重新绘制控件
(继承自 Control。)
公共方法Resize
提供在控件具有焦点并且控件大小发生变化时调用的方法。
(继承自 Control。)
公共方法RestoreUpdate
恢复控件的所有绘图更新(在调用 Control:SuspendUpdate() 之后)。
(继承自 Control。)
公共方法SetExStyle
设置控件的扩展样式。
(继承自 Control。)
公共方法SetFocus
将输入焦点传递给控件,从而将所有鼠标和键盘输入定向到控件。
(继承自 Control。)
公共方法SetImageList
设置工具栏使用的 ImageList。
公共方法SetParent
更改控件的父句柄。
(继承自 Control。)
公共方法SetStyle
设置控件的样式。
(继承自 Control。)
公共方法Show
显示工具栏,使其可见。
(重写 Show.)
公共方法ShowItem
显示一个按钮。
公共方法SuspendUpdate
暂时挂起控件的所有绘图更新;绘图在调用 Control:RestoreUpdate() 时恢复。
(继承自 Control。)
公共方法Timer
提供在通过 RegisterTimer() 方法注册计时器时调用的方法。
(继承自 Control。)
公共方法UnClickItem
使一个按钮看起来像是“点击出去”(返回到其正常状态),在“点击进去”(指示已选择)后。
公共方法UnDimItem
取消禁用一个按钮。
公共方法UnPressItem
取消按下一个按钮。
公共方法Update
此方法不再受支持。仅用于与现有X#1.0代码的兼容性。
公共方法ValidateControl
此方法验证控件是否已创建,如果未创建,则触发控件创建
(继承自 Control。)
公共方法VerticalScroll
提供在控件具有焦点并且垂直滚动条滚动时调用的方法。
(继承自 Control。)
Top
字段
  名称说明
公共字段Divider
公共字段EventReturnValue (继承自 Control。)
公共字段oCargo
Cargo slot.
(继承自 VObject。)
Top
备注
工具栏为用户提供了一种选择菜单命令的替代方式。
虽然工具栏看起来更像是一组控件,而不是菜单,但它是作为菜单而不是作为控件构建和操作的。 事实上,菜单、工具栏和按钮生成的事件并没有根本的不同:每个菜单命令、工具栏按钮或按钮都有一个符号名称; 每种类型的事件都调用一个命名方法; 每个都有一个在状态栏中显示的描述(“短帮助”)和一个在选择上下文帮助(Shift+F1)时显示的帮助上下文。
但是,由于工具栏是一个对象,能够生成许多事件,而且,由于它是作为整个窗口的一部分(而不是作为几个按钮), 它更像是一个菜单而不是一个常规控件。
此外,定义和使用工具栏的标准方式是作为其关联菜单的附属物;这是菜单编辑器生成的结构。
工具栏按钮可以以图标、图标加文本标题或仅文本的形式呈现。
按钮周围的边框提供了几种不同的外观,按钮之间的间隙可以调整。如果工具栏太小,无法显示所有的按钮,可能是因为其所有者窗口太小, 它会自动显示滚动按钮。
工具栏的放置在一定程度上取决于其内容。
例如,只有文本的按钮是长而薄的,因此最好沿垂直边缘堆叠,而不是沿顶部或底部边缘。 只有图标的按钮,没有间隙,沿顶部边缘看起来非常自然。图标和文本按钮,带有一个小间隙,沿底部边缘是有效的。
ToolBar 类还提供了 CoolBar/Band 支持,即带有分隔符带的工具栏(这个例子来自 Internet Explorer 的扁平样式工具栏带)。` 分配工具栏给窗口的方式与分配菜单给窗口的方式相同,通过对 AppWindow:ToolBar() 的赋值。 每个工具栏按钮都与一个菜单命令关联,并生成相应的菜单事件;因此,分配给窗口的菜单和工具栏必须协调。
管理工具栏的最方便的方式是在创建菜单时将其与菜单关联。然后,当菜单分配给窗口时,它的工具栏也会自动分配。 这种自动的方法,与菜单编辑器创建的类定义相匹配,确保工具栏按钮的点击与预期的菜单命令事件相关联。
X#
1METHOD Init(oWOwner) CLASS MyWindow
2    ...
3    SELF:Menu := MyMenu{}
4    ...
5    METHOD Init() CLASS MyMenu
6    ...
7    SELF:ToolBar := ToolBar{}
(这也是加速键表的使用方法。因此,“菜单”实际上是菜单、加速键表和工具栏的组合,所有这些都是协调的,都一起使用。)
可以在任何窗口上放置工具栏,甚至是不能拥有菜单的窗口(例如对话框窗口和嵌套子窗口)。 在这些情况下,分配菜单不会产生可见的菜单,但工具栏仍然是活动的。 还可以将工具栏按钮与未包含在任何菜单中的菜单命令关联,只要菜单命令在 Menu:RegisterItem() 中注册。
工具栏占据窗口的客户区。一些窗口类型会自动适应这种空间冲突,但其他需要显式管理空间。
在业务应用程序中,工具栏最常见的用法是将其附加到shell窗口或数据窗口。 这两种窗口类型都会自动适应工具栏,因此不需要进一步的操作。 数据窗口最有可能是作为 shell 的子窗口使用,或者作为嵌套子窗口;在任何一种情况下,数据窗口都会适应工具栏。
将工具栏放在子窗口上特别有用:它可以将操作与它们应用的数据进行视觉关联。 许多数据窗口可能会使用工具栏按钮,比如插入记录、删除记录、跳过下一个、跳过上一个、转到顶部、转到底部、查找、撤销、剪切、复制和粘贴。
对于一般的顶层窗口、子窗口和对话框窗口,空间管理是开发人员的责任。 对于窗口上的工具栏,这有点棘手,特别是如果允许用户拖动工具栏:可用空间取决于窗口的调整大小和工具栏的放置。 工具栏具有 ToolBar:ClientArea 访问,可以在暴露事件中调用,以确定剩余区域的形状。
似乎工具栏附加到窗口的控制事件的操作是非常明显的:点击打印按钮会向窗口发送一个 #Print 消息。 但是,如果工具栏没有附加到子窗口,而是附加到shell窗口呢?或者如果它附加到子窗口, 但是处理消息的方法属于 shell 窗口?或者工具栏附加到作为嵌套子窗体使用的数据窗口呢?
工具栏在其操作上与菜单是相同的。无论哪个窗口拥有工具栏或菜单,命令事件都首先发送到具有焦点的窗口; 如果它不处理,就会发送到它的所有者,以及它的所有者,直到它被处理。如果没有窗口响应消息,shell 窗口会在其状态栏中显示一条消息。
更准确地说,给定工具栏或菜单命令的符号名称,响应链如下: 焦点窗口是否有一个方法,方法名正确?如果是,就调用它。
提示 提示:
这不一定是拥有工具栏或菜单的窗口。
检查它的所有者是否有匹配的方法,以及所有者的所有者,依此类推。
如果没有窗口有匹配的方法,消息就会发送到具有焦点的窗口的 MenuCommand() 方法。
默认实现的逻辑如下:如果它是窗口的所有者(如子窗口或子窗体),就将方法传递给它的所有者; 如果它是应用程序的所有者(如顶层或 shell 窗口),就检查是否有一个窗口类与该名称匹配,如果有,就实例化它;如果没有,就显示消息。 当然,MenuCommand() 方法可以用不同的逻辑替换(例如,低级 Windows 编程中经常使用的传统 CASE 语句)。
因此,有两种升级链:首先,系统沿着所有权链找到匹配的方法名;然后,它沿着 MenuCommand() 方法的升级链进行升级。 如果没有窗口对方法做出响应,作为最后的手段,就会尝试窗口实例化;否则,它会失败。 这意味着工具栏可以放在 shell 窗口、子窗口,甚至嵌套子窗口上:在任何情况下,它都是活动的,消息会发送到所有窗口, 并沿着所有权链进行传播。 请记住,任何时候只有一个菜单是可见的,具有菜单的子窗口会替换其 shell 的菜单;但工具栏不同,它们可以在任何类型的窗口上都可见。
窗口实例化的技巧意味着,如果我们在窗口编辑器中设计一个窗口,只需将其名称给予某个可见窗口的菜单或工具栏项,就可以打开它。 请注意,存在混淆用户的潜在风险,因为命令可能会引用不同的窗口 (这个问题不仅限于工具栏,也适用于菜单)。
考虑一个订单窗口,其中包含有关订单的信息,以及一个嵌套的子窗口(在浏览视图中),其中包含订单的行项目。 如果菜单包含一个删除命令,这个命令是指什么?它是删除订单,删除订单及其所有行项目,还是只删除一个行项目?
从技术上讲,问题是清楚的:命令首先发送到具有焦点的最低级别窗口,因此如果用户位于行项目子窗口上,该窗口首先收到命令。 如果它不对其做出响应,订单窗口和后来是 shell 窗口就会收到命令。 但是,从用户的角度来看,这种行为并不明显。问题出在菜单命令或工具栏按钮的标题上:“删除”并不是很清晰。 由于用户可能不知道行项目表是一个子窗口(它看起来只是一个窗口上的表),因此在不同的位置(取决于光标的位置)获取不同的删除效果可能会令人困惑。 因此,建议菜单命令和工具栏按钮的标签明确和清晰,例如“删除订单”和“删除项目”。 即使更高级别的逻辑根据光标位置和数据禁用命令(例如,只要还有未发货的行项目,删除订单可能会变灰),标签也应该清晰。
示例
有关适当代码的示例,请使用菜单编辑器生成一个简单的菜单,其中包含工具栏,然后使用窗口编辑器将此菜单分配给一个窗口。
参见