Содержание материала

Автор: Joel E. Cant

 

Пример демонстрирует добавление любого количества чекбоксов в StringGrid. В этом примере необходимо добавить TPanel, а в саму панель включить TstringGrid. Так же необходимо добавить невидимый TcheckBox на форму. Затем добавьте 5 колонок и 4 строки в объект StringGrid.

 

Code:

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

ShowMessage('There it is!!');

end;

 

// Заполняем заголовок StringGrid

 

procedure TForm1.FormCreate(Sender: TObject);

begin

StringGrid1.Cells[0, 0] := 'A Simple';

StringGrid1.Cells[1, 0] := 'Way';

StringGrid1.Cells[2, 0] := 'To';

StringGrid1.Cells[3, 0] := 'Do It';

StringGrid1.Cells[4, 0] := 'Check !!';

 

AddCheckBoxes; // добавляем чекбоксы...

end;

 

procedure TForm1.AddCheckBoxes;

var

i: Integer;

NewCheckBox: TCheckBox;

begin

clean_previus_buffer; // очищаем неиспользуемые чекбоксы...

 

for i := 1 to 4 do

begin

   StringGrid1.Cells[0, i] := 'a';

   StringGrid1.Cells[1, i] := 'b';

   StringGrid1.Cells[2, i] := 'c';

   StringGrid1.Cells[3, i] := 'd';

 

   NewCheckBox := TCheckBox.Create(Application);

   NewCheckBox.Width := 0;

   NewCheckBox.Visible := false;

   NewCheckBox.Caption := 'OK';

   NewCheckBox.Color := clWindow;

   NewCheckBox.Tag := i;

   NewCheckBox.OnClick := CheckBox1.OnClick; // Связываем предыдущее событие OnClick

                                             // с существующим TCheckBox

   NewCheckBox.Parent := Panel1;

 

   StringGrid1.Objects[4, i] := NewCheckBox;

   StringGrid1.RowCount := i;

end;

set_checkbox_alignment; // расположение чекбоксов в ячейках таблицы...

end;

 

procedure TForm1.clean_previus_buffer;

var

NewCheckBox: TCheckBox;

i: Integer;

begin

for i := 1 to StringGrid1.RowCount do

begin

   NewCheckBox := (StringGrid1.Objects[4, i] as TCheckBox);

   if NewCheckBox <> nil then

   begin

     NewCheckBox.Visible := false;

     StringGrid1.Objects[4, i] := nil;

   end;

end;

end;

 

procedure TForm1.set_checkbox_alignment;

var

NewCheckBox: TCheckBox;

Rect: TRect;

i: Integer;

begin

for i := 1 to StringGrid1.RowCount do

begin

   NewCheckBox := (StringGrid1.Objects[4, i] as TCheckBox);

   if NewCheckBox <> nil then

   begin

     Rect := StringGrid1.CellRect(4, i); // получаем размер ячейки для чекбокса

     NewCheckBox.Left := StringGrid1.Left + Rect.Left + 2;

     NewCheckBox.Top := StringGrid1.Top + Rect.Top + 2;

     NewCheckBox.Width := Rect.Right - Rect.Left;

     NewCheckBox.Height := Rect.Bottom - Rect.Top;

     NewCheckBox.Visible := True;

   end;

end;

end;

 

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

begin

if not (gdFixed in State) then

   set_checkbox_alignment;

end;

Ранние статьи

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить