保存ColorDialog的颜色并将其加载到标签中

时间:2013-06-12 12:41:46

标签: delphi

我正在开发带有互联网连接的Tic Tac Toe游戏,以检查全球分数。我还添加了ColorDialog,因此用户可以在网格中为XO选择自己的颜色。以这两张图片为例:

  1. pic1
  2. pic2
  3. 我想添加此功能:当用户单击编辑然后单击网格项颜色(来自上面的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事件加载它们。顺便说一下,我真的不知道该怎么做,你能给我一些建议吗?

1 个答案:

答案 0 :(得分: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;

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