TBits 直接继承自 TObject, 它只扩充出 2 个属性、1 个方法:
TBits.Size //需要使用的 "位" 数 TBits.Bits[] //默认的数组属性, 用于读写每个 "位"; 用 True 表示 1, 用 False 表示 0 TBits.OpenBit //获取第一个是 0 的 "位" 的位置
简单示例:
procedure TForm1.Button1Click(Sender: TObject); var bs: TBits; begin bs := TBits.Create; {使用前应该先设置 Size, 这是需要容纳的 "位" 的数目} bs.Size := 3; {赋值、取值都通过默认的数组属性 bs.Bits[]} bs[0] := True; bs[1] := False; bs[2] := True; ShowMessage(BoolToStr(bs[1], True)); {False} ShowMessage(BoolToStr(bs[2], True)); {True} {OpenBit 方法获取的是第一个是 0 的位置} ShowMessage(IntToStr(bs.OpenBit)); {1; 这表示是第二个位} bs.Free; end;
OpenBit 方法的主要用途 - 把第一个非 1 的 "位" 设置为 1:
var bs: TBits; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; fn: Integer; begin {初始化并赋随机值} bs.Size := 8; for i := 0 to bs.Size do bs[i] := Boolean(Random(2)); {把第一个非 1 的 "位" 设置为 1} fn := bs.OpenBit; if fn <= bs.Size then bs[fn] := True; end; initialization bs := TBits.Create; Randomize; finalization if Assigned(bs) then bs.Free; end.
用 TBits 实现前面的例子(窗体设计与测试效果同前):
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CheckLst; type TForm1 = class(TForm) CheckListBox1: TCheckListBox; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var bs: TBits; procedure TForm1.FormCreate(Sender: TObject); begin CheckListBox1.Items.CommaText := 'A,B,C,D,E,F,G,H'; Button1.Caption := '保存状态'; Button2.Caption := '恢复状态'; Button3.Caption := '全选'; Button4.Caption := '全不选'; Button1.Tag := 1; Button2.Tag := 2; Button3.Tag := 3; Button4.Tag := 4; Button2.OnClick := Button1.OnClick; Button3.OnClick := Button1.OnClick; Button4.OnClick := Button1.OnClick; end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to CheckListBox1.Count - 1 do case TButton(Sender).Tag of 1: bs[i] := CheckListBox1.Checked[i]; 2: CheckListBox1.Checked[i] := bs[i]; 3: CheckListBox1.Checked[i] := True; 4: CheckListBox1.Checked[i] := False; end; end; initialization bs := TBits.Create; finalization if Assigned(bs) then bs.Free; end.
Delphi 在下面单元的源码中都有 TBits 的应用:
Menus、Buttons、ComCtrls、DBClient、DBTables、DBCommon、DesignEditors