跳轉到內容

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

華夏公益教科書