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