加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows XP / Delphi 7中的持久对象

发布时间:2020-12-14 05:28:56 所属栏目:Windows 来源:网络整理
导读:我试图在Delphi 7,Windows XP中制作一个AlarmSystem.我必须在数据库(MS SQL Server 2000)中注册警报.但是如果服务器坏了怎么办?好吧,我可以想象我必须坚持TAlarm类型的对象.那么,我该怎么做呢?也许继承自TComponent ???拜托,我该怎么办? 非常感谢. 我很抱
我试图在Delphi 7,Windows XP中制作一个AlarmSystem.我必须在数据库(MS SQL Server 2000)中注册警报.但是如果服务器坏了怎么办?好吧,我可以想象我必须坚持TAlarm类型的对象.那么,我该怎么做呢?也许继承自TComponent ???拜托,我该怎么办?

非常感谢.

我很抱歉我的英语.

在这里你有更多信息……
TAlarm基本上是从TObject开始的类.还有10个类来自TAlarm(某些类型的警报). TAlarm有一个名为FParams:TParams的字段,子类只有一个Execute方法.字段FParams可以是不同类型:TAlarmX1_Params,TAlarmX2_Params等,等等.

解决方法

您可以继承TPersistent,然后可以使用TJvAppXMLFileStorage( JVCL)组件来序列化TAlarm类.

保存对象

uses
  JvAppXMLStorage;

Procedure SaveMyObject(MyAlarm : TAlarm)
var
  MyStore: TJvAppXMLFileStorage;
begin
  MyStore:= TJvAppXMLFileStorage.Create(nil);
  try
    MyStore.WritePersistent('',MyAlarm);
    MyStore.Xml.SaveToFile('C:MyAlarm.xml');
  finally
    MyStore.Free;
  end;
end;

恢复对象

uses
  JvAppXMLStorage;

Procedure LoadMyObject(MyAlarm : TAlarm)
var
  MyStore: TJvAppXMLFileStorage;
begin
  MyStore:= TJvAppXMLFileStorage.Create(nil);
  try
    MyStore.FileName:='C:MyAlarm.xml';        
    MyStore.Xml.LoadFromFile('C:MyAlarm.xml');
    MyStore.ReadPersistent('',MyAlarm);
  finally
    MyStore.Free;
  end;
end;

UPDATE

如果需要将多个对象持久保存到XML文件,则必须为WritePersistent和ReadPersistent方法分配路径(唯一ID).

看这个例子,

多重坚持

Procedure SaveMyObjects(MyObjects : Array of TComponent);
var
  MyStore: TJvAppXMLFileStorage;
  i      : integer;
begin
  MyStore:= TJvAppXMLFileStorage.Create(nil);
  try
    for i := Low(MyObjects) to High(MyObjects) do
     MyStore.WritePersistent(MyObjects[i].Name,MyObjects[i]); //In this case i use the name property of the component.
    MyStore.Xml.SaveToFile('C:ToolsMyAlarm.xml');
   finally
    MyStore.Free;
  end;
end;

保存组件

SaveMyObjects([Button1,Button2,Edit1,Edit2]);

多个LOAD

Procedure LoadMyObjects(MyObjects:Array of TComponent);
var
  MyStore    : TJvAppXMLFileStorage;
  i          : integer;

begin
  MyStore:= TJvAppXMLFileStorage.Create(nil);
  try
    MyStore.FileName:='C:ToolsMyAlarm.xml';
    MyStore.Xml.LoadFromFile('C:ToolsMyAlarm.xml');
    for i := Low(MyObjects) to High(MyObjects) do
      MyStore.ReadPersistent(MyObjects[i].Name,MyObjects[i]);
  finally
    MyStore.Free;
  end;
end;

要还原属性

LoadMyObjects([Button1,Edit2]);

另一个加载选项

Procedure LoadMyObjectById(Id:String;MyObject:TComponent); //using the id of the object
var
  MyStore    : TJvAppXMLFileStorage;
  i          : integer;

begin
  MyStore:= TJvAppXMLFileStorage.Create(nil);
  try
    MyStore.FileName:='C:ToolsMyAlarm.xml';
    MyStore.Xml.LoadFromFile('C:ToolsMyAlarm.xml');
   MyStore.ReadPersistent(id,MyObject);
  finally
    MyStore.Free;
  end;
end;

你必须以这种方式运行它

LoadMyObjectById(Button1.Name,Button1); //Again using the Name property.

我希望这个例子有用;)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读