Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 553

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Подскажите, пожалуйста, как используя StringGrid и CheckListBox отмечать отдельные строки таблицы для дальнейшего использования?
Заранее благодарен.

Драганов Василий Михайлович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Драганов Василий Михайлович (статус: Посетитель)
Вопрос отправлен: 5 мая 2007, 08:22
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Дмитрий-998

Здравствуйте, Драганов Василий Михайлович!

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

Приложение:
  1. procedure TForm1.CheckBox1Click(Sender: TObject);
  2. begin
  3. ShowMessage('There it is!!');
  4. end;
  5.  
  6. // Заполняем заголовок StringGrid
  7.  
  8. procedure TForm1.FormCreate(Sender: TObject);
  9. begin
  10. StringGrid1.Cells[0, 0] := 'A Simple';
  11. StringGrid1.Cells[1, 0] := 'Way';
  12. StringGrid1.Cells[2, 0] := 'To';
  13. StringGrid1.Cells[3, 0] := 'Do It';
  14. StringGrid1.Cells[4, 0] := 'Check !!';
  15.  
  16. AddCheckBoxes; // добавляем чекбоксы...
  17. end;
  18.  
  19. procedure TForm1.AddCheckBoxes;
  20. var
  21. i: Integer;
  22. NewCheckBox: TCheckBox;
  23. begin
  24. clean_previus_buffer; // очищаем неиспользуемые чекбоксы...
  25.  
  26. for i := 1 to 4 do
  27. begin
  28. StringGrid1.Cells[0, i] := 'a';
  29. StringGrid1.Cells[1, i] := 'b';
  30. StringGrid1.Cells[2, i] := 'c';
  31. StringGrid1.Cells[3, i] := 'd';
  32.  
  33. NewCheckBox := TCheckBox.Create(Application);
  34. NewCheckBox.Width := 0;
  35. NewCheckBox.Visible := false;
  36. NewCheckBox.Caption := 'OK';
  37. NewCheckBox.Color := clWindow;
  38. NewCheckBox.Tag := i;
  39. NewCheckBox.OnClick := CheckBox1.OnClick; // Связываем предыдущее событие OnClick
  40. // с существующим TCheckBox
  41. NewCheckBox.Parent := Panel1;
  42.  
  43. StringGrid1.Objects[4, i] := NewCheckBox;
  44. StringGrid1.RowCount := i;
  45. end;
  46. set_checkbox_alignment; // расположение чекбоксов в ячейках таблицы...
  47. end;
  48.  
  49. procedure TForm1.clean_previus_buffer;
  50. var
  51. NewCheckBox: TCheckBox;
  52. i: Integer;
  53. begin
  54. for i := 1 to StringGrid1.RowCount do
  55. begin
  56. NewCheckBox := (StringGrid1.Objects[4, i] as TCheckBox);
  57. if NewCheckBox <> nil then
  58. begin
  59. NewCheckBox.Visible := false;
  60. StringGrid1.Objects[4, i] := nil;
  61. end;
  62. end;
  63. end;
  64.  
  65. procedure TForm1.set_checkbox_alignment;
  66. var
  67. NewCheckBox: TCheckBox;
  68. Rect: TRect;
  69. i: Integer;
  70. begin
  71. for i := 1 to StringGrid1.RowCount do
  72. begin
  73. NewCheckBox := (StringGrid1.Objects[4, i] as TCheckBox);
  74. if NewCheckBox <> nil then
  75. begin
  76. Rect := StringGrid1.CellRect(4, i); // получаем размер ячейки для чекбокса
  77. NewCheckBox.Left := StringGrid1.Left + Rect.Left + 2;
  78. NewCheckBox.Top := StringGrid1.Top + Rect.Top + 2;
  79. NewCheckBox.Width := Rect.Right - Rect.Left;
  80. NewCheckBox.Height := Rect.Bottom - Rect.Top;
  81. NewCheckBox.Visible := True;
  82. end;
  83. end;
  84. end;
  85.  
  86. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  87. Rect: TRect; State: TGridDrawState);
  88. begin
  89. if not (gdFixed in State) then
  90. set_checkbox_alignment;
  91. end;


Ответ отправил: Дмитрий-998 (статус: 1-ый класс)
Время отправки: 5 мая 2007, 20:14
Оценка за ответ: 5

Комментарий к оценке: Уважаемый Эксперт Дмитрий! Спасибо за помощь в решении моей задачи. Если не сложно, подскажите, где можно об этом еще почитать?
С искренней благодарностью, В.Драганов.

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 5 мая 2007, 22:24; участников в обсуждении: 1.
Дмитрий-998

Дмитрий-998 (статус: 1-ый класс), 5 мая 2007, 22:24 [#1]:

Попробуйте зайти вот сюда: http://www.chtotib.ru/options/library/data/33/87/116/169/_all_articles_.html , здесь много чего интересного...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:50
Выполнено за 0.04 сек.