Skip to content

Global 类

Global是应用程序的应用对象——一个由运行时在启动时实例化的单例,其成员可以从项目中的任何代码无需限定地访问。编写App.Path实际上是调用Global.App.Path;前导的Global.是隐式的。该类的存在使得语言的内置全局对象——单例AppClipboardScreenForms集合、PrinterPrinters对象、资源加载器,以及Load/Unload窗体生命周期辅助函数——可以通过同一名称解析路径统一访问。

每个进程恰好有一个Global,且不能从用户代码创建:没有New Global,也没有可实例化的公共coclass。运行时通过IDE的特殊[AppObject]机制发布它,编译器将未限定的引用映射到其成员。

vb
' All four of these resolve to a method/property on Global:
Dim p As StdPicture
Set p = LoadPicture(App.Path & "\splash.png")

Form2.Show
Load Form3                              ' creates the form without showing it
Unload Form1

内置单例

AppClipboardScreen返回对应的运行时单例。每个都在各自的页面中有文档:

  • App — 应用程序元数据、版本信息和进程状态。
  • Clipboard — 系统剪贴板访问。
  • Screen — 主显示器指标、活动窗体/控件、应用程序范围的鼠标指针。

这些属性是缓存的引用——在进程生命周期内重复读取会返回相同的对象实例。

Forms 集合

Forms返回应用程序当前已加载的Form实例集合——每个已被Load加载或Show显示但尚未Unload卸载的窗体。集合是实时的:加载窗体时集合增长,卸载窗体时集合缩小。集合支持三种操作:

  • Forms.Count — 一个Long,给出当前已加载窗体的数量。
  • Forms.Item( Index ) — 零基Index处的FormItem是默认成员,因此Forms(0)Forms.Item(0)是等价的。读取负数或超出范围的索引会引发运行时错误9(下标越界)。
  • Forms.Add( Name ) — 创建名为Name的窗体类的新实例,将其添加到集合中,并返回新的Form。窗体已加载但未显示。

该集合还支持For Each枚举:

vb
Dim f As Form
For Each f In Forms
    Debug.Print f.Name, f.Caption
Next

一个常见的惯用法是在关闭时卸载所有打开的窗体——注意卸载会使集合缩小,因此应反向迭代或从顶部向下按索引迭代:

vb
Dim i As Long
For i = Forms.Count - 1 To 0 Step -1
    Unload Forms(i)
Next

资源加载器

twinBASIC将项目级资源(位图、字符串、原始字节块)编译到最终EXE的资源节中。四个LoadRes*方法在运行时检索它们:

LoadPicture文件而非嵌入资源加载图片——通常在运行时用于用户选择的内容或保存在EXE外部的资源。

窗体生命周期辅助函数

Load创建窗体(或对于控件数组,创建控件实例)但不显示;Unload销毁它。两者按约定不使用括号编写——Load Form1Unload Form1——其行为如同语句,但实际上是对Global.LoadGlobal.Unload的调用。相应的窗体生命周期事件(InitializeLoadUnloadTerminate)在预期的时机触发。

Printer 和 Printers

编译时FEATURE_PRINTER标志公开PrinterPrinters成员。Printer是当前选定的打印机,Printers是所有已安装打印机的集合;将不同的打印机对象赋值给Printer会切换应用程序的当前打印机。

属性

App

应用程序的单例App实例——其标识、版本和进程状态元数据。只读。

Clipboard

应用程序的单例Clipboard实例——系统剪贴板封装器。只读。

Forms

应用程序当前已加载Form实例的实时集合。只读。参见Forms 集合

Printer

当前选定的Printer。可读取和用Set赋值——赋值不同的打印机对象会切换应用程序的当前打印机。

Printers

系统上所有已安装打印机的Printers集合。只读。

Screen

应用程序的单例Screen实例——主显示器指标、活动窗体/控件、应用程序范围的鼠标指针。只读。

方法

Load

创建命名窗体的实例(或控件数组的新元素)但不显示。窗体的InitializeLoad事件将触发。

语法:Load object

object
必需 窗体类的默认实例(Form1)、显式窗体引用或控件数组元素(Command1(3))。
vb
Load Form2                        ' instantiates and runs Form_Load, but Form2 stays hidden
Set frm = Forms("Form2")          ' the new instance now exists in Forms

LoadPicture

从文件加载图片。返回stdole.IPictureDisp

语法:LoadPicture( [ FileName [, Size [, ColorDepth [, X [, Y ] ] ] ] ] )

FileName
可选 给出.bmp.dib.gif.jpg.png.wmf.emf.ico.cur文件路径的String。省略时返回空图片——适用于清除ImagePictureBoxPicture属性。
Size
可选 LoadPictureSizeConstants的成员——仅对图标和光标有意义,用于选择文件中存储的尺寸。
ColorDepth
可选 LoadPictureColorConstants的成员——仅对图标和光标有意义,用于选择文件中存储的颜色深度。
XY
可选SizevbLPCustom时使用的宽度和高度覆盖值,以像素为单位。
vb
Set imgLogo.Picture = LoadPicture(App.Path & "\logo.png")
Set imgLogo.Picture = LoadPicture()        ' clears the picture

LoadResData

从应用程序的资源节加载原始资源——通常是二进制块——返回包装在Variant中的**Byte()**数组。

语法:LoadResData( id, Type )

id
必需 资源ID,可以是Long(数字ID)或String(名称)。
Type
必需 资源类型,标识要查找的资源节。可以是Long标准资源类型或String自定义资源类型。

LoadResIdList

返回给定类型的资源节中的资源ID列表,作为Variant数组。

语法:LoadResIdList( Type )

Type
必需 资源类型——参见LoadResData

LoadResPicture

从应用程序的资源节将图片、图标或光标资源加载到stdole.IPictureDisp中。

语法:LoadResPicture( id, restype [, width [, height ] ] )

id
必需 资源ID——Long(数字)或String(名称)。
restype
必需 LoadResConstants的成员——vbResBitmapvbResIconvbResCursor
widthheight
可选 图标/光标资源的像素尺寸;0(默认)选择资源的自然尺寸。

LoadResString

从应用程序的资源节加载字符串资源。返回String

语法:LoadResString( id )

id
必需 资源ID,为Long

Unload

销毁窗体(或移除控件数组元素)。窗体的QueryUnloadUnloadTerminate事件按顺序触发。前两个事件中的任意一个可以将其Cancel参数设为非零值来否决卸载,此时窗体保持加载和可见状态。

语法:Unload object

object
必需 窗体类的默认实例、显式窗体引用或控件数组元素。
vb
Unload Me                         ' close the current form
Unload Forms(0)                   ' close whichever form is at the head of the list

twinBASIC及其LOGO版权为作者"韦恩"所有