【问题标题】:Need to retain the form's state on Delphi 7需要在 Delphi 7 上保留表单的状态
【发布时间】:2017-10-31 13:43:24
【问题描述】:

我目前正在使用 Borland Delphi 7,我需要在关闭表单时保留选中的复选框,以便用户下次创建新过滤器时使用。

编辑: 我有一个表格,“ordenes de servicios”,它显示了服务订单及其统计信息。我有很多过滤器,日期过滤器选项会打开一个带有复选框的新表单,因此我可以选择“开始日期”、“结束日期”等选项。这种形式“filtroDatas”在关闭时为“ordenes de servicios”发送一个字符串,粗略地解释一下,它是 Oracle 数据库中查询的“WHERE”子句。目前,“filtroDatas”在关闭时不会保留之前使用的复选框和日期,但我需要让它保留它们。查找有关 .FormClose 如何工作的数据表,我有“caHide”选项来“隐藏”表单,但它不保留信息。 caMinimize 是一个无效选项,因为表单应该从视线中“消失”。

注意:这是一个遗留代码,我无法更改太多。我虽然做了一些逆向工程,但形式是如何召唤的

procedure TfrmFiltrosData.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  (Owner as TfrmOrdensDeServico).HabilitaDesabilitaTimers(True);
  qryFiltrosOs.Close;
  Action := caHide;
  //frmFiltrosData := nil;
end;

我也尝试了 caMinimize,但没有成功。 有人能解释一下这件事吗?

【问题讨论】:

  • 这里没有足够的信息来提供帮助
  • 您需要创建一个包含复选框中项目的“过滤器”类,然后基于它创建一个对象。在打开对象之前将对象传递给窗体并使用对象的内容填充窗体。当表单关闭时,使用表单中的复选框更新过滤器对象中的值并将对象返回给调用函数。
  • @DavidHeffernan 编辑了帖子。
  • 我会尝试@Jaydee 的想法,似乎是正确的。谢谢你们! =D
  • 还是不行

标签: delphi-7


【解决方案1】:

据我了解,您希望记住各种复选框的选中状态以及日期等其他信息。

一种方法,我强调一种方法,但不是唯一的方法是使用 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 文件的完整路径,您应该

上面读取SECTIONIDVALUE,如果不存在则设置默认值。

如果您想保存复选框、编辑框或其他内容的状态,请在您的表单关闭中执行类似的操作;

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 添加到您的 INTERFACEIMPLEMENTATION 部分,具体取决于您的需要。在上述示例中,我使用了 IMPLEMENTATION


TMemIniFile 还有很多其他方法;

  • 读取字符串/写入字符串
  • 读取日期/写入日期
  • ReadInteger / WriteInteger

如果需要,您还可以一口气阅读整个部分。

关于日期,正如大卫在这个答案Delphi inifiles ReadDateTime 中解释的那样,您需要了解本地格式设置。如果您认为自己正在处理 MONTH 但实际上却在摆弄 DAY,那么日期很容易搞砸。

如果您考虑稍后升级您的应用以在移动平台上运行,您可能需要考虑 XML 文件。

我希望这对您有所帮助。我感觉我忘记了什么,但如果我忘记了,有人会指出来。

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多