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。