Mega Code Archive

 
Categories / Delphi / VCL
 

Using a ChecklistBox for bit manipulation

Title: Using a ChecklistBox for bit manipulation Question: Here is a easy way to display or manipulate all bit in a 32bit Integer/Cardinal Answer: Sometimes you want to see the bits in a Word in a convinient representation. Place a TCheckListBox component on your form. Add 32 Items (in this order) Bit 0 Bit 1 Bit 2 ... Bit 31 feel free to rename these items to give your bits a better description. use this procedure to set up the checklistbox: // procedure IntToCheckListBox(const Value:Cardinal; var clb:TCheckListBox); var i:Integer; begin for i:=0 to Max(clb.Items.Count-1, 31) do begin clb.Checked[i] := (Value and (1 shl i)) 0; end; end; Call the following function in the 'OnClick' or 'OnClickCheck' Event of the CheckListBox: function CheckListBoxToInt(const clb:TCheckListBox):Cardinal; var i:Integer; begin Result := 0; for i:=0 to Max(clb.Items.Count-1, 31) do begin if clb.Checked[i] then Result := Result or (1 shl i); end; end; Example: procedure TForm1.CheckListBox1Click(Sender: TObject); begin MyValue := CheckListBoxToInt(Sender As TCheckListBox); end; Don't forget to add the 'Math' unit to your uses clause. More than 32 bits ? These procedures does the convertion. procedure CheckListBoxToTBits(const clb:TCheckListBox; bits:TBits); var i:Integer; begin bits.Size := clb.Items.Count; for i:=0 to clb.Items.Count-1 do bits.Bits[i] := clb.Checked[i]; end; procedure TBitsToCheckListBox(const clb:TCheckListBox; bits:TBits); var i:Integer; begin for i:=0 to Max(clb.Items.Count, bits.Size)-1 do clb.Checked[i] := bits.Bits[i]; end;