從 Zip/SaveSettings 開始學習 Gambas 程式設計
本節建立在上一頁的單選按鈕練習的基礎上。
Gambas 提供了一種簡潔的方式來儲存設定。設定可以是上次資料檔案的路徑,這樣下次程式啟動時就不必重新定位了。它們可以是使用者輸入或選擇的任何內容,您希望下次記住它們。這裡我們將儲存所選的單選按鈕。
首先,確保設定元件已啟用,作為您專案的一部分。啟動一個新的 QT 圖形專案後,選擇專案選單 > 屬性…,查詢 gb.settings 元件並選中它
使用與上一頁 (RadioButtons) 相同的表單,包含水果和交通按鈕,但將程式碼更改為以下內容
Public Sub rbTransport_Click()
Settings["Radiobuttons/Transport"] = Last.Text
End
Public Sub rbFruit_Click()
Settings["Radiobuttons/Fruit"] = Last.Text
End
Public Sub Form_Open()
Select Case Settings["Radiobuttons/Transport"]
Case "Road"
rbRoad.value = True
Case "Sea"
rbSea.Value = True
Case "Air"
rbAir.value = True
End Select
Select Case Settings["Radiobuttons/Fruit"]
Case "Apple"
rbApple.value = True
Case "Orange"
rbOrange.Value = True
Case "Pear"
rbPear.value = True
End Select
End
執行程式。選擇一種交通工具和一種水果。關閉程式。再次執行它:您的選擇已恢復。您可以在表單關閉時儲存您的設定。Gambas wiki 有 這個例子,展示瞭如何將視窗恢復到上次拖動到的位置,以及上次程式執行時調整到的尺寸
Public Sub Form_Open() 'Restore settings
Me.Top = Settings["Window/Top", Me.Top]
Me.Left = Settings["Window/Left", Me.Left]
Me.Height = Settings["Window/Height", Me.Height]
Me.Width = Settings["Window/Width", Me.Width]
End
Public Sub Form_Close() 'Save settings
Settings["Window/Top"] = Me.Top
Settings["Window/Left"] = Me.Left
Settings["Window/Height"] = Me.Height
Settings["Window/Width"] = Me.Width
End
我 指的是當前表單。
這些設定實際上儲存在哪裡?在您的主資料夾中有一個隱藏的用於設定的資料夾,名為 .config 。在 Linux 中,任何以點開頭的檔案或資料夾都是隱藏的。在 .config 中查詢 Gambas3 資料夾。在其中,您將找到一個與您的程式同名的文字檔案。開啟它,您將看到設定檔案。

設定在標題下整齊排列。現在您可以看到帶有斜槓的字串的重要性:第一個專案是標題。Settings["Radiobuttons/Fruit"] 是 Radiobuttons 標題下的 Fruit 設定。
您需要注意:第一次執行程式時可能沒有設定檔案。如果您的表單開啟並查詢特定設定,而設定檔案不存在,則會出現問題。測試空字串(null)。
表單上有一個複選框 cbSurnameFirst,一個面板 Panel1,一個帶有文字“選擇顏色:”的標籤,一個顏色按鈕 ColorButton1,一個標籤 Label1,其文字為“填充”,顏色為藍色並帶下劃線,以及一個表格檢視 tv1。
執行程式。用隨機字母填充表格檢視。選擇一種顏色。突出顯示完全無用的按鈕“姓氏在前”。關閉程式。再次執行程式。設定已恢復。
Public Sub ColorButton1_Change()
Panel1.Background = ColorButton1.Color
Settings["Colours/PanelColour"] = Panel1.Background
End
Public Sub Label1_MouseDown()
tv1.Columns.count = 2
Settings["TableView/Columns"] = tv1.Columns.count
tv1.Rows.count = 4
Settings["TableView/Rows"] = tv1.Rows.count
For i As Integer = 0 To tv1.Rows.Max
For j As Integer = 0 To tv1.Columns.Max
tv1[i, j].text = Chr(Rand(Asc("A"), Asc("Z")))
Settings["TableView/" & i & "," & j] = tv1[i, j].text
Next
Next
End
Public Sub cbSurnameFirst_Click()
Settings["Names/SurnameFirst"] = cbSurnameFirst.Value
End
Public Sub Form_Open() 'restore settings
Dim Surname As String = Settings["Names/SurnameFirst"]
cbSurnameFirst.Value = If(IsNull(Surname), False, Surname)
Dim nCols As String = Settings["TableView/Columns"]
tv1.Columns.count = If(IsNull(nCols), 2, nCols)
Dim nRows As String = Settings["TableView/Rows"]
tv1.Rows.count = If(IsNull(nRows), 4, nRows)
For i As Integer = 0 To tv1.Rows.Max
For j As Integer = 0 To tv1.Columns.Max
tv1[i, j].text = Settings["TableView/" & i & "," & j]
Next
Next
Dim colour As String = Settings["Colours/PanelColour"]
Panel1.Background = If(IsNull(colour), &hFFFFFF, colour)
End
IF...THEN...ELSE 語句有一種特殊形式,可以節省編寫多行程式碼的工作。它以函式的形式存在。以下兩者是等效的
if IsNull(colour) Then
Panel1.Background = &hFFFFFF 'white
Else
Panel1.Background = colour
EndIf
等效於
Panel1.Background = If(IsNull(colour), &hFFFFFF, colour)
在一行語句中,If(IsNull(colour), &hFFFFFF, colour) 是一個整體。它是一個代表顏色的數字。哪種顏色?括號中有三個專案:一個結果為 true 或 false 的測試,如果測試結果為 true 則為答案,如果測試結果為 false 則為答案。模式為 if( TrueOrFalseThing, ValueIfTrue, ValueIfFalse)。&hFFFFFF 是 White 的十六進位制數(所有紅、綠、藍 LED 燈都完全開啟)。
這是一個示例設定檔案。左側複選框未選中。右側複選框已選中。



