home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 February / PCWorld_1999-02_cd.bin / temacd / HotKeys / hkList.pas < prev    next >
Pascal/Delphi Source File  |  1998-10-20  |  4KB  |  159 lines

  1. unit hkList;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ComCtrls, ExtCtrls, IniFiles;
  8.  
  9. type
  10.   TfrmHotkeyList = class(TForm)
  11.     pnlHotkeys: TPanel;
  12.     lvHotkeys: TListView;
  13.     procedure FormShow(Sender: TObject);
  14.     procedure FormCreate(Sender: TObject);
  15.     procedure FormDestroy(Sender: TObject);
  16.     procedure lvHotkeysDblClick(Sender: TObject);
  17.     procedure lvHotkeysKeyPress(Sender: TObject; var Key: Char);
  18.   private
  19.     procedure PerformHotkey;
  20.   public
  21.     procedure ReadHotkeys;
  22.     { Public declarations }
  23.   end;
  24.  
  25. var
  26.   frmHotkeyList: TfrmHotkeyList;
  27.  
  28. implementation
  29.  
  30. uses hkEdit;
  31.  
  32. {$R *.DFM}
  33.  
  34. procedure TfrmHotkeyList.ReadHotkeys;
  35. var
  36.   Stream   : TFileStream;
  37.   Reader   : TReader;
  38.   Index    : Integer;
  39.   Active   : Boolean;
  40.   Descript,
  41.   ID,
  42.   Action,
  43.   Command,
  44.   Hotkey   : String;
  45.   sVersion : String;
  46.   iVersion : Integer;
  47.   iIndex   : Integer;
  48. begin
  49.   try
  50.     Stream := TFileStream.Create(ChangeFileExt(Application.ExeName, '.hkd'), fmOpenRead);
  51.     try
  52.       Reader := TReader.Create(Stream, 4096);
  53.       try
  54.         lvHotkeys.Items.Clear;
  55.         sVersion := Reader.ReadString;
  56.         iVersion := 120;
  57.         if sVersion = 'Hotkey definitions, version 1.0' then iVersion := 100;
  58.         if sVersion = 'Hotkey definitions, version 1.05' then iVersion := 105;
  59.         Reader.ReadListBegin;
  60.         iIndex := 0;
  61.         while not Reader.EndOfList do
  62.          begin
  63.            Descript := Reader.ReadString;
  64.            if (iVersion=100) then ID := MakeID(lvHotkeys, nil, Descript) else ID := Reader.ReadString;
  65.            Index    := Reader.ReadInteger;
  66.            if (iVersion=100) and (Index>1) then inc(Index);
  67.            Action   := frmHotkeyEdit.cboActions.Items[Index];
  68.            case Index of
  69.              0, 1, 2: Command := Reader.ReadString;
  70.              3      : Command := frmHotkeyEdit.cboParams.Items[Reader.ReadInteger];
  71.              10     : Command := frmHotkeyEdit.cboClipboard.Items[Reader.ReadInteger];
  72.              else     Command := '';
  73.            end;
  74.            Hotkey := frmHotkeyEdit.ReadHotkey(Reader);
  75.            Active := Reader.ReadBoolean;
  76.            if (Index=0) and (iVersion=120) then Reader.ReadString; // showmode
  77.            if Active then
  78.             begin
  79.               with lvHotkeys.Items.Add do
  80.                begin
  81.                  Caption := Descript;
  82.                  SubItems.Add(ID);
  83.                  SubItems.Add(Action);
  84.                  SubItems.Add(Command);
  85.                  SubItems.Add(Hotkey);
  86.                  SubItems.Add(IntToStr(iIndex));
  87.                  inc(iIndex);
  88.                end;
  89.             end;
  90.          end;
  91.         Reader.ReadListEnd;
  92.       finally
  93.         Reader.Free;
  94.       end;
  95.     finally
  96.       Stream.Free;
  97.     end;
  98.   except
  99.   end;
  100. end;
  101.  
  102. procedure TfrmHotkeyList.FormShow(Sender: TObject);
  103. begin
  104.   SetWindowPos(Application.Handle, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_HIDEWINDOW);
  105.   ReadHotkeys;
  106. end;
  107.  
  108. procedure TfrmHotkeyList.FormCreate(Sender: TObject);
  109. var
  110.   i : integer;
  111. begin
  112.   with TInifile.Create(ChangeFileExt(Application.ExeName, '.ini')) do
  113.    begin
  114.      Width := ReadInteger('ViewWindow', 'Width', Width);
  115.      Height := ReadInteger('ViewWindow', 'Height',  Height);
  116.      for i:=0 to lvHotkeys.Columns.Count-1 do
  117.       with lvHotkeys.Columns[i] do
  118.        Width := ReadInteger('VWColumns', Caption, Width);
  119.      Free;
  120.    end;
  121. end;
  122.  
  123. procedure TfrmHotkeyList.FormDestroy(Sender: TObject);
  124. var
  125.   i : integer;
  126. begin
  127.   with TInifile.Create(ChangeFileExt(Application.ExeName, '.ini')) do
  128.    begin
  129.      WriteInteger('ViewWindow', 'Width', Width);
  130.      WriteInteger('ViewWindow', 'Height',  Height);
  131.      for i:=0 to lvHotkeys.Columns.Count-1 do
  132.       with lvHotkeys.Columns[i] do
  133.        WriteInteger('VWColumns', Caption, Width);
  134.      Free;
  135.    end;
  136. end;
  137.  
  138. procedure TfrmHotkeyList.PerformHotkey;
  139. begin
  140.   if lvHotkeys.Selected<>nil then
  141.    frmHotkeyEdit.HotkeyPressed(StrToInt(lvHotkeys.Selected.SubItems[ITEM_ACTIVE]));
  142. end;
  143.  
  144. procedure TfrmHotkeyList.lvHotkeysDblClick(Sender: TObject);
  145. begin
  146.   PerformHotkey;
  147. end;
  148.  
  149. procedure TfrmHotkeyList.lvHotkeysKeyPress(Sender: TObject; var Key: Char);
  150. begin
  151.   if Key=#13 then
  152.    begin
  153.      Key := #0;
  154.      PerformHotkey;
  155.    end;
  156. end;
  157.  
  158. end.
  159.