////默认脚本  object pascal 语言编写
////作者: Holy
////创建时间: 2006-6
                        
//插件初始化函数   用于资源和图片的载入等初始化
procedure Init;
begin
  //设置整个widget插件的宽度和高度
  widgetWidth := 100;
  widgetHeight := 100;

  //设置背景图片的坐标
  BackgroundLeft := 0;
  BackgroundTop := 0;

  //从配置文件中载入设置网络设备序号
  xStr[1000] := LoadIni('NetAdaptIndex',1);

  //载入图片控件,文字控件,按钮控件,图片资源等等
  AddImage(0,WidgetPath+'Default.png');

  widgetWidth := getimageintegerpro(0,'width');
  widgetHeight := getimageintegerpro(0,'height');

  AddImage(1,WidgetPath+'in.png');
  AddImage(2,WidgetPath+'out.png');
  SetImagePro('1','left','55');
  SetImagePro('1','top','151');
  SetImagePro('2','left','55');
  SetImagePro('2','top','171');


  //添加时间文字
  AddLabel(0,'88:88:88');
  SetLabelPro(0,'fontStr','clWhite/-12/Digital/25/1000');
  SetLabelPro(0,'alpha','160');
  SetLabelPro(0,'left','15');
  SetLabelPro(0,'top','198');
  SetLabelPro(0,'AutoSize','true');
  SetLabelPro(0,'privatefont','true');
  SetLabelPro(0,'privatefontfilename',WidgetPath+'digital.ttf');


  //添加日期文字
  AddLabel(1,formatDateTime('yyyy年m月d日',date));
  SetLabelPro(1,'fontStr','clWhite/-12/黑体/8/1000');
  SetLabelPro(1,'alpha','180');
  SetLabelPro(1,'autosize','false');
  SetLabelPro(1,'left','-2');
  SetLabelPro(1,'top','235');
  SetLabelPro(1,'width','139');
  SetLabelPro(1,'align','1');

  //添加cpu占用率文字
  AddLabel(2,'0%');
  SetLabelPro(2,'fontStr','clWhite/-12/arial Black/8/0000');
  SetLabelPro(2,'alpha','122');
  SetLabelPro(2,'autosize','false');
  SetLabelPro(2,'left','54');
  SetLabelPro(2,'top','12');
  SetLabelPro(2,'width','50');
  SetLabelPro(2,'align','2');

  //添加内存占用率文字
  AddLabel(3,'0%');
  SetLabelPro(3,'fontStr','clWhite/-12/arial Black/8/0000');
  SetLabelPro(3,'alpha','122');
  SetLabelPro(3,'autosize','false');
  SetLabelPro(3,'left','54');
  SetLabelPro(3,'top','76');
  SetLabelPro(3,'width','50');
  SetLabelPro(3,'align','2');

  //添加CPU使用率图表
  AddChart(0);
  SetChartPro(0,'style','1');
  SetChartPro(0,'left','14');
  SetChartPro(0,'top','34');
  SetChartPro(0,'width','106');
  SetChartPro(0,'height','36');
  SetChartPro(0,'alpha','100');
  SetChartPro(0,'space','1');
  SetChartPro(0,'color','111,255,147');

  //添加内存使用率图表
  AddChart(1);
  SetChartPro(1,'style','1');
  SetChartPro(1,'left','14');
  SetChartPro(1,'top','97');
  SetChartPro(1,'width','106');
  SetChartPro(1,'height','25');
  SetChartPro(1,'alpha','140');
  SetChartPro(1,'space','1');
  SetChartPro(1,'color','135,130,89');

  //添加资源图片
  LoadPicResource(0,widgetpath+'mask1.png');
  LoadPicResource(1,widgetpath+'mask2.png');


  //设置自定义菜单
  nCustMenu0.Visible := true;
  nCustMenu0.Caption := '设置网络设备';

  nCustMenu1.Visible := true;
  nCustMenu1.Caption := '-';


end;

//画widget整个外观的函数
procedure OnDrawWidget;
begin
  //可以在这里添加任何对widget外观的绘制代码.


  //系统自绘所有widget控件的函数. 如果不调用此函数将不会显示所有图片/文字/按钮控件
  InheritDrawWidget;


  DrawImage(0,10,30);
  DrawImage(1,10,93);

  //可以在这里添加任何对widget外观的绘制代码
  {......}
end;

//启动插件事件
procedure StartWidget;
begin
  //可以在这里添加在启动widget时需要做的一些事情的代码.例如启动定时器
  {......}
  SetTimer(0,1000,true); // 将序号为0的定时器启动,间隔时间1000毫秒

end;

//双击widget事件
procedure OnDBClickWidget;
begin
  //当widget被双击时,这里添加的代码将被执行
  //用命令打开系统自带任务管理器
  RunCmd('taskmgr.exe');

end;


