BlitzMax/模块/MaxGUI/代理小部件
此模块包含任何官方代理小部件,它们围绕标准 MaxGUI 小部件,并提供一个额外的库,可以在各种程序中使用。此库中的任何小部件都可以与核心 MaxGUI.MaxGUI 模块中提供的标准 MaxGUI 函数一起使用。
函数 CreateHyperlink:TGadget( url$,x,y,w,h,group:TGadget,style=0,customtext$ = "" )
描述:创建基本超链接小部件,当单击时在默认浏览器中打开指定的 url$。
信息:底层小部件是标签,因此 style 参数可以接受除 LABEL_SEPARATOR 之外的所有 CreateLabel 标志。
可以使用 SetGadgetTextColor 和 SetGadgetColor 分别设置正常和悬停文本颜色。
可选的 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:TSplitter( pX%, pY%, pW%, pH%, pParent:TGadget, pOrientation% = SPLIT_VERTICAL )
描述:创建由可拖动分隔线分隔的两个面板组成的小部件。
信息:分隔线由两个面板组成:一个主面板(使用 SPLITPANEL_MAIN 标识),它充当主要工作区;以及一个侧面板(使用 SPLITPANEL_SIDEPANE 标识),它通常用于显示附加信息。这两个面板都包含在由 TSplitter 实例表示的父面板中。这两个面板由一个拆分句柄/分隔线分隔,可以使用 SplitterBehavior 和 SetSplitterBehavior 函数分别查询和更改拆分句柄/分隔线的行为。
创建分隔线小部件后,可以使用 SplitterPanel 命令检索适当的面板,然后开始向其中添加小部件。
TSplitter 类型实例可以与大多数标准 MaxGUI 命令一起使用,使您可以更改整个分隔线小部件的属性。但是,有一些例外。
SetGadgetSensitivity 和 GadgetSensitivity 对分隔线小部件没有影响。如果要使用活动面板,请在每个分隔线面板内创建自己的子面板。
SetGadgetTooltip 和 GadgetTooltip 将为用户悬停在分隔线句柄/分隔线上的情况设置/检索工具提示。
SetGadgetTextColor 将更改分隔线句柄/分隔线的外观,并使其呈现原始的 3D 外观。
另请参见:SplitterPanel、SetSplitterPosition、SplitterPosition、SetSplitterBehavior、SplitterBehavior、SetSplitterOrientation 和 SplitterOrientation。
示例:
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:TGadget( splitter:TSplitter, panel% = SPLITPANEL_MAIN )
描述:检索组成 TSplitter 小部件的两个面板中的一个。
信息:此函数用于返回标准 MaxGUI 面板,您可以向其中添加小部件。
可用的面板是 SPLITPANEL_MAIN 和 SPLITPANEL_SIDEPANE。有关两个面板之间差异的更多信息,请参见 CreateSplitter。
另请参见:CreateSplitter、SetSplitterPosition、SplitterPosition、SetSplitterBehavior、SplitterBehavior、SetSplitterOrientation 和 SplitterOrientation。
函数 SetSplitterPosition( splitter:TSplitter, position%, save% = True )
描述:设置分隔线距 TSplitter 小部件边缘的距离(以像素为单位)。
信息:此函数最常见的用途可能是恢复以前由 SplitterPosition 返回的分割位置。
可选的 save% 参数决定是否在分隔线从隐藏状态返回时恢复提供的 position。在大多数情况下,这应该保留为 True。
另请参见:CreateSplitter、SplitterPanel、SplitterPosition、SetSplitterBehavior、SplitterBehavior、SetSplitterOrientation 和 SplitterOrientation。
函数 SplitterPosition:Int( splitter:TSplitter )
描述:返回分隔线距 TSplitter 小部件边缘的距离(以像素为单位)。
信息:此函数最常见的用途可能是保存当前分隔线位置,以便稍后使用 SetSplitterPosition 恢复。
另请参见:CreateSplitter、SplitterPanel、SetSplitterPosition、SetSplitterBehavior、SplitterBehavior、SetSplitterOrientation 和 SplitterOrientation。
Function SetSplitterOrientation( splitter:TSplitter, orientation% = -1 )
描述:设置分割器的方向。
信息:可用的两种方向是(两者都可以与 SPLIT_FLIPPED 结合)
方向 | 描述 |
-1 | 切换 SPLIT_FLIPPED 标志。 |
SPLIT_VERTICAL | 分割器由一个主左侧面板和一个沿右侧边缘的侧面板组成。 |
SPLIT_HORIZONTAL | 分割器由一个主顶部面板和一个沿底部边缘的侧面板组成。 |
SPLIT_FLIPPED | 分割器由一个主右侧面板和一个沿左侧边缘的侧面板组成。 |
SPLIT_FLIPPED | 分割器由一个主底部和一个沿顶部边缘的侧面板组成。 |
另请参阅:CreateSplitter、SplitterPanel、SetSplitterPosition、SplitterPosition、SetSplitterBehavior 和 SplitterOrientation。
Function SplitterOrientation:Int( splitter:TSplitter )
描述:返回分割器的方向。
信息:可用的两种方向是(两者都可以与 SPLIT_FLIPPED 结合)
方向 | 描述 |
SPLIT_VERTICAL | 分割器由一个主左侧面板和一个沿右侧边缘的侧面板组成。 |
SPLIT_HORIZONTAL | 分割器由一个主顶部面板和一个沿底部边缘的侧面板组成。 |
SPLIT_FLIPPED | 分割器由一个主右侧面板和一个沿左侧边缘的侧面板组成。 |
SPLIT_FLIPPED | 分割器由一个主底部和一个沿顶部边缘的侧面板组成。 |
另请参阅:CreateSplitter、SplitterPanel、SetSplitterPosition、SplitterPosition、SetSplitterBehavior 和 SetSplitterOrientation。
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 之外的所有内容)。
另请参阅:CreateSplitter、SplitterPanel、SplitterPosition、SplitterBehavior、SetSplitterOrientation 和 SplitterOrientation。
Function SplitterBehavior:Int( splitter:TSplitter )
描述:返回之前使用 SetSplitterBehavior 设置的值。
返回:一个整数,由描述分割器行为的位标志组合而成。
信息:有关详细信息,请参阅 SetSplitterBehavior。
Function CreateScrollPanel:TScrollPanel( x,y,w,h,group:TGadget,flags=0 )
描述:创建一个可滚动面板。
信息:可滚动面板可用于在较小的区域内显示大量小部件。将显示滚动条以允许用户在通过通常较小的视口查看的客户端区域内移动。ScrollPanelX 和 ScrollPanelY 函数可用于检索当前滚动位置,而 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 )
另请参阅:ScrollPanelClient、FitScrollPanelClient、ScrollScrollPanel、ScrollPanelX、ScrollPanelY 和 FitScrollPanelClient。
示例:
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
Function ScrollPanelClient:TGadget( scrollpanel:TScrollPanel )
描述:检索滚动的面板。
信息:此面板表示小部件的总滚动区域。因此,请对该面板使用 SetGadgetShape 来更改滚动区域(将忽略 xpos 和 ypos 参数),或者使用辅助函数 FitScrollPanelClient 将客户端区域调整为常见尺寸。在任何情况下,重要的是要注意,与典型的 MaxGUI 行为相反,调整客户端面板的大小不会改变子级的位置或尺寸,无论之前使用 SetGadgetLayout 定义的任何大小行为如何。
有关详细信息,请参阅 CreateScrollPanel。
Function FitScrollPanelClient( scrollpanel:TScrollPanel, fitType% = SCROLLPANEL_SIZETOKIDS )
描述:将客户端区域调整为常见尺寸的辅助函数。
信息:此函数调整 TScrollPanel 小部件的可滚动区域的大小。任何子小部件都将保留其当前位置和尺寸,无论之前使用 SetGadgetLayout 定义的任何大小行为如何。此函数还将重置当前可见区域,使其位于最左上角。
- scrollpanel:要调整其客户端大小的可滚动面板。
- fitType:应为以下常量之一
常量 | 含义 |
SCROLLPANEL_SIZETOKIDS | 客户端区域将调整大小,使其宽度和高度足以包含所有子小部件。 |
SCROLLPANEL_SIZETOVIEWPORT | 客户端区域将调整大小,使其与视口当前的大小相同(有效地删除滚动条)。 |
有关详细信息,请参阅 CreateScrollPanel 和 ScrollPanelClient。
Function ScrollScrollPanel( scrollpanel:TScrollPanel, pX = SCROLLPANEL_TOP, pY = SCROLLPANEL_LEFT )
描述:将当前视口滚动到新位置。
信息:此函数移动可滚动面板的客户端区域,使视口左上角尽可能靠近客户端区域中指定的 pX、pY 位置。
提供了 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 )
有关详细信息,请参阅 CreateScrollPanel、ScrollPanelX、ScrollPanelY 和 ScrollPanelClient。
Function ScrollPanelX:Int( scrollpanel:TScrollpanel )
描述: 返回当前位于视窗左上角的客户端区域的 x 坐标。
信息: 与 ScrollPanelY 和 ScrollScrollPanel 相互补充的功能。有关此值的视觉表示,请参阅 ScrollScrollPanel。
有关详细信息,请参阅 CreateScrollPanel。
函数 ScrollPanelY:Int( scrollpanel:TScrollpanel )
描述: 返回当前位于视窗左上角的客户端区域的 y 坐标。
信息: 与 ScrollPanelX 和 ScrollScrollPanel 相互补充的功能。有关此值的视觉表示,请参阅 ScrollScrollPanel。
有关详细信息,请参阅 CreateScrollPanel。