跳转到内容

BlitzMax/模块/MaxGUI/代理小部件

来自 Wikibooks,开放世界中的开放书籍

此模块包含任何官方代理小部件,它们围绕标准 MaxGUI 小部件,并提供一个额外的库,可以在各种程序中使用。此库中的任何小部件都可以与核心 MaxGUI.MaxGUI 模块中提供的标准 MaxGUI 函数一起使用。

[编辑 | 编辑源代码]

函数 CreateHyperlink:TGadget( url$,x,y,w,h,group:TGadget,style=0,customtext$ = "" )

描述:创建基本超链接小部件,当单击时在默认浏览器中打开指定的 url$。

信息:底层小部件是标签,因此 style 参数可以接受除 LABEL_SEPARATOR 之外的所有 CreateLabel 标志。

可以使用 SetGadgetTextColorSetGadgetColor 分别设置正常和悬停文本颜色。

可选的 customtext$ 参数允许您设置用户友好的文本,以在标签中屏蔽 URL。如果在 CreateHyperlink 中指定了此参数,则标签的工具提示会自动设置为链接指向的 URL。可以通过调用 SetGadgetText 随时更改此屏蔽文本。最后,可以使用 SetGadgetExtra 和 String( GadgetExtra ) 分别修改/检索超链接小部件打开的 url$(参见代码示例)。

示例:

Strict

Import MaxGUI.Drivers
Import MaxGUI.ProxyGadgets

AppTitle = "Hyperlink Test Window"

Global wndMain:TGadget = CreateWindow( AppTitle, 100, 100, 300, 59, Null, WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS|WINDOW_STATUS )
	
	'Standard Hyperlink Gadget
	Global hypLeft:TGadget = CreateHyperlink( "http://www.google.com/", 2, 2, ClientWidth(wndMain)-4, 15, wndMain, LABEL_LEFT )
	
	'Center Aligned Hyperlink Gadget with alternate text
	Global hypCenter:TGadget = CreateHyperlink( "http://www.blitzbasic.com/", 2, 21, ClientWidth(wndMain)-4, 17, wndMain, LABEL_CENTER|LABEL_FRAME, "BlitzBasic" )
	
	'Right Aligned Sunken Hyperlink Gadget with custom rollover colors set
	Global hypRight:TGadget = CreateHyperlink( "http://www.blitzmax.com/", 2, 42, ClientWidth(wndMain)-4, 15, wndMain, LABEL_RIGHT, "Custom Rollover Colors" )
		SetGadgetTextColor(hypRight,128,128,128)	'Set normal text color to grey.
		SetGadgetColor(hypRight,255,128,0)			'Set rollover color to orange.

'Example of how to retrieve a hyperlink gadget's URL
Print "Hyperlink 1 URL: " + String(GadgetExtra(hypLeft))
Print "Hyperlink 2 URL: " + String(GadgetExtra(hypCenter))
Print "Hyperlink 3 URL: " + String(GadgetExtra(hypRight))

'Example of how to set a hyperlink gadget's URL
SetGadgetExtra( hypRight, "http://www.blitzbasic.co.nz" )
'We need to update the tooltip to the new URL
SetGadgetToolTip( hypRight, String(GadgetExtra(hypRight)) )

Repeat
	
	WaitEvent()
	
	SetStatusText wndMain, CurrentEvent.ToString()
	
	Select EventID()
		Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE;End
	EndSelect
	
Forever

CreateSplitter

[编辑 | 编辑源代码]

函数 CreateSplitter:TSplitter( pX%, pY%, pW%, pH%, pParent:TGadget, pOrientation% = SPLIT_VERTICAL )

描述:创建由可拖动分隔线分隔的两个面板组成的小部件。

信息:分隔线由两个面板组成:一个主面板(使用 SPLITPANEL_MAIN 标识),它充当主要工作区;以及一个侧面板(使用 SPLITPANEL_SIDEPANE 标识),它通常用于显示附加信息。这两个面板都包含在由 TSplitter 实例表示的父面板中。这两个面板由一个拆分句柄/分隔线分隔,可以使用 SplitterBehaviorSetSplitterBehavior 函数分别查询和更改拆分句柄/分隔线的行为。

