home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / zkuste / delphi / kompon / d56 / MSYSINFO.ZIP / Demos / GUI / PL.pas < prev    next >
Pascal/Delphi Source File  |  2001-07-23  |  4KB  |  137 lines

  1. {$I MITEC_DEF.INC}
  2.  
  3. unit PL;
  4.  
  5. interface
  6.  
  7. uses
  8.   {$IFDEF D6PLUS} Variants, {$ENDIF}
  9.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  10.   StdCtrls, ComCtrls, ExtCtrls;
  11.  
  12. type
  13.   TfrmPerfLib = class(TForm)
  14.     Panel1: TPanel;
  15.     Panel2: TPanel;
  16.     Splitter1: TSplitter;
  17.     Tree: TTreeView;
  18.     Box: TListBox;
  19.     sb: TStatusBar;
  20.     Panel4: TPanel;
  21.     Panel6: TPanel;
  22.     Timer: TTimer;
  23.     procedure TreeChange(Sender: TObject; Node: TTreeNode);
  24.     procedure TreeDblClick(Sender: TObject);
  25.     procedure TimerTimer(Sender: TObject);
  26.   private
  27.     PerfLib: TObject;
  28.   public
  29.     procedure Refresh;
  30.   end;
  31.  
  32. var
  33.   frmPerfLib: TfrmPerfLib;
  34.  
  35. implementation
  36.  
  37. uses MiTeC_Routines, MiTeC_PerfLib9x, MiTeC_PerfLibNT, CP;
  38.  
  39. {$R *.DFM}
  40.  
  41. { TfrmPerfLib }
  42.  
  43. procedure TfrmPerfLib.Refresh;
  44. var
  45.   szObj, szCtr: string;
  46.   i,j,k: integer;
  47.   Child, Root: TTreeNode;
  48. begin
  49.   Screen.Cursor:=crHourGlass;
  50.   if IsNT then begin
  51.     PerfLib:=TPerfLibNT.Create;
  52.     with TPerfLibNT(PerfLib) do begin
  53.       Refresh;
  54.       sb.Panels[0].Text:=Format('Performance Library %d.%d',[Version, Revision]);
  55.       for i:=0 to ObjectCount-1 do begin
  56.         Root:=Tree.Items.Add(nil,Objects[i].Name);
  57.         for j:=0 to Objects[i].CounterCount-1 do
  58.           Child:=Tree.Items.AddChild(Root,Objects[i].Counters[j].Name);
  59.       end;
  60.     end;
  61.   end else
  62.     if IsOSR2 or Is98 or IsME then begin
  63.       PerfLib:=TPerfLib9x.Create;
  64.       with TPerfLib9x(PerfLib) do begin
  65.         Open;
  66.         for i:=Names.Count-1 downto 0 do begin
  67.           k:=Pos('\',Names[i]);
  68.           if k>0 then begin
  69.             szObj:=Copy(Names[i],1,k-1);
  70.             szCtr:=Copy(Names[i],k+1,255);
  71.           end;
  72.           Root:=Tree.Items.GetFirstNode;
  73.           while Assigned(Root) do
  74.             if Root.Text=szObj then
  75.               Break
  76.             else
  77.               Root:=Root.GetNextSibling;
  78.           if not Assigned(Root) then
  79.             Root:=Tree.Items.Add(nil,szObj);
  80.           if szCtr<>'' then
  81.             Child:=Tree.Items.AddChild(Root,szCtr);
  82.         end;
  83.       end;
  84.     end;
  85.   Screen.Cursor:=crDefault;
  86. end;
  87.  
  88. procedure TfrmPerfLib.TreeChange(Sender: TObject; Node: TTreeNode);
  89. var
  90.   i,oi,ci: integer;
  91.   s: string;
  92. begin
  93.   if Assigned(Node) then begin
  94.     Box.Items.Clear;
  95.     if IsNT then begin
  96.       TPerfLibNT(PerfLib).TakeSnapShot;
  97.       if Assigned(Node.Parent) then
  98.         oi:=TPerfLibNT(PerfLib).GetIndexByName(Node.Parent.Text)
  99.       else
  100.         oi:=TPerfLibNT(PerfLib).GetIndexByName(Node.Text);
  101.       if Assigned(Node.Parent) then
  102.         s:=TPerfLibNT(PerfLib).Objects[oi].Counters[ci].DataStrEx[0]
  103.       else
  104.         s:='';
  105.       if TPerfLibNT(PerfLib).Objects[oi].InstanceCount>0 then begin
  106.         for i:=0 to TPerfLibNT(PerfLib).Objects[oi].InstanceCount-1 do begin
  107.           s:=TPerfLibNT(PerfLib).Objects[oi].Instances[i].Name;
  108.           if Assigned(Node.Parent) then begin
  109.             ci:=TPerfLibNT(PerfLib).Objects[oi].GetCntrIndexByName(Node.Text);
  110.             s:=s+' = '+TPerfLibNT(PerfLib).Objects[oi].Counters[ci].DataStrEx[i];
  111.           end;
  112.           Box.Items.Add(s);
  113.         end;
  114.       end else
  115.         Box.Items.Add(s);
  116.     end else begin
  117.       if Assigned(Node.Parent) then
  118.         Box.Items.Add(Format('%d',[TPerfLib9x(PerfLib).SysData[Node.Parent.Text+'\'+Node.Text]]));
  119.     end;
  120.   end;
  121. end;
  122.  
  123. procedure TfrmPerfLib.TreeDblClick(Sender: TObject);
  124. begin
  125.   if Assigned(Tree.Selected.Parent) then
  126.     ShowPropsDlg(PerfLib,VarArrayOf([Tree.Selected.Text,Tree.Selected.Parent.Text]))
  127.   else
  128.     ShowPropsDlg(PerfLib,Tree.Selected.Text);
  129. end;
  130.  
  131. procedure TfrmPerfLib.TimerTimer(Sender: TObject);
  132. begin
  133.   TreeChange(Tree,Tree.Selected);
  134. end;
  135.  
  136. end.
  137.