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