创建分隔线小部件后,可以使用 SplitterPanel 命令检索适当的面板,然后开始向其中添加小部件。

TSplitter 类型实例可以与大多数标准 MaxGUI 命令一起使用,使您可以更改整个分隔线小部件的属性。但是,有一些例外。

SetGadgetSensitivityGadgetSensitivity 对分隔线小部件没有影响。如果要使用活动面板,请在每个分隔线面板内创建自己的子面板。

SetGadgetTooltipGadgetTooltip 将为用户悬停在分隔线句柄/分隔线上的情况设置/检索工具提示。

SetGadgetTextColor 将更改分隔线句柄/分隔线的外观,并使其呈现原始的 3D 外观。

另请参见:SplitterPanelSetSplitterPositionSplitterPositionSetSplitterBehaviorSplitterBehaviorSetSplitterOrientationSplitterOrientation

示例:

Strict

Import MaxGUI.Drivers
Import MaxGUI.ProxyGadgets

Global wndMain:TGadget = CreateWindow("Splitter Example",100,100,400,300,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_CENTER|WINDOW_CLIENTCOORDS|WINDOW_STATUS)
	
	'Create a splitter gadget
	Global spltMain:TSplitter = CreateSplitter( 0, 0, ClientWidth(wndMain), ClientHeight(wndMain), wndMain )
	SetGadgetLayout spltMain,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED
	
	Local tmpSplitPanel:TGadget
		
		'Add a gadget to our left pane
		tmpSplitPanel = SplitterPanel(spltMain,SPLITPANEL_MAIN)
		Global txtEditor:TGadget = CreateTextArea(0,0,ClientWidth(tmpSplitPanel),ClientHeight(tmpSplitPanel),tmpSplitPanel,TEXTAREA_WORDWRAP)
		SetGadgetLayout(txtEditor,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED)
		
			AddTextAreaText(txtEditor, "The quick brown fox jumped over the lazy dogs.~n~n")
			AddTextAreaText(txtEditor, "The quick brown fox jumped over the lazy dogs.~n~n")
			AddTextAreaText(txtEditor, "The quick brown fox jumped over the lazy dogs.~n~n")
		
		'Add a gadget to our right pane
		tmpSplitPanel = SplitterPanel(spltMain,SPLITPANEL_SIDEPANE)
		Global treeView:TGadget = CreateTreeView(0,0,ClientWidth(tmpSplitPanel),ClientHeight(tmpSplitPanel),tmpSplitPanel)
		SetGadgetLayout(treeView,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED)
		
			AddTreeViewNode("Child", AddTreeViewNode("Parent Node", TreeViewRoot(treeView)))
			AddTreeViewNode("Other", TreeViewRoot(treeView))
	
Repeat
	WaitEvent()
	SetStatusText wndMain, CurrentEvent.ToString()
	Select EventID()
		Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE;End
	EndSelect
Forever

SplitterPanel

[编辑 | 编辑源代码]

函数 SplitterPanel:TGadget( splitter:TSplitter, panel% = SPLITPANEL_MAIN )

描述:检索组成 TSplitter 小部件的两个面板中的一个。

信息:此函数用于返回标准 MaxGUI 面板,您可以向其中添加小部件。

可用的面板是 SPLITPANEL_MAIN 和 SPLITPANEL_SIDEPANE。有关两个面板之间差异的更多信息,请参见 CreateSplitter

另请参见:CreateSplitterSetSplitterPositionSplitterPositionSetSplitterBehaviorSplitterBehaviorSetSplitterOrientationSplitterOrientation

SetSplitterPosition

[编辑 | 编辑源代码]

函数 SetSplitterPosition( splitter:TSplitter, position%, save% = True )

描述:设置分隔线距 TSplitter 小部件边缘的距离(以像素为单位)。

信息:此函数最常见的用途可能是恢复以前由 SplitterPosition 返回的分割位置。

