我试图在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:\Tools\MyAlarm.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:\Tools\MyAlarm.xml'; MyStore.Xml.LoadFromFile('C:\Tools\MyAlarm.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:\Tools\MyAlarm.xml'; MyStore.Xml.LoadFromFile('C:\Tools\MyAlarm.xml'); MyStore.ReadPersistent(id,MyObject); finally MyStore.Free; end; end;
你必须以这种方式运行它
LoadMyObjectById(Button1.Name,Button1); //Again using the Name property.
我希望这个例子有用;)