Screen 类
Screen类包装用户的主显示器——其尺寸和缇到像素比率、已安装字体列表、当前活动的Form以及该窗体上当前拥有焦点的控件、以及应用程序范围的鼠标指针覆盖。它是单例:每个进程恰好有一个Screen实例,由运行时拥有,通过Global应用对象的Screen属性公开。代码无需限定即可访问:
' 在主显示器上居中窗体
Me.Left = (Screen.Width - Me.Width) \ 2
Me.Top = (Screen.Height - Me.Height) \ 2
' 在长时间任务期间在整个应用程序上显示沙漏光标
Screen.MousePointer = vbHourglass
LongRunningWork
Screen.MousePointer = vbDefault尺寸和DPI
Width和Height以缇报告主显示器的尺寸——窗体和控件默认使用的同一单位。转换因子也可获取:
- TwipsPerPixelX——主显示器每个水平像素的缇数。
- TwipsPerPixelY——每个垂直像素的缇数。
在96-DPI显示器上,两者均为15(每逻辑英寸1440缇÷每英寸96像素);在144-DPI显示器上为10。当与Win32 API互操作需要强制在像素和窗体侧坐标系统之间转换时使用。
INFO
twinBASIC的Screen仅描述主显示器。对于多显示器配置中的逐显示器信息,请回退到Win32 EnumDisplayMonitors / GetMonitorInfo API。
活动窗体和活动控件
ActiveForm返回应用程序中当前为前台窗体的Form实例;ActiveControl返回该窗体中当前拥有焦点的控件。如果应用程序中没有活动窗体,两者均返回Nothing。
最常见的模式是从全局处理器访问活动窗体——例如,MDIForm上对任何在前面的MDI子级进行操作的工具栏按钮:
Private Sub tbrEdit_ButtonClick(ByVal Button As MSComctlLib.Button)
Dim f As Form
Set f = Screen.ActiveForm
If f Is Nothing Then Exit Sub
Select Case Button.Key
Case "Cut": f.ActiveControl.SelText = ""
Case "Copy": Clipboard.SetText f.ActiveControl.SelText
...
End Select
End Sub字体
FontCount是操作系统为当前显示上下文报告的字体数量;Fonts(Index)返回Index处字体的名称——0到FontCount - 1。它们一起使应用程序无需通过Win32 EnumFontFamilies API即可构建字体选择器。
Dim i As Integer
For i = 0 To Screen.FontCount - 1
cboFonts.AddItem Screen.Fonts(i)
Next鼠标指针覆盖
MousePointer是应用程序范围的光标覆盖。将其设置为vbDefault以外的值会将所选光标强制应用于应用程序的每个窗口,忽略每个控件各自的MousePointer设置——典型用途是在同步操作运行期间显示沙漏。操作完成后将其设置回vbDefault。
MouseIcon提供当MousePointer为vbCustom时使用的自定义StdPicture。
属性
ActiveControl
ActiveForm上当前拥有输入焦点的控件,作为Control引用,如果没有活动窗体则为Nothing。只读。
ActiveForm
应用程序中当前为前台窗体的Form,如果没有活动窗体则为Nothing。只读。
FontCount
操作系统报告为当前显示上下文可用的字体数量。Integer,只读。
Fonts
给定从0开始的索引处的字体名称,按操作系统报告的顺序。String,只读。
语法:object.Fonts( Index )
- Index
- 必需 范围为
0到FontCount- 1的Integer。超出范围的索引返回空字符串。
Height
主显示器的高度,以缇为单位。Single,只读。
MouseIcon
当MousePointer为vbCustom时使用的自定义光标图片,类型为StdPicture。可读可写(Let),可通过引用赋值(Set)。
MousePointer
应用程序范围的鼠标指针覆盖,作为MousePointerConstants的成员。Integer,可读可写。
将MousePointer设置为vbDefault (0)以外的值会将所选光标强制应用于应用程序的每个窗口,忽略每个控件的覆盖。典型用途是在同步长时间操作期间显示vbHourglass;操作完成后设置回vbDefault。
TwipsPerPixelX
主显示器每个水平像素的缇数,类型为Single。有效值为1440 / dpi_x。通过无参数函数调用返回。
语法:object.TwipsPerPixelX( )
TwipsPerPixelY
主显示器每个垂直像素的缇数,类型为Single。有效值为1440 / dpi_y。通过无参数函数调用返回。
语法:object.TwipsPerPixelY( )
Width
主显示器的宽度,以缇为单位。Single,只读。