0

我正在开发带有互联网连接的井字游戏,以检查全球分数。我还添加了一个,以便用户可以在网格内和网格内ColorDialog选择自己的颜色。以这两张图片为例:XO

  1. 图1
  2. 图2

我想添加此功能:当用户单击编辑然后单击网格项目颜色(来自上面的 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;

如果您按下CancelColorDialog 会出现并设置颜色。我的问题是我不知道如何保存选定的颜色并在程序再次运行时加载它。这个程序还将它的东西保存在一个文件夹中C:\tictactoe8,所以我想在这里保存一个带有颜色设置的文本文件,并通过 TForm1 的 OnCreate 事件加载它们。顺便说一句,我真的不知道该怎么做,你能给我一些建议吗?

4

1 回答 1

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;

在您的情况下,您只需要保存和检索颜色。

于 2013-06-12T12:55:56.283 回答