Glen Morse
Glen Morse

Reputation: 2593

creating checkbox

I am trying to create a few checkboxes, how many is decided by the recordcount of a query. Also i need to set the loction of the check box +38 from the previous location. Anyone give me some help with this? not sure how to create the checkboxes, The rest i should be able to do...anyhow he is what i have so far.

var
  i, top,left : integer;
begin
......
    left := 81;
    top := 119;
    while i < qry.RecordCount do
                  begin
                    // create check box
                    // set caption of checkbox to i
                    // set checkbox loction to left + 38, top
                    // left = left+38??
                  end;

Upvotes: 1

Views: 4190

Answers (2)

jpfollenius
jpfollenius

Reputation: 16612

Your pseudo code translates almost literally into Delphi code although it's better to use a for loop here:

for I := 0 to qry.RecordCount-1 do
  begin
  CheckBox := TCheckBox.Create (Self);            // the form owns the checkbox
  CheckBox.Parent := Self;                        // checkbox is displayed on the form
  CheckBox.Caption := IntToStr (I);
  CheckBox.Top := Top;
  CheckBox.Left := 81 + I*38;
  end;

BTW, you don't have to free the created checkbox thanks to the ownership mechanism built into the VCL.

Upvotes: 5

TLama
TLama

Reputation: 76693

After clarifying your needs, I would recommend you to use TObjectList as a container for your check boxes. This list can own the objects, what allows you to release them by a simple removing the item from the list either by Clear or by Delete. It also provides a simple access to each element by typecasting the obtained indexed item object to your known class type. More in the following untested pseudo-code:

uses
  Contnrs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    CheckList: TObjectList;
  public
    { Public declarations }
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CheckList := TObjectList.Create;
  // setting OwnsObjects to True will ensure you, that the objects
  // stored in a list will be freed when you delete them from list
  CheckList.OwnsObjects := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // this will also release all check boxes thanks to OwnsObjects
  CheckList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  CheckBox: TCheckBox;
begin
  ...
  CheckList.Clear;                      // this will free all check boxes    
  for I := 0 to RecordCount - 1 do      // iterate over your recordset
  begin
    CheckBox := TCheckBox.Create(nil);  // be sure to use nil as an owner
    CheckBox.Parent := Self;            // where will be laying (Self = Form)
    CheckBox.Caption := IntToStr(I);    // caption by the iterator value
    CheckBox.Top := 8;                  // fixed top position
    CheckBox.Left := (I * 38) + 8;      // iterator value * 38 shifted by 8
    CheckBox.Width := 30;               // fixed width
    CheckList.Add(CheckBox);            // add the check box to the list
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // this will check the first check box from the list (be careful to indexes)
  TCheckBox(CheckList.Items[0]).Checked := True;
  // this will delete 3rd check box from the list (using Clear will delete all)
  CheckList.Delete(2);
end;

Upvotes: 6

Related Questions