可选的 save% 参数决定是否在分隔线从隐藏状态返回时恢复提供的 position。在大多数情况下,这应该保留为 True

另请参见:CreateSplitterSplitterPanelSplitterPositionSetSplitterBehaviorSplitterBehaviorSetSplitterOrientationSplitterOrientation

SplitterPosition

[编辑 | 编辑源代码]

函数 SplitterPosition:Int( splitter:TSplitter )

描述:返回分隔线距 TSplitter 小部件边缘的距离(以像素为单位)。

信息:此函数最常见的用途可能是保存当前分隔线位置,以便稍后使用 SetSplitterPosition 恢复。

另请参见:CreateSplitterSplitterPanelSetSplitterPositionSetSplitterBehaviorSplitterBehaviorSetSplitterOrientationSplitterOrientation

SetSplitterOrientation

[编辑 | 编辑源代码]

Function SetSplitterOrientation( splitter:TSplitter, orientation% = -1 )

描述:设置分割器的方向。

信息:可用的两种方向是(两者都可以与 SPLIT_FLIPPED 结合)

方向 描述
-1 切换 SPLIT_FLIPPED 标志。
SPLIT_VERTICAL 分割器由一个主左侧面板和一个沿右侧边缘的侧面板组成。
SPLIT_HORIZONTAL 分割器由一个主顶部面板和一个沿底部边缘的侧面板组成。
SPLIT_FLIPPED 分割器由一个主右侧面板和一个沿左侧边缘的侧面板组成。
SPLIT_FLIPPED 分割器由一个主底部和一个沿顶部边缘的侧面板组成。

另请参阅:CreateSplitterSplitterPanelSetSplitterPositionSplitterPositionSetSplitterBehaviorSplitterOrientation

SplitterOrientation

[编辑 | 编辑源代码]

Function SplitterOrientation:Int( splitter:TSplitter )

描述:返回分割器的方向。

信息:可用的两种方向是(两者都可以与 SPLIT_FLIPPED 结合)

方向 描述
SPLIT_VERTICAL 分割器由一个主左侧面板和一个沿右侧边缘的侧面板组成。
SPLIT_HORIZONTAL 分割器由一个主顶部面板和一个沿底部边缘的侧面板组成。
SPLIT_FLIPPED 分割器由一个主右侧面板和一个沿左侧边缘的侧面板组成。
SPLIT_FLIPPED 分割器由一个主底部和一个沿顶部边缘的侧面板组成。

另请参阅:CreateSplitterSplitterPanelSetSplitterPositionSplitterPositionSetSplitterBehaviorSetSplitterOrientation

SetSplitterBehavior

[编辑 | 编辑源代码]

Function SetSplitterBehavior( splitter:TSplitter, flags%=SPLIT_ALL )

描述:设置分割器的行为。

信息:以下任何组合都可用

行为标志 描述
0 分割器不执行下面列出的任何操作。
SPLIT_RESIZABLE 可以通过拖动调整分割器大小。
SPLIT_LIMITPANESIZE 分割器侧面板不允许占据超过分割尺寸一半的空间。
SPLIT_CANFLIP 通过拖动到边缘,分割器可以在相反的边缘之间切换。
SPLIT_CANORIENTATE 通过拖动到右侧/底部边缘,分割器可以在垂直和水平模式之间切换。
SPLIT_CLICKTOTOGGLE 单击拖动条将隐藏/显示分割器。
SPLIT_ALL 表示所有以上内容的简写标志。

分割器的默认行为是 SPLIT_ALL&~SPLIT_LIMITPANESIZE(即除了 SPLIT_LIMITPANESIZE 之外的所有内容)。

另请参阅:CreateSplitterSplitterPanelSplitterPositionSplitterBehaviorSetSplitterOrientationSplitterOrientation

SplitterBehavior

[编辑 | 编辑源代码]

Function SplitterBehavior:Int( splitter:TSplitter )

描述:返回之前使用 SetSplitterBehavior 设置的值。

返回:一个整数,由描述分割器行为的位标志组合而成。

