需要在Delphi 7上保留表单的状态

时间:2017-10-31 13:43:25

标签: delphi-7

我目前正在使用Borland Delphi 7,当我关闭它时,我需要在表格上保留复选框,以便下次用户想要制作新的过滤器。

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

注意:这是遗留代码,我无法改变太多。我虽然做了一些反向改造,但形式是如何召唤

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

我也试过了caMinimize,但它没有用。 有人可以对这件事情有所了解吗?

1 个答案:

答案 0 :(得分:1)

据我了解,您想要记住各种复选框的检查状态以及其他信息,例如日期。

一种方法,我强调一种方法,但不是唯一的方法是使用Ini文件。

例如,在表单创建中,您可以读取以前的数据;

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 ,退出时状态为已写

注意:

TMemIniFile要求您根据需要将“使用IniFiles”添加到接口实施部分。在上述示例的情况下,我使用了 IMPLEMENTATION

还有其他与TMemIniFile相关的其他方法;

  • ReadString / WriteString
  • ReadDate / WriteDate
  • ReadInteger / WriteInteger

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

关于日期,正如David在本回答Delphi inifiles ReadDateTime中解释的那样,您需要了解本地格式设置。如果您认为自己正在与MONTH合作但实际上正在摆弄DAY,日期可能很容易搞砸。

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

我希望这会有所帮助。我有一种感觉,我已经忘记了什么,但如果有的话,有人会指出它。