home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 February / Chip_2004-02_cd1.bin / zkuste / konfig / download / msic / Demos / 4 / Main.pas < prev    next >
Pascal/Delphi Source File  |  2003-06-03  |  5KB  |  186 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, ComCtrls, ImgList, MiTeC_USB, MSI_USB, ExtCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     bRefresh: TButton;
  12.     Tree: TTreeView;
  13.     ilUSB: TImageList;
  14.     bClose: TButton;
  15.     Label1: TLabel;
  16.     eName: TEdit;
  17.     Label2: TLabel;
  18.     eKey: TEdit;
  19.     Bevel1: TBevel;
  20.     bSave: TButton;
  21.     sd: TSaveDialog;
  22.     pTitle: TPanel;
  23.     Image1: TImage;
  24.     procedure FormCreate(Sender: TObject);
  25.     procedure bRefreshClick(Sender: TObject);
  26.     procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
  27.     procedure TreeCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;
  28.       State: TCustomDrawState; var DefaultDraw: Boolean);
  29.     procedure bCloseClick(Sender: TObject);
  30.     procedure TreeChange(Sender: TObject; Node: TTreeNode);
  31.     procedure cmSave(Sender: TObject);
  32.   private
  33.     USB: TUSB;
  34.     function FindNode(AIndex: Integer): TTreeNode;
  35.   public
  36.     procedure RefreshData;
  37.   end;
  38.  
  39. var
  40.   Form1: TForm1;
  41.  
  42. implementation
  43.  
  44. {$R *.dfm}
  45.  
  46. procedure TForm1.RefreshData;
  47. var
  48.   ii,i: Integer;
  49.   s: string;
  50.   pi: PInteger;
  51.   r,n: TTreeNode;
  52. begin
  53.   USB.GetInfo;
  54.   pTitle.Caption:=Format('              %d connected device(s)',[USB.ConnectedDevices]);
  55.   Tree.Items.Clear;
  56.   for i:=0 to USB.USBNodeCount-1 do
  57.     with USB.USBNodes[i] do begin
  58.       s:='';
  59.       ii:=Integer(USBClass);
  60.       case USBClass of
  61.         usbHostController: s:=s+Format('%s %d',[ClassNames[Integer(USBClass)],USBDevice.Port]);
  62.         usbHub: s:=s+ClassNames[Integer(USBClass)];
  63.         else begin
  64.           if USBDevice.ConnectionStatus=1 then begin
  65.             if USBClass=usbExternalHub then
  66.               s:=s+Format('Port[%d]: %s',[USBDevice.Port,ClassNames[Integer(USBClass)]])
  67.             else
  68.               s:=s+Format('Port[%d]: %s',[USBDevice.Port,USBDevice.Product]);
  69.           end else begin
  70.             s:=s+Format('Port[%d]: %s',[USBDevice.Port,ConnectionStates[USBDevice.ConnectionStatus]]);
  71.             ii:=13;
  72.           end;
  73.         end;
  74.       end;
  75.       r:=FindNode(ParentIndex);
  76.       new(pi);
  77.       pi^:=i;
  78.       n:=Tree.Items.AddChildObject(r,s,pi);
  79.       n.ImageIndex:=ii;
  80.       n.SelectedIndex:=n.ImageIndex;
  81.       if Assigned(r) then
  82.         r.Expand(False);
  83.       r:=n;
  84.       if (USBClass in [usbReserved..usbStorage,usbVendorSpec,usbError]) and (USBDevice.ConnectionStatus=1) then begin
  85.         ii:=15;
  86.         n:=Tree.Items.AddChild(r,Format('Class: %s',[ClassNames[Integer(USBClass)]]));
  87.         n.ImageIndex:=ii;
  88.         n.SelectedIndex:=n.ImageIndex;
  89.         n:=Tree.Items.AddChild(r,Format('Manufacturer: %s',[USBDevice.Manufacturer]));
  90.         n.ImageIndex:=ii;
  91.         n.SelectedIndex:=n.ImageIndex;
  92.         n:=Tree.Items.AddChild(r,Format('Serial: %s',[USBDevice.Serial]));
  93.         n.ImageIndex:=ii;
  94.         n.SelectedIndex:=n.ImageIndex;
  95.         n:=Tree.Items.AddChild(r,Format('Power consumption: %d mA',[USBDevice.MaxPower]));
  96.         n.ImageIndex:=ii;
  97.         n.SelectedIndex:=n.ImageIndex;
  98.         n:=Tree.Items.AddChild(r,Format('Specification version: %d.%d',[USBDevice.MajorVersion,USBDevice.MinorVersion]));
  99.         n.ImageIndex:=ii;
  100.         n.SelectedIndex:=n.ImageIndex;
  101.       end;
  102.     end;
  103. end;
  104.  
  105. procedure TForm1.FormCreate(Sender: TObject);
  106. begin
  107.   USB:=TUSB.Create;
  108.   RefreshData;
  109. end;
  110.  
  111. procedure TForm1.bRefreshClick(Sender: TObject);
  112. begin
  113.   RefreshData;
  114.   Tree.SetFocus;
  115. end;
  116.  
  117. function TForm1.FindNode(AIndex: Integer): TTreeNode;
  118. var
  119.   n: TTreeNode;
  120. begin
  121.   Result:=nil;
  122.   n:=Tree.Items.GetFirstNode;
  123.   while Assigned(n) do begin
  124.  
  125.     if Assigned(n.Data) and (PInteger(n.Data)^=AIndex) then begin
  126.       Result:=n;
  127.       Break;
  128.     end;
  129.     n:=n.GetNext;
  130.   end;
  131. end;
  132.  
  133. procedure TForm1.TreeDeletion(Sender: TObject; Node: TTreeNode);
  134. begin
  135.   if Assigned(Node.Data) then
  136.     Dispose(PInteger(Node.Data));
  137. end;
  138.  
  139. procedure TForm1.TreeCustomDrawItem(Sender: TCustomTreeView;
  140.   Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
  141. var
  142.   n: TUSBNode;
  143. begin
  144.   if Assigned(Node) then begin
  145.     if Assigned(Node.data) then begin
  146.       n:=USB.USBNodes[PInteger(Node.Data)^];
  147.       if n.USBClass in [usbReserved..usbStorage,usbVendorSpec,usbError] then begin
  148.         if n.USBDevice.ConnectionStatus=1 then
  149.           Sender.Canvas.Font.Style:=[fsBold];
  150.       end;
  151.     end else begin
  152.       if cdsselected in State then
  153.         Sender.Canvas.Font.Color:=clWhite
  154.       else
  155.         Sender.Canvas.Font.Color:=clNavy;
  156.     end;
  157.   end;
  158. end;
  159.  
  160. procedure TForm1.bCloseClick(Sender: TObject);
  161. begin
  162.   Close;
  163. end;
  164.  
  165. procedure TForm1.TreeChange(Sender: TObject; Node: TTreeNode);
  166. begin
  167.   if Assigned(Node) and Assigned(Node.Data) then begin
  168.     eName.Text:=USB.USBNodes[PInteger(Node.Data)^].connectionname;
  169.     eKey.Text:=USB.USBNodes[PInteger(Node.Data)^].keyname;
  170.   end;
  171. end;
  172.  
  173. procedure TForm1.cmSave(Sender: TObject);
  174. var
  175.   sl: TStringList;
  176. begin
  177.   sl:=TStringList.Create;
  178.   if sd.Execute then begin
  179.     USB.Report(sl,True);
  180.     sl.SaveToFile(sd.FileName);
  181.   end;
  182.   sl.Free;
  183. end;
  184.  
  185. end.
  186.