<?xml version="1.0" encoding="GB2312"?>
<Root Alias="部标状态" TerminalType="808">
<Status desc="车辆状态位信息定义" TestBitValue="1" InOverBoundAlarm="4,4" OutOverBoundAlarm="8,7" >
<Byte seq="1" desc="报警第1状态字" >
<Bit seq="0" alarm="1" value1="紧急报警" s13nValue1=""/>
<Bit seq="1" alarm="0" value1="超速报警" s13nValue1=""/>
<Bit seq="2" alarm="0" value1="疲劳驾驶报警" s13nValue1=""/>
<Bit seq="3" alarm="0" value1="预警" s13nValue1=""/>
<Bit seq="4" alarm="1" value1="GNSS模块故障报警" s13nValue1=""/>
<Bit seq="5" alarm="1" value1="GNSS模块断开报警" s13nValue1=""/>
<Bit seq="6" alarm="1" value1="GNSS模块短路报警" s13nValue1=""/>
<Bit seq="7" alarm="1" value1="主电源欠压报警" s13nValue1=""/>
</Byte>
<Byte seq="2" desc="报警第2状态字" >
<Bit seq="0" alarm="1" value1="主电源掉电报警" s13nValue1=""/>
<Bit seq="1" alarm="0" value1="LCD模块故障报警" s13nValue1=""/>
<Bit seq="2" alarm="0" value1="TTS模块故障报警" s13nValue1=""/>
<Bit seq="3" alarm="0" value1="摄像头故障报警" s13nValue1=""/>
<Bit seq="4" alarm="0" value1="" s13nValue1=""/>
<Bit seq="5" alarm="0" value1="" s13nValue1=""/>
<Bit seq="6" alarm="0" value1="" s13nValue1=""/>
<Bit seq="7" alarm="0" value1="" s13nValue1=""/>
</Byte>
<Byte seq="8" desc="第4状态字" >
<Bit seq="0" alarm="0" value1="" s13nValue1=""/>
<Bit seq="1" alarm="0" value1="" s13nValue1=""/>
<Bit seq="2" alarm="0" value1="" s13nValue1=""/>
<Bit seq="3" alarm="0" value1="" s13nValue1=""/>
<Bit seq="4" alarm="0" value1="蜂鸣器开" value0="蜂鸣器关" s13nValue1="" s13nValue0=""/>
<Bit seq="5" alarm="0" value1="设防状态" value0="不设防状态" s13nValue1="" s13nValue0=""/>
<Bit seq="6" alarm="0" value1="" s13nValue1=""/>
<Bit seq="7" alarm="0" value1="" s13nValue1=""/>
</Byte>
</Status>
<!-- end of status define-->
</Root>
//加载xml
TalarmTypeList = record
AlarmName : string;
end;
pAlarmTypeList =^ TalarmTypeList;
//1、加载xml
if not FileExists(currentDirectory + filename) then
xmlDoc := TXMLDocument.Create(currentDirectory + FileName);
//2、使用
procedure TfrmConfigAlarm.loadStatus;
var
RootNode : IXMLNode;
StatusNode : IXMLNode;
ByteNode : IXMLNode;
BitNode : IXMLNode;
Attributes : Variant; //因为返回的是 OleVariant类型
I : Integer;
J : Integer;
ByteIndex : Integer;
BitIndex : Integer;
RequireList : TStringList;
minByteIndex : Integer;
maxByteIndex : Integer;
minBitIndex : Integer;
maxBitIndex : Integer;
node : PVirtualNode;
data : pAlarmTypeList;
alarm,value0,value1 : Variant;
begin
vstAlarmList.Clear;
xmlDoc.Active := True;//激活
RootNode := xmlDoc.ChildNodes.Nodes['Root'];//取出第一个节点
if RootNode = nil then
begin
ShowMessage('读取配置文件失败');
Exit;
end;
StatusNode := RootNode.ChildNodes.FindNode('Status'); //取出第二个节点
if StatusNode = nil then
begin
ShowMessage('读取配置文件失败');
Exit;
end;
for I := 0 to StatusNode.ChildNodes.Count - 1 do //Status 地下的子节点
begin
if I > highByteIndex then
Break;
ByteNode := StatusNode.ChildNodes.Get(I);
Attributes := ByteNode.Attributes['seq']; //取属性
for J := 0 to ByteNode.ChildNodes.Count - 1 do //再下一层子节点
begin
if J > 8 then
Break;
BitNode := ByteNode.ChildNodes.Get(J);
Attributes := BitNode.Attributes['seq'];
if Attributes <> Null then
BitIndex := Attributes
else
BitIndex := J;
if BitIndex < minBitIndex then
minBitIndex := BitIndex;
if BitIndex > maxBitIndex then
maxBitIndex := BitIndex;
alarm := BitNode.Attributes['alarm']; //取属性
value1 := BitNode.Attributes['value1'];
value0 := BitNode.Attributes['value0'];
if (value0<>null) and (value0<>'') then
begin
node := vstAlarmList.AddChild(nil);//添加一行
data := vstAlarmList.GetNodeData(node);//获取虚拟树的行内存
data.AlarmName := value0;
node.CheckType := ctCheckBox; //选择框
vstAlarmList.TreeOptions.MiscOptions := vstAlarmList.TreeOptions.MiscOptions+[toCheckSupport];
if alarm > 0 then //是否勾选
node.CheckState := csCheckedNormal else
node.CheckState := csUncheckedNormal;
end;
//。。。。。省略
end;
end;
end;
//3、勾选后的,取到列表里面
procedure TfrmConfigAlarm.LoadSelectalarm;
var
node : PVirtualNode;
data : pAlarmTypeList;
i : Integer;
begin
listSelectAlarm.Clear;
node := vstAlarmList.GetFirstChecked();//得到第一个 勾选的值, 虚拟树,勾选只可以在第一列
while Assigned(node) do
begin
data := vstAlarmList.GetNodeData(node);
listSelectAlarm.Add(data.AlarmName); //放Tstringlist里面
node := vstAlarmList.GetNextChecked(node);
end;
end;