| 
| 
 | Вопрос # 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. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |