|
Вопрос # 553/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Подскажите, пожалуйста, как используя StringGrid и CheckListBox отмечать отдельные строки таблицы для дальнейшего использования?
Заранее благодарен.
 |
Вопрос задал: Драганов Василий Михайлович (статус: Посетитель)
Вопрос отправлен: 5 мая 2007, 08:22
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Дмитрий-998
Здравствуйте, Драганов Василий Михайлович!
Пример демонстрирует добавление любого количества чекбоксов в StringGrid. В этом примере необходимо добавить TPanel, а в саму панель включить TstringGrid. Так же необходимо добавить невидимый TcheckBox на форму. Затем добавьте 5 колонок и 4 строки в объект StringGrid.
Приложение: Переключить в обычный режим- 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;
 |
Ответ отправил: Дмитрий-998 (статус: 1-ый класс)
Время отправки: 5 мая 2007, 20:14
Оценка за ответ: 5
Комментарий к оценке: Уважаемый Эксперт Дмитрий! Спасибо за помощь в решении моей задачи. Если не сложно, подскажите, где можно об этом еще почитать?
С искренней благодарностью, В.Драганов.
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 5 мая 2007, 22:24; участников в обсуждении: 1.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|