2013-06-12 60 views
0

我正在開發用於檢查全球分數的互聯網連接的Tic Tac Toe遊戲。我還添加了ColorDialog,因此用戶可以在網格內爲XO選擇自己的顏色。看這些2圖片作爲例子:從ColorDialog保存顏色並將其加載到標籤中

  1. pic1
  2. pic2

我想添加此功能:當用戶點擊編輯,然後網格項的顏色(來自TMenu以上),一個MessageDialog出現詢問是否下次運行程序時,您想再次使用此顏色或默認(黑色)。我寫了下面的代碼:

procedure TfrMain.MenuItem10Click(Sender: TObject); 
begin 
if (MessageDlg('Set this color as default? Next time you play or you open the program, you will use this color. [Yes=OK||Cancel=NO]', 
    mtConfirmation,mbOKCancel,0) = mrCancel) then 
    begin 
    if ColorDialog1.Execute then 
     for i:= 0 to 8 do 
     begin 
     (FindComponent('lblcell'+IntToStr(i)) as TLabel).Font.Color := ColorDialog1.Color; 
     end; 
    end 
    else 
    begin 
    //saves the color somewhere, when the program will run again, it will load this color 
    end; 
end; 

如果按Cancel的ColorDialog類出現,它設置的顏色。我的問題是,我不知道如何保存選定的顏色並在程序再次運行時加載它。該程序還將它的內容保存在C:\tictactoe8的文件夾中,所以我想在這裏保存一個帶有顏色設置的文本文件,並通過TForm1的OnCreate事件加載它們。順便說一下,我真的不知道該怎麼做,你能給我一些建議嗎?

+0

您以前使用過'TRegistry',還是您熟悉使用Windows註冊表?我會建議將設置保存爲您的應用程序的Windows註冊表值。 – lurker

+0

其他嘗試可能是一個IniFile http://stackoverflow.com/search?q=inifile+delphi – bummi

+0

看起來你的問題是關於井字遊戲,或關於colordialog,但它不是。它實際上是關於存儲(任何)程序設置。如果以這種方式解決問題,解決問題將會更容易,並且更容易找到有關問題的信息。 「存儲tic tac腳趾顏色」可能會產生比「存儲應用程序設置」更少(相關)的搜索結果。 後者可能會建議您使用TRegistry或TiniFile。 ;) – GolezTrol

回答

1

下面是如何在Delphi中將表單的主窗體狀態保存到註冊表的示例。您也可以使用這種技術來保存顏色。常量是KN_xxx是我的註冊表項名稱。您可以將您的Color作爲參數名稱。 KEY_SETTINGS是您的應用的註冊表路徑,例如\Software\MyCompany\TicTacToe\Settings

這節省了當的形式(窗口)創建的信息:我們將它保存爲窗體關閉

procedure TFormTicTacToe.FormCreate(Sender: TObject); 
var 
    reg: TRegistry; 
    idx: Integer; 
begin 
    reg := TRegistry.Create; 

    try 
    idx := RegReadInteger(reg, KN_CFPPI, 0); 

    if idx = PixelsPerInch then 
    begin 
     Width := RegReadInteger(reg, KN_CFWIDTH, Width); 
     Height := RegReadInteger(reg, KN_CFHEIGHT, Height); 
     Left := RegReadInteger(reg, KN_CFLEFT, Left); 
     Top := RegReadInteger(reg, KN_CFTOP, Top); 
    end; 

    WindowState := TWindowState(RegReadInteger(reg, KN_CFWINDOWSTATE, Integer(wsNormal))); 
    finally 
    reg.CloseKey; 
    reg.Free; 
    end; 
end; 

在這裏:

procedure TFormTicTacToe.FormClose(Sender: TObject; 
    var Action: TCloseAction); 
var 
    reg: TRegistry; 
begin 
    reg := TRegistry.Create; 

    if not reg.OpenKey(KEY_SETTINGS, true) then 
    begin 
    reg.Free; 
    Exit; 
    end; 

    with reg do try 
    if WindowState = wsNormal then 
    begin 
     WriteInteger(KN_CFWIDTH, Width); 
     WriteInteger(KN_CFHEIGHT, Height); 
     WriteInteger(KN_CFLEFT, Left); 
     WriteInteger(KN_CFTOP, Top); 
    end; 

    WriteInteger(KN_CFPPI, PixelsPerInch); 
    finally 
    CloseKey; 
    Free; 
    end; { with reg do try } 
end; 

在你的情況,你只需要保存並檢索顏色。

+0

這裏我將我的設置保存在註冊表中。它在C:某處嗎?謝謝你的方式! :) –

+1

註冊表是Windows註冊表。由Windows維護。自Windows 95出現以來,這是在Windows中保存應用程序配置數據的最爲標準的方法。 – lurker

+3

在我看來,一個.ini文件是可取的,它應該存儲在用戶的appdata文件夾中。 –

相關問題