信息:有关详细信息,请参阅 SetSplitterBehavior

CreateScrollPanel

[编辑 | 编辑源代码]

Function CreateScrollPanel:TScrollPanel( x,y,w,h,group:TGadget,flags=0 )

描述:创建一个可滚动面板。

信息:可滚动面板可用于在较小的区域内显示大量小部件。将显示滚动条以允许用户在通过通常较小的视口查看的客户端区域内移动。ScrollPanelXScrollPanelY 函数可用于检索当前滚动位置,而 ScrollScrollPanel 命令可用于设置滚动位置。当用户在滚动区域内滚动时,TScrollPanel 小部件会发出以下事件

事件 EventX EventY
EVENT_GADGETACTION ScrollPanelX 的新值。 ScrollPanelY 的新值。

支持以下任何样式标志的组合

常量 含义
SCROLLPANEL_SUNKEN 可滚动面板将以凹陷边框绘制。
SCROLLPANEL_HALWAYS 水平滚动条将始终显示(即使不需要)。
SCROLLPANEL_VALWAYS 垂直滚动条将始终显示(即使不需要)。
SCROLLPANEL_HNEVER 水平滚动条永远不会显示(即使客户端区域宽度大于视口宽度)。
SCROLLPANEL_VNEVER 垂直滚动条永远不会显示(即使客户端区域高度大于视口高度)。

以上内容还可以与以下任何行为标志组合,这些标志决定可滚动客户端区域如何随视口大小而调整大小

常量 含义
SCROLLPANEL_HSCALING 客户端区域的宽度会随着视口大小而均匀增长。
SCROLLPANEL_VSCALING 客户端区域的高度会随着视口大小而均匀增长。
  • TScrollPanel 实例本身表示可滚动面板的视口,可以使用
标准 MaxGUI 命令对其进行操作(例如调整大小/显示/隐藏)。
  • 客户端区域是将实际滚动的面板,可以使用 ScrollPanelClient 命令检索。这是
其尺寸决定总滚动区域的面板,也是所有子小部件应添加到其中的面板。


上面给出的尺寸都可以通过编程方式检索

GadgetWidth( myScrollPanel )                           'Gadget Width
GadgetHeight( myScrollPanel )                          'Gadget Height

ClientWidth( myScrollPanel )                           'Viewport Width
ClientHeight( myScrollPanel )                          'Viewport Height

ClientWidth( ScrollPanelClient( myScrollPanel ) )      'Client Area Width
ClientHeight( ScrollPanelClient( myScrollPanel ) )     'Client Area Height

并且可以使用以下命令以编程方式设置小部件和客户端尺寸(视口大小会自动处理)

'Set Gadget dimensions (and position).
SetGadgetShape( myScrollPanel, x, y, w, h )

'Set Client Area dimensions (position parameters are ignored).
SetGadgetShape( ScrollPanelClient( myScrollPanel ), 0, 0, w, h )

另请参阅:ScrollPanelClientFitScrollPanelClientScrollScrollPanelScrollPanelXScrollPanelYFitScrollPanelClient

示例:

Strict

Import MaxGUI.Drivers
Import MaxGUI.ProxyGadgets

AppTitle = "Scroll Panel Example"
SeedRnd MilliSecs()

Global wndMain:TGadget = CreateWindow(AppTitle,100,100,400,300,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_CENTER|WINDOW_CLIENTCOORDS|WINDOW_STATUS)
	
	' Create a scroll-panel
	Global scrlMain:TScrollPanel = CreateScrollPanel( 0, 0, ClientWidth(wndMain), ClientHeight(wndMain)-30, wndMain, SCROLLPANEL_SUNKEN )
	SetGadgetLayout scrlMain,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED
	
	' Retrieve the panel that is scrolled
	Local tmpClient:TGadget = ScrollPanelClient(scrlMain)
	
	' Draw some buttons on the scroll-panel
	Local tmpButton:TGadget
	
	For Local i:Int = 1 To 50
		tmpButton = CreateButton( "Button " + i, 0, (i-1)*35, ClientWidth(scrlMain)-20, 30, tmpClient, BUTTON_PUSH )
		SetGadgetTextColor tmpButton,Rand(0,255),Rand(0,255),Rand(0,255)
		SetGadgetLayout tmpButton,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_CENTERED
	Next
	
	' Resize the scrollable region tight around the buttons
	FitScrollPanelClient( scrlMain, SCROLLPANEL_SIZETOKIDS )
	
	' Add some buttons for testing the ScrollScrollPanel function.
	Global btnTopLeft:TGadget = CreateButton( "Top Left", 0, ClientHeight(wndMain)-30, ClientWidth(wndMain)/4, 30, wndMain, BUTTON_PUSH )
	SetGadgetLayout( btnTopLeft, EDGE_ALIGNED, EDGE_RELATIVE, EDGE_CENTERED, EDGE_ALIGNED )
	SetGadgetToolTip( btnTopLeft, "ScrollScrollPanel( scrlMain, SCROLLPANEL_LEFT, SCROLLPANEL_TOP )" )
	
	Global btnTopRight:TGadget = CreateButton( "Top Right", ClientWidth(wndMain)/4, ClientHeight(wndMain)-30, ClientWidth(wndMain)/4, 30, wndMain, BUTTON_PUSH )
	SetGadgetLayout( btnTopRight, EDGE_RELATIVE, EDGE_RELATIVE, EDGE_CENTERED, EDGE_ALIGNED )
	SetGadgetToolTip( btnTopRight, "ScrollScrollPanel( scrlMain, SCROLLPANEL_RIGHT, SCROLLPANEL_TOP )" )
	
	Global btnBottomLeft:TGadget = CreateButton( "Bottom Left", 2*ClientWidth(wndMain)/4, ClientHeight(wndMain)-30, ClientWidth(wndMain)/4, 30, wndMain, BUTTON_PUSH )
	SetGadgetLayout( btnBottomLeft, EDGE_RELATIVE, EDGE_RELATIVE, EDGE_CENTERED, EDGE_ALIGNED )
	SetGadgetToolTip( btnBottomLeft, "ScrollScrollPanel( scrlMain, SCROLLPANEL_LEFT, SCROLLPANEL_BOTTOM )" )
	
	Global btnBottomRight:TGadget = CreateButton( "Bottom Right", 3*ClientWidth(wndMain)/4, ClientHeight(wndMain)-30, ClientWidth(wndMain)/4, 30, wndMain, BUTTON_PUSH )
	SetGadgetLayout( btnBottomRight, EDGE_RELATIVE, EDGE_ALIGNED, EDGE_CENTERED, EDGE_ALIGNED )
	SetGadgetToolTip( btnBottomRight, "ScrollScrollPanel( scrlMain, SCROLLPANEL_RIGHT, SCROLLPANEL_BOTTOM )" )
	
Repeat
	Select WaitEvent()
		Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE;End
		Case EVENT_GADGETACTION
			Select EventSource()
				Case btnTopLeft
					ScrollScrollPanel( scrlMain, SCROLLPANEL_LEFT, SCROLLPANEL_TOP )
				Case btnTopRight
					ScrollScrollPanel( scrlMain, SCROLLPANEL_RIGHT, SCROLLPANEL_TOP )
				Case btnBottomLeft
					ScrollScrollPanel( scrlMain, SCROLLPANEL_LEFT, SCROLLPANEL_BOTTOM )
				Case btnBottomRight
					ScrollScrollPanel( scrlMain, SCROLLPANEL_RIGHT, SCROLLPANEL_BOTTOM )
			EndSelect
	EndSelect
	SetStatusText wndMain, "ScrollPanelX(): " + ScrollPanelX( scrlMain ) + ", ScrollPanelY():" + ScrollPanelY( scrlMain )
Forever

ScrollPanelClient

[编辑 | 编辑源代码]

Function ScrollPanelClient:TGadget( scrollpanel:TScrollPanel )

描述:检索滚动的面板。

信息:此面板表示小部件的总滚动区域。因此,请对该面板使用 SetGadgetShape 来更改滚动区域(将忽略 xpos 和 ypos 参数),或者使用辅助函数 FitScrollPanelClient 将客户端区域调整为常见尺寸。在任何情况下,重要的是要注意,与典型的 MaxGUI 行为相反,调整客户端面板的大小不会改变子级的位置或尺寸,无论之前使用 SetGadgetLayout 定义的任何大小行为如何。

有关详细信息,请参阅 CreateScrollPanel

FitScrollPanelClient

[编辑 | 编辑源代码]

Function FitScrollPanelClient( scrollpanel:TScrollPanel, fitType% = SCROLLPANEL_SIZETOKIDS )

描述:将客户端区域调整为常见尺寸的辅助函数。

信息:此函数调整 TScrollPanel 小部件的可滚动区域的大小。任何子小部件都将保留其当前位置和尺寸,无论之前使用 SetGadgetLayout 定义的任何大小行为如何。此函数还将重置当前可见区域,使其位于最左上角。

  • scrollpanel:要调整其客户端大小的可滚动面板。
  • fitType:应为以下常量之一
常量 含义
SCROLLPANEL_SIZETOKIDS 客户端区域将调整大小,使其宽度和高度足以包含所有子小部件。
SCROLLPANEL_SIZETOVIEWPORT 客户端区域将调整大小,使其与视口当前的大小相同(有效地删除滚动条)。

有关详细信息,请参阅 CreateScrollPanelScrollPanelClient

ScrollScrollPanel

[编辑 | 编辑源代码]

Function ScrollScrollPanel( scrollpanel:TScrollPanel, pX = SCROLLPANEL_TOP, pY = SCROLLPANEL_LEFT )

描述:将当前视口滚动到新位置。

信息:此函数移动可滚动面板的客户端区域,使视口左上角尽可能靠近客户端区域中指定的 pXpY 位置。


提供了 4 个位置常量

常量 位置
SCROLLPANEL_TOP 最顶端边缘。
SCROLLPANEL_LEFT 最左侧边缘。
SCROLLPANEL_BOTTOM 最底部边缘。
SCROLLPANEL_RIGHT 最右侧边缘。
SCROLLPANEL_HOLD 当前位置。

例如,这两个命令...

ScrollScrollPanel( myScrollPanel, SCROLLPANEL_LEFT, SCROLLPANEL_TOP )
ScrollScrollPanel( myScrollPanel, 0, 0 )

...将滚动到客户端区域的最左上角。相反,我们可以通过调用来滚动到客户端区域的最右下角

ScrollScrollPanel( myScrollPanel, SCROLLPANEL_RIGHT, SCROLLPANEL_BOTTOM )

如果我们只想更改水平或垂直滚动位置,我们可以使用 SCROLLPANEL_HOLD 常量。例如,要滚动到最左侧而不会更改当前垂直滚动位置,我们可以使用

ScrollScrollPanel( myScrollPanel, SCROLLPANEL_LEFT, SCROLLPANEL_HOLD )

有关详细信息,请参阅 CreateScrollPanelScrollPanelXScrollPanelYScrollPanelClient

ScrollPanelX

[编辑 | 编辑源代码]

Function ScrollPanelX:Int( scrollpanel:TScrollpanel )

描述: 返回当前位于视窗左上角的客户端区域的 x 坐标。

信息: 与 ScrollPanelYScrollScrollPanel 相互补充的功能。有关此值的视觉表示,请参阅 ScrollScrollPanel

有关详细信息,请参阅 CreateScrollPanel

ScrollPanelY

[编辑 | 编辑源代码]

函数 ScrollPanelY:Int( scrollpanel:TScrollpanel )

描述: 返回当前位于视窗左上角的客户端区域的 y 坐标。

信息: 与 ScrollPanelXScrollScrollPanel 相互补充的功能。有关此值的视觉表示,请参阅 ScrollScrollPanel

有关详细信息,请参阅 CreateScrollPanel

华夏公益教科书