需要在 Delphi 7 上保留表单的状态
Need to retain the form's state on Delphi 7
我目前正在使用 Borland Delphi 7,我需要在关闭表单时保留表单上的复选框,以便下次用户想要创建新过滤器时使用。
编辑:
我有一个表格,"ordenes de servicios" 显示服务订单及其统计数据。我有很多过滤器,日期过滤器选项会打开一个带有复选框的新表单,因此我可以选择 "begin date"、"end date" 等选项。这种形式 "filtroDatas" 在关闭时为 "ordenes de servicios" 发送一个字符串,粗略地解释说,它是 Oracle 数据库中查询的 "WHERE" 子句。目前,"filtroDatas",关闭时,不保留之前使用的复选框和日期,但我需要让它保留它们。查找有关 .FormClose 如何工作的数据表,我有 "caHide" 选项,仅 "hide" 表单,但它不保留信息。 caMinimize 是一个无效的选项,因为表格应该 "dissapear" 从视觉上看。
注意:这是遗留代码,我不能改动太多。我虽然做了一些逆向工程,但是传票的形式如何
procedure TfrmFiltrosData.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
(Owner as TfrmOrdensDeServico).HabilitaDesabilitaTimers(True);
qryFiltrosOs.Close;
Action := caHide;
//frmFiltrosData := nil;
end;
我也尝试了 caMinimize,但没有用。
有人可以解释一下这个问题吗?
据我了解,您想记住各种复选框的选中状态以及日期等其他信息。
一种方法,我强调一种方法但不是唯一的方法是使用Ini文件。
例如,在您的 Form Create 中,您可以像这样读取以前的数据;
PROCEDURE TForm1.FormCreate(Sender: TObject);
VAR
MyIni: TMemIniFile;
BEGIN
MyIni := TmemInifile.create('inifile.ini');
WITH MyIni DO
BEGIN
TRY
checkbox1.Checked := readbool('Checkboxes_State', 'CheckBox1', False);
checkbox2.Checked := readbool('Checkboxes_State', 'CheckBox2', False);
checkbox3.Checked := readbool('Checkboxes_State', 'CheckBox3', False);
FINALLY
free;
END;
END;
END;
请注意,我没有包括 ini 文件的完整路径,你应该。
以上读取SECTION, ID, VALUE 并设置一个默认值如果它不存在。
如果您想保存复选框、编辑框或其他任何内容的状态,请在关闭表单时执行类似的操作;
PROCEDURE TForm1.FormClose(Sender: TObject; VAR Action: TCloseAction);
VAR
MyIni: TMemIniFile;
BEGIN
MyIni := TmemInifile.create('inifile.ini');
WITH MyIni DO
BEGIN
TRY
writebool('Checkboxes_State', 'CheckBox1', Checkbox1.Checked);
writebool('Checkboxes_State', 'CheckBox2', Checkbox2.Checked);
writebool('Checkboxes_State', 'CheckBox3', Checkbox3.Checked);
UpdateFile;
FINALLY
free;
END;
END;
END;
创建表单时,值为 read,退出时状态为 written。
注意:
TMemIniFile 要求您根据需要将 Uses IniFiles 添加到 INTERFACE 或 IMPLEMENTATION 部分。在上面的示例中,我使用了 IMPLEMENTATION.
还有多种其他方法与 TMemIniFile 关联;
- 读取字符串/写入字符串
- 读取日期/写入日期
- 读整数/写整数
如果需要,您也可以一次性阅读一整节内容。
关于日期,正如 David 在此回答中所解释的那样 Delphi inifiles ReadDateTime 您需要了解本地格式设置。如果您认为自己使用的是 MONTH 但实际上是在摆弄 DAY,那么日期很容易把事情搞砸。
如果您以后考虑在移动平台上将您的应用程序升级到 运行,您可能需要考虑 XML 文件。
希望对您有所帮助。我感觉我忘记了什么,但如果我忘记了,有人会指出来的。
我目前正在使用 Borland Delphi 7,我需要在关闭表单时保留表单上的复选框,以便下次用户想要创建新过滤器时使用。
编辑: 我有一个表格,"ordenes de servicios" 显示服务订单及其统计数据。我有很多过滤器,日期过滤器选项会打开一个带有复选框的新表单,因此我可以选择 "begin date"、"end date" 等选项。这种形式 "filtroDatas" 在关闭时为 "ordenes de servicios" 发送一个字符串,粗略地解释说,它是 Oracle 数据库中查询的 "WHERE" 子句。目前,"filtroDatas",关闭时,不保留之前使用的复选框和日期,但我需要让它保留它们。查找有关 .FormClose 如何工作的数据表,我有 "caHide" 选项,仅 "hide" 表单,但它不保留信息。 caMinimize 是一个无效的选项,因为表格应该 "dissapear" 从视觉上看。
注意:这是遗留代码,我不能改动太多。我虽然做了一些逆向工程,但是传票的形式如何
procedure TfrmFiltrosData.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
(Owner as TfrmOrdensDeServico).HabilitaDesabilitaTimers(True);
qryFiltrosOs.Close;
Action := caHide;
//frmFiltrosData := nil;
end;
我也尝试了 caMinimize,但没有用。 有人可以解释一下这个问题吗?
据我了解,您想记住各种复选框的选中状态以及日期等其他信息。
一种方法,我强调一种方法但不是唯一的方法是使用Ini文件。
例如,在您的 Form Create 中,您可以像这样读取以前的数据;
PROCEDURE TForm1.FormCreate(Sender: TObject);
VAR
MyIni: TMemIniFile;
BEGIN
MyIni := TmemInifile.create('inifile.ini');
WITH MyIni DO
BEGIN
TRY
checkbox1.Checked := readbool('Checkboxes_State', 'CheckBox1', False);
checkbox2.Checked := readbool('Checkboxes_State', 'CheckBox2', False);
checkbox3.Checked := readbool('Checkboxes_State', 'CheckBox3', False);
FINALLY
free;
END;
END;
END;
请注意,我没有包括 ini 文件的完整路径,你应该。
以上读取SECTION, ID, VALUE 并设置一个默认值如果它不存在。
如果您想保存复选框、编辑框或其他任何内容的状态,请在关闭表单时执行类似的操作;
PROCEDURE TForm1.FormClose(Sender: TObject; VAR Action: TCloseAction);
VAR
MyIni: TMemIniFile;
BEGIN
MyIni := TmemInifile.create('inifile.ini');
WITH MyIni DO
BEGIN
TRY
writebool('Checkboxes_State', 'CheckBox1', Checkbox1.Checked);
writebool('Checkboxes_State', 'CheckBox2', Checkbox2.Checked);
writebool('Checkboxes_State', 'CheckBox3', Checkbox3.Checked);
UpdateFile;
FINALLY
free;
END;
END;
END;
创建表单时,值为 read,退出时状态为 written。
注意:
TMemIniFile 要求您根据需要将 Uses IniFiles 添加到 INTERFACE 或 IMPLEMENTATION 部分。在上面的示例中,我使用了 IMPLEMENTATION.
还有多种其他方法与 TMemIniFile 关联;
- 读取字符串/写入字符串
- 读取日期/写入日期
- 读整数/写整数
如果需要,您也可以一次性阅读一整节内容。
关于日期,正如 David 在此回答中所解释的那样 Delphi inifiles ReadDateTime 您需要了解本地格式设置。如果您认为自己使用的是 MONTH 但实际上是在摆弄 DAY,那么日期很容易把事情搞砸。
如果您以后考虑在移动平台上将您的应用程序升级到 运行,您可能需要考虑 XML 文件。
希望对您有所帮助。我感觉我忘记了什么,但如果我忘记了,有人会指出来的。