跳到內容

從 Zip/SaveSettings 開始學習 Gambas 程式設計

來自 Wikibooks,開放書籍,構建開放世界

本節建立在上一頁的單選按鈕練習的基礎上。

為單選按鈕新增設定儲存

[編輯 | 編輯原始碼]

Gambas 提供了一種簡潔的方式來儲存設定。設定可以是上次資料檔案的路徑,這樣下次程式啟動時就不必重新定位了。它們可以是使用者輸入或選擇的任何內容,您希望下次記住它們。這裡我們將儲存所選的單選按鈕。

首先,確保設定元件已啟用,作為您專案的一部分。啟動一個新的 QT 圖形專案後,選擇專案選單 > 屬性…,查詢 gb.settings 元件並選中它

Gambas Components window, looking for the Settings component

使用與上一頁 (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 資料夾。在其中,您將找到一個與您的程式同名的文字檔案。開啟它,您將看到設定檔案。

Gambas Settings File example showing in Kate
Radio Buttons 應用程式的設定文字檔案


設定在標題下整齊排列。現在您可以看到帶有斜槓的字串的重要性:第一個專案是標題。Settings["Radiobuttons/Fruit"]Radiobuttons 標題下的 Fruit 設定。

您需要注意:第一次執行程式時可能沒有設定檔案。如果您的表單開啟並查詢特定設定,而設定檔案不存在,則會出現問題。測試空字串(null)。

儲存顏色、複選框和 TableView 的內容

[編輯 | 編輯原始碼]

Saving settings for other objects in Gambas Saving settings for other objects in Gambas, running

表單上有一個複選框 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 函式

[編輯 | 編輯原始碼]

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) 是一個整體。它是一個代表顏色的數字。哪種顏色?括號中有三個專案:一個結果為 truefalse 的測試,如果測試結果為 true 則為答案,如果測試結果為 false 則為答案。模式為 if( TrueOrFalseThing, ValueIfTrue, ValueIfFalse)&hFFFFFFWhite 的十六進位制數(所有紅、綠、藍 LED 燈都完全開啟)。

這是一個示例設定檔案。左側複選框未選中。右側複選框已選中。

Settings text file showing an unticked checkbox Settings text file showing a ticked checkbox


從 Zip 開始學習 Gambas 程式設計
 ← RadioButtons SaveSettings Modules → 
華夏公益教科書