我正在开发带有互联网连接的Tic Tac Toe游戏,以检查全球分数。我还添加了ColorDialog
,因此用户可以在网格中为X
和O
选择自己的颜色。以这两张图片为例:
我想添加此功能:当用户单击编辑然后单击网格项颜色(来自上面的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 :(得分: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;
在您的情况下,您只需要保存并检索颜色。