home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / delphi / kompon / d45 / OPTIONS.ZIP / Units / FlagsEditor.pas < prev    next >
Pascal/Delphi Source File  |  2002-06-06  |  2KB  |  80 lines

  1. unit FlagsEditor;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, CheckLst;
  8.  
  9. type
  10.   TfrmFlagsEditor = class(TForm)
  11.     clbFlags: TCheckListBox;
  12.     btnAdd: TButton;
  13.     btnDelete: TButton;
  14.     btnOK: TButton;
  15.     btnCancel: TButton;
  16.     lblCount: TLabel;
  17.     procedure FormShow(Sender: TObject);
  18.     procedure btnAddClick(Sender: TObject);
  19.     procedure btnDeleteClick(Sender: TObject);
  20.   private
  21.     procedure DispCount;
  22.   public
  23.     OptName: string;
  24.     function FlagName(i: integer): string;
  25.   end;
  26.  
  27. implementation
  28.  
  29. {$R *.DFM}
  30.  
  31. { TfrmFlagsEditor }
  32.  
  33. procedure TfrmFlagsEditor.DispCount;
  34. begin
  35.   lblCount.Caption := Format('%d items', [clbFlags.Items.Count]);
  36. end;
  37.  
  38. procedure TfrmFlagsEditor.FormShow(Sender: TObject);
  39. begin
  40.   DispCount;
  41. end;
  42.  
  43. function TfrmFlagsEditor.FlagName(i: integer): string;
  44. begin
  45.   result := Format('%s.DefAsFlags[%d]', [OptName, i])
  46. end;
  47.  
  48. procedure TfrmFlagsEditor.btnAddClick(Sender: TObject);
  49. begin
  50.   with clbFlags.Items do
  51.     Add(FlagName(Count + 1));
  52.   DispCount;
  53. end;
  54.  
  55. procedure TfrmFlagsEditor.btnDeleteClick(Sender: TObject);
  56. var
  57.   i: integer;
  58.   s: string;
  59. begin
  60.   with clbFlags do begin
  61.     if ItemIndex < 0 then
  62.       Exit;
  63.     s := '';
  64.     for i := 0 to Items.Count - 1 do
  65.       if i <> ItemIndex then
  66.         s := s + Chr(Ord(Checked[i]) + 48);
  67.     Items.BeginUpdate;
  68.     Items.Delete(ItemIndex);
  69.     for i := 0 to Items.Count - 1 do begin
  70.       Items[i] := FlagName(i + 1);
  71.       Checked[i] := s[i + 1] = '1';
  72.     end;
  73.     Items.EndUpdate;
  74.   end;
  75.   DispCount;
  76. end;
  77.  
  78. end.
  79.  
  80.