//定时器每到预定时间时执行此函数代码,index为定时器序号
procedure OnTimer(index);
var
  netin,netout;
  cpu,mem ;
begin
  Case index of
    0:
    begin
      //当序号为 0 的定时器到预定时间时,这里添加的代码将被执行
      cpu := GetCpuUsage;
      mem :=  GetMemory(8);

      SetLabelPro(0,'text',formatDateTime('hh:nn:ss',now));
      SetLabelPro(1,'text',formatDateTime('yyyy年m月d日',date));
      SetLabelPro(2,'text',inttostr(cpu)+'%');
      SetLabelPro(3,'text',inttostr(mem)+'%');

      GetNetSpeed(netin,netout);
      SetImagePro('1','srcWidth', round( -(1-netin/NetInSpeedMax)*60  ) );
      SetImagePro('2','srcWidth', round( -(1-netout/NetOutSpeedMax)*60  ) );

      ChartAddItem(0,cpu);
      ChartAddItem(1,mem);

      RefreshWidget;
    end;
    1:
      begin
      //当序号为 1 的定时器到预定时间时,这里添加的代码将被执行
      //以下依次类推,可以自行添加序号.最多可以有11个定时器,序号最多到10
      {......}

      end;
    end;
end;

Procedure SetNetAdaptForm;
begin
  fm1 := TForm.CreateForm;
  fm1.Caption := '设置监控的网络设备';
  fm1.Width := 410;
  fm1.Height := 150;
  fm1.BorderStyle := bsToolWindow;
  fm1.Position := poDesktopCenter;
  fm1.font.name := '宋体';
  fm1.font.size := 9;

  lb0 := TLabel.Create( fm1 );
  lb0.Parent := fm1;
  lb0.Left := 16;
  lb0.Top := 20;
  lb0.Caption := '请选择需要监控的网络设备:';


  lb1 := TLabel.Create( fm1 );
  lb1.Parent := fm1;
  lb1.Left := 16;
  lb1.Top := 38;
  lb1.Caption := '(拨号上网的请选择PPP类设备,局域网上网的请选择EntherNet网卡设备)';


  comb := TComboBox.Create( fm1 );
  comb.Parent := fm1;
  comb.Left := 16;
  comb.Top := 58;
  comb.width := 375;
  comb.style := 2;  //csDropDownList
  For i:=0 to NetAdaptCount-1 do
    //将系统中安装的所有网络设备列出来
    comb.items.add(GetNetAdaptName(i));
  comb.ItemIndex := StrToIntDef(xStr[1000],0)-1;

  bt3 := TBitBtn.Create( fm1 );
  bt3.Parent := fm1;
  bt3.Left := 232;
  bt3.Top :=  95;
  bt3.onclick := 'btclick2';
  bt3.ModalResult := mrOk;
  bt3.caption := '确定';

  bt4 := TBitBtn.Create( fm1 );
  bt4.Parent := fm1;
  bt4.Left := 315;
  bt4.Top :=  95;
  bt4.ModalResult := mrCancel;
  bt4.caption := '取消';

  line2 := TBevel.Create( fm1 );
  line2.Parent := fm1;
  line2.Left := 0;
  line2.Top := 85;
  line2.width := 420;
  line2.shape := 2;
  /////////////////////////////////////
  if fm1.ShowModal = mrOk then
  begin
    NetAdaptIndex := comb.ItemIndex + 1;
    xStr[1000] := inttostr(comb.ItemIndex + 1);
    SaveIni('NetAdaptIndex',xStr[1000]);
    SaveDefIni('NetAdaptIndex',xStr[1000]);
    Reloadwidget;
  end;
  fm1.free
end;

procedure btclick2(Sender);
begin
  Sender.ModalResult := mrOK;
end;

//当自定义菜单被点击时,这里添加的代码将被执行
//index为自定义菜单的序号（0－8）
procedure OnCustomMenuClick(index);
begin
  Case index of
    0:
      begin
      //当序号为 0 的自定义菜单被点击时,这里添加的代码将被执行
      //以下依次类推,0至8号,可以自行添加对应序号的响应代码
      //  showmessage('第一个自定义菜单被点击哦！');
        SetNetAdaptForm;

      end;
    1:
      begin

      end;
    end;
end;


//当widget保存配置信息的时候触发此事件,并执行此函数内代码.
procedure OnSaveIni;
begin
  //如果自定义了某些变量,请在这里将自定义的配置信息保存
  //SaveIni(name,value);
    SaveIni('NetAdaptIndex',xStr[1000]);
end;

//当widget保存默认配置信息的时候触发此事件,并执行此函数内代码.
procedure OnSaveDefIni;
begin
  //如果自定义了某些变量,可以在这里将自定义的配置信息写入默认ini文件,以便克隆新建的插件沿用此配置
  //SaveDefIni(name,value);
    SaveDefIni('NetAdaptIndex',xStr[1000]);

end;


