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

Delphi 从ColorDialog保存颜色并将其加载到标签中,delphi,Delphi,我正在开发一款有互联网连接的Tic-Tac-Toe游戏,用于检查全球分数。我还添加了一个ColorDialog,用户可以在网格内为X和O选择自己的颜色。以这两张图片为例: 我想添加此功能:当用户单击“编辑”,然后单击“网格项颜色”(从上面的TMenu中),会出现一个消息对话框,询问您下次运行程序时,是要再次使用此颜色还是默认颜色(黑色)。我编写了以下代码: procedure TfrMain.MenuItem10Click(Sender: TObject); begin if (Messa

我正在开发一款有互联网连接的Tic-Tac-Toe游戏,用于检查全球分数。我还添加了一个
ColorDialog
,用户可以在网格内为
X
O
选择自己的颜色。以这两张图片为例:

  • 我想添加此功能:当用户单击“编辑”,然后单击“网格项颜色”(从上面的TMenu中),会出现一个
    消息对话框
    ,询问您下次运行程序时,是要再次使用此颜色还是默认颜色(黑色)。我编写了以下代码:

    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
    ,将显示“颜色”对话框并设置颜色。我的问题是,我不知道如何保存选定的颜色,并在程序再次运行时加载它。这个程序还将其内容保存在
    C:\tictactoe8
    的文件夹中,所以我想在这里保存一个带有颜色设置的文本文件,并通过TForm1的OnCreate事件加载它们。顺便说一句,我真的不知道怎么做,你能给我一些建议吗?

    下面是一个如何在Delphi中将表单的主表单状态保存到注册表的示例。您也可以使用此技术保存颜色。
    KN_xxx
    常量是我的注册表项名称。您可以调用您的
    Color
    作为参数名。而
    KEY\u 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;
    

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

    您以前是否使用过
    TRegistry
    ,或者您是否熟悉使用Windows注册表?我建议将设置保存为应用程序的Windows注册表值。另一种尝试可能是一个INI文件。看起来您的问题是关于tic tac toe或关于颜色对话框,但两者都不是。它实际上是关于存储(任何)程序设置。如果你以这种方式处理问题,你将更容易解决它,也更容易找到关于它的信息。“存储tic tac toe颜色”可能会产生比“存储应用程序设置”更少的(相关)搜索结果。后者可能会建议您使用
    TRegistry
    TiniFile
    ;)在这里,我将设置保存在注册表中。它在C:的某个地方吗?顺便谢谢你!:)注册表是Windows注册表。由Windows维护。这是Windows中保存应用程序配置数据的最标准方法,因为
    Windows 95
    问世。在我看来,.ini文件更可取,并且应该存储在用户的appdata文件夹中。对于保存颜色设置之类的东西,这两种方法可能都没有太大区别。Delphi有一个类
    TIniFile
    ,用于在OP选择该路径时使用INI文件。下面是一个示例说明:。