📄 iprelation.pas
字号:
// initialize values
for i := 0 to MaxVal do begin
dataOut[Chart1.Tag,i] := 0;
dataIn[Chart1.Tag,i] := 0;
dataFL[Chart1.Tag,i] := 0;
Chart1.SeriesList.Series[0].Add(dataOut[Chart1.Tag,i]);
Chart1.SeriesList.Series[1].Add(dataIn[Chart1.Tag,i]);
if TypeI=2 then
CHart1.SeriesList.Series[2].Add(dataFL[Chart1.Tag,i]);
end;
P[Chart1.Tag] := 0;
end;
//==============================================================================
// 得到当前进出包个数 getMAXpackInout
// 返回:packetsIn,packetsOut,packetsFL: 曲线点数 ifaceInfo:TiFaceInfo
// Typei:integer; 0 : outIn 2条Seiros(曲线)
// 1 : Borst 2条Seiros(曲线)
// 2 : netFL 3条Seiros(曲线)
//==============================================================================
procedure getMAXpackInout(ifaceInfo:TiFaceInfo;TypeI:integer;ChartTag:integer;var packetsIn , packetsOut, packetsFL:Double);
var
j: integer;
s: string;
xIn, xOut,xFL : Double;
vPBin,vPubIn,vPbOut,vPubOut : Double;
begin
if ifaceInfo.CardIndex <0 then Exit;
if TypeI = 0 then // 进出口包
begin
xIn:=ifaceInfo.BIn;
xOut:=ifaceInfo.BOut;
packetsOut := (xOut - TempInfo.tmpOut[ChartTag,TypeI]) / 1024 ; if packetsOut<0 then packetsOut := 0;
packetsIn := (xIn - TempInfo.tmpIn[ChartTag,TypeI]) / 1024 ; if packetsIn <0 then packetsIn := 0;
tempInfo.tmpIn[ChartTag,TypeI] := ifaceInfo.BIn;
tempInfo.tmpOut[ChartTag,TypeI] := ifaceInfo.BOut;
end
else if TypeI=1 then // 广播带宽负载率
begin
vPubIn:=ifaceInfo.pubIn - TempInfo.tmpPubIn[ChartTag,TypeI];
vPbin := ifaceInfo.pBin - TempInfo.tmpPBin[ChartTag,TypeI];
if (VpBin+vPubIn)=0 then Xin:=0 else
xIn:=(vPubIn/(vPBin+vPubIn))*100;
vPubOut:=ifaceInfo.pubOut - TempInfo.tmpPubOut[ChartTag,TypeI];
vPbOut := ifaceInfo.pbOut - TempInfo.tmpPbOut[ChartTag,TypeI];
if (vPbOut+vPubOut)=0 then Xout:=0 else
xOut:=(vPubOut/(vPbOut+vPubOut))*100;
packetsOut := (xOut);
packetsIn := (xIn );
tempInfo.tmpPubIn[ChartTag,TypeI] := IfaceInfo.PubIn;
tempInfo.tmpPbin[ChartTag,TypeI] := IfaceInfo.pBin ;
tempInfo.tmpPubOut[ChartTag,TypeI]:= IfaceInfo.PubOut;
tempInfo.tmpPbOut[ChartTag,TypeI] := IfaceInfo.PbOut;
end
else if TypeI=2 then // 网络负载率
begin
if (IfaceInfo.nSpeed =0) then
begin
xin:=0; xOut:=0;xFL:=0;
end
else
begin
xIn:= (ifaceInfo.Bin- TempInfo.tmpIn[ChartTag,TypeI])*(8/ifaceInfo.nSpeed);
xOut:=(ifaceInfo.BOut -TempInfo.tmpOut[ChartTag,TypeI])*(8/ifaceInfo.nSpeed);
xFL:= (ifaceInfo.BIn - TempInfo.tmpIn[ChartTag,TypeI]+ ifaceInfo.BOut-TempInfo.tmpOut[ChartTag,TypeI])*(4/ifaceInfo.NSpeed);
end;
packetsOut := (xOut)*100;
packetsIn := (xIn)*100;
packetsFL := (xFL)*100;
tempInfo.tmpIn[ChartTag,TypeI] := ifaceInfo.BIn;
tempInfo.tmpOut[ChartTag,TypeI] := ifaceInfo.BOut;
end;
// save new base
{tempInfo.tmpIn[ChartTag,TypeI] := ifaceInfo.BIn;
tempInfo.tmpOut[ChartTag,TypeI] := ifaceInfo.BOut;
tempInfo.tmpPubIn[ChartTag,TypeI] := IfaceInfo.PubIn;
tempInfo.tmpPbin[ChartTag,TypeI] := IfaceInfo.pBin ;
tempInfo.tmpPubOut[ChartTag,TypeI]:= IfaceInfo.PubOut;
tempInfo.tmpPbOut[ChartTag,TypeI] := IfaceInfo.PbOut; }
end;
//==============================================================================
// 可以刷新的函数
// 参数: iFaceInfo:TiFaceInfo; -- 传入的结构(接口信息)
// Typei:integer; 0 : outIn 2条Seiros(曲线)
// 1 : Borst 2条Seiros(曲线)
// 2 : netFL 3条Seiros(曲线)
// Chart1: 传入的,传出的 TChart
//==============================================================================
procedure TimerOnTime(iFaceInfo:TiFaceInfo;Typei:integer;var Chart1:TChart);
Var
i : Integer;
begin
// shift all values left
if p[Chart1.Tag]>=MaxVal then
begin
Move(dataOut[Chart1.tag,1], dataOut[Chart1.tag,0], MaxVal*sizeOf(Double));
Move(dataIn[Chart1.tag,1], dataIn[Chart1.tag,0], MaxVal*sizeOf(Double));
if TypeI=2 then
Move(dataFL[Chart1.tag,1], dataFL[Chart1.tag,0], MaxVal*sizeOf(Double));
end;
// latest value
getMAXpackInout(iFaceInfo,TypeI,Chart1.tag,dataIn[Chart1.tag,P[Chart1.tag]], dataOut[Chart1.tag,P[Chart1.tag]],dataFL[Chart1.tag,p[Chart1.tag]]);
// display all values
for i := 0 to MaxVal do begin
Chart1.SeriesList.Series[0].YValue[i] := dataOut[Chart1.tag,i];
Chart1.SeriesList.Series[1].YValue[i] := dataIn[Chart1.tag,i];
if TypeI=2 then
CHart1.SeriesList.Series[2].YValue[i] := DataFL[Chart1.tag,i];
end;
if p[Chart1.Tag]<MaxVal then inc(P[Chart1.Tag]);
end;
//==============================================================================
//
//==============================================================================
procedure initTempStru(CardI,TypeI:Integer);
begin
tempInfo.tmpIn[CardI,typeI]:=0;
tempInfo.tmpOut[CardI,TypeI]:=0;
tempInfo.tmpFL[CardI,TypeI]:=0;
tempInfo.tmpPBin[CardI,TypeI]:=0;
tempInfo.tmpPubIn[CardI,TypeI]:=0;
tempInfo.tmpPbOut[CardI,TypeI]:=0;
tempInfo.tmpPubOut[CardI,TypeI]:=0;
end;
//*************************************************************************************
//
//*************************************************************************************
//------------------------------------------------------------------------------
// NameType 0 -- iDriverDesc
// 1--iConnName
// 2 -- iIpAddress
// iIPMask = 3; // Ip's netMask
//------------------------------------------------------------------------------
function newGetIfaceInfo(StrID:String):String;
const
NetWorkReg ='SYSTEM\CurrentControlSet\Control\Network\';
DevInfoReg ='SYSTEM\CurrentControlSet\Enum\';
IPAddreReg ='SYSTEM\CurrentControlSet\Services\';
var
Reg:TRegistry;
DevList,IfaceList :TStringList;
RegPath ,RegPath1:String;
IfaceName,InstanceID,tmpStr :String;
i,c:integer;
S:Array[0..15*128] of Char;
IPList:TStrings;
DHCPFlag:Boolean;
begin
try
DHCPFlag:=False;
Result:='';
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
DevList :=TStringList.Create;
IfaceList := TStringList.Create;
IpList := TStringList.Create;
try
reg.OpenKeyReadOnly(NetWorkReg);
reg.GetKeyNames(DevList);
for i:= 0 to DevList.Count -1 do
begin
RegPath := NetWorkReg + DevList.Strings[i];
Reg.CloseKey;
if not Reg.OpenKey(RegPath,false) then Continue;
tmpStr := Reg.ReadString('Class');
if Reg.ValueExists('Class') then
begin
IfaceName := Reg.ReadString('Class');
if AnsiCompareText(ifaceName,'Net') = 0 then break;
end;
end;
if i < DevList.Count then //有网卡
begin
try
Reg.GetKeyNames(IfaceList);
if (IfaceList.Count = 0 ) then
begin
Result := StrID; Exit;
end;
RegPath1 := RegPath + '\' + StrID + '\Connection' ;
Reg.CloseKey ;
if not Reg.OpenKey(RegPath1,false) then
begin
Result:=StrID; Exit;
end;
IfaceName := Reg.ReadString('Name');
Result:=IFaceName
except
Result:=StrID;
end;
end
else
begin
Result := StrID; Exit;
end;
except
Result := StrID;
end;
finally
IpList.free;
DevList.Free;
IfaceList.Free;
Reg.closeKey;
Reg.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -