Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 23.06.2019
Сообщений: 12

Компонент "StringGrid+ComboBox"

24.06.2019, 07:18. Показов 2579. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите составить программу, где будут два этих элемента
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.06.2019, 07:18
Ответы с готовыми решениями:

TabControl, StringGrid и Combobox. Обращение к ComboBox
Здравствуйте. Вот такое задание: Для каждого предмета в аттестате может быть: зачет, оценка или прослушан курс. Как я это сделал: (во...

Компонент StringGrid
Разработать программу, вычисляющую общее количество медалей, завоеванных представителями каждой страны на олимпиаде, и соответствующее...

Компонент StringGrid
Добрый вечер, у меня появилась такая проблема, что есть задание в котором надо сделать 1 массив который пользователь вводит сам, второй...

36
Модератор
 Аватар для D1973
9952 / 6487 / 2461
Регистрация: 21.01.2014
Сообщений: 27,485
Записей в блоге: 3
26.06.2019, 11:38
Студворк — интернет-сервис помощи студентам
Lolip, см. тут.

Не по теме:

Вот только кто Вам поверит, что Вы сами такое сотворили? На первом же вопросе, что там и как, срежетесь... Впрочем, это совсем не мое дело...

0
 Аватар для AHBAR
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,141
26.06.2019, 12:43
Лучший ответ Сообщение было отмечено Lolip как решение

Решение

Цитата Сообщение от D1973 Посмотреть сообщение
Вот только кто Вам поверит, что Вы сами такое сотворили? На первом же вопросе, что там и как, срежетесь... Впрочем, это совсем не мое дело...
Это точно...

Поэтому
Цитата Сообщение от Lolip Посмотреть сообщение
Помогите составить программу, где будут два этих элемента
Предлагаю самый легкий вариант
Помещаете на форму два компонента
StringGrid и ComboBox

Идея в том, чтобы перемещать ComboBox на ячейку STringGrid (незаметно для пользователя)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox1Exit(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
VAR
i,j:Integer;
begin
//настройка ComboBox
 ComboBox1.Visible := False;
 ComboBox1.Text := '';
 ComboBox1.Items.Add('элемент 1');
 ComboBox1.Items.Add('элемент 2');
 ComboBox1.Items.Add('элемент 3');
 ComboBox1.Style := csDropDownList;
 ComboBox1.ItemIndex := 0;
 
//настройка StringGrid
 StringGrid1.DefaultRowHeight := ComboBox1.Height;
 {кроме фиксированных}
 for i := 1 to StringGrid1.RowCount-1 do
 for j := 1 to StringGrid1.ColCount-1 do
 StringGrid1.Cells[j,i] := ComboBox1.Items[0];
 
 StringGrid1.Options := StringGrid1.Options + [goColSizing]
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex];
ComboBox1.Visible := False;
end;
 
procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex];
ComboBox1.Visible := False;
end;
 
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var R: TRect;
begin
{поставим ComboBox на ячейку StringGrid'a}
R := StringGrid1.CellRect(ACol, ARow);
R.Left := R.Left + StringGrid1.Left;
R.Right := R.Right + StringGrid1.Left;
R.Top := R.Top + StringGrid1.Top;
R.Bottom := R.Bottom + StringGrid1.Top;
ComboBox1.Left := R.Left + 1;
ComboBox1.Top := R.Top + 1;
ComboBox1.Width := (R.Right + 1) - R.Left;
ComboBox1.Height := (R.Bottom + 1) - R.Top;
ComboBox1.Visible := True;
ComboBox1.SetFocus;
CanSelect := True;
end;
 
end.
Миниатюры
Компонент "StringGrid+ComboBox"   Компонент "StringGrid+ComboBox"  
Вложения
Тип файла: rar StringGrid_ComboBox.rar (7.3 Кб, 9 просмотров)
1
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
26.06.2019, 13:21
Цитата Сообщение от AHBAR Посмотреть сообщение
{поставим ComboBox на ячейку StringGrid'a}
R := StringGrid1.CellRect(ACol, ARow);
R.Left := R.Left + StringGrid1.Left;
R.Right := R.Right + StringGrid1.Left;
R.Top := R.Top + StringGrid1.Top;
R.Bottom := R.Bottom + StringGrid1.Top;
ComboBox1.Left := R.Left + 1;
ComboBox1.Top := R.Top + 1;
ComboBox1.Width := (R.Right + 1) - R.Left;
ComboBox1.Height := (R.Bottom + 1) - R.Top;
это был первый класс. резко переходим в восьмой-девятый
Delphi
1
ComboBox1.BoundsRect:= StringGrid1.CellRect(ACol,ARow);
не забыть добавить
Delphi
1
2
3
4
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Parent:= StringGrid1;
end;
1
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
26.06.2019, 13:29
у комбы есть неприятная особенность - нельзя отключить автовысоту как у Эдита. и получается такая фигня

может и можно, но нужно глубоко копать
0
 Аватар для AHBAR
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,141
26.06.2019, 14:57
Цитата Сообщение от DenNik Посмотреть сообщение
это был первый класс. резко переходим в восьмой-девятый
век живи - век учись
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
26.06.2019, 15:29
Цитата Сообщение от DenNik Посмотреть сообщение
резко переходим в восьмой-девятый
Прикольно. Только у комбобокса список теперь не виден.
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
26.06.2019, 15:44
AzAtom, у кого не виден? у меня все работает
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
26.06.2019, 15:54
Найдено на просторах инета:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.DefaultRowHeight := ComboBox1.Height;
  ComboBox1.Visible := False;
  ComboBox1.Items.Add('Строка1');
  ComboBox1.Items.Add('Строка2');
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  {Перебросим выбранное в значение из ComboBox в grid}
  StringGrid1.Cells[StringGrid1.Col,
  StringGrid1.Row] :=ComboBox1.Items[ComboBox1.ItemIndex];
  ComboBox1.Visible := False;
  StringGrid1.SetFocus;
end;
 
procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
  {Перебросим выбранное в значение из ComboBox в grid}
  StringGrid1.Cells[StringGrid1.Col,
  StringGrid1.Row] :=ComboBox1.Items[ComboBox1.ItemIndex];
  ComboBox1.Visible := False;
  StringGrid1.SetFocus;
end;
 
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
          ARow: Integer; var CanSelect: Boolean);
var
  R: TRect;
begin
  if ((ACol = 1) AND (ARow <> 0)) then
    begin
      {Ширина и положение ComboBox должно соответствовать
                ячейке StringGrid}
      R := StringGrid1.CellRect(ACol, ARow);
      R.Left := R.Left + StringGrid1.Left;
      R.Right := R.Right + StringGrid1.Left;
      R.Top := R.Top + StringGrid1.Top;
      R.Bottom := R.Bottom + StringGrid1.Top;
      ComboBox1.Left := R.Left + 1;
      ComboBox1.Top := R.Top + 1;
      ComboBox1.Width := (R.Right + 1) - R.Left;
      ComboBox1.Height := (R.Bottom + 1) - R.Top;
      {Покажем combobox}
      ComboBox1.Visible := True;
      ComboBox1.SetFocus;
    end;
  CanSelect := True;
end;
1
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
26.06.2019, 16:04
Цитата Сообщение от DenNik Посмотреть сообщение
у кого не виден?
Например, у меня в Delphi 7, когда Parent комбобоксу назначен стринггрид.
Вот картинка, слева просто ячейка нажата, справа список должен был быть
Миниатюры
Компонент "StringGrid+ComboBox"  
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
26.06.2019, 16:10
AzAtom, а ты заполнил список комбы?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
26.06.2019, 16:11
DenNik, конечно! Если не менять родителя комбы, то список нормально видно.
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
26.06.2019, 16:13
AzAtom, вероятно, ошибка Д7. переходи на более новую версию
0
26.06.2019, 19:44

Не по теме:

Интересно, а что ТС думает по эти бодания на 2 страницы?...

0
 Аватар для AHBAR
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,141
27.06.2019, 05:36
Цитата Сообщение от AzAtom Посмотреть сообщение
Если не менять родителя комбы, то список нормально видно
имеет ли смысл его менять... я понимаю, когда делаешь новый компонент на основе их.
Цитата Сообщение от Пытливый Посмотреть сообщение
Найдено на просторах инета:
там код для одной ячейки. кстати послужил хорошей основой для кода

Не по теме:

Цитата Сообщение от D1973 Посмотреть сообщение
Интересно, а что ТС думает по эти бодания на 2 страницы?...
Наверно, еще не открывал тему даже...
Иногда такое ощущение, что темы создаются, чтобы другие пообщались)

0
 Аватар для AHBAR
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,141
27.06.2019, 05:39
Если убрать родителя, то получается вот так:
Миниатюры
Компонент "StringGrid+ComboBox"  
0
0 / 0 / 0
Регистрация: 23.06.2019
Сообщений: 12
27.06.2019, 06:24  [ТС]
ммм...

Добавлено через 6 минут
он сам не шарит)
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
27.06.2019, 09:13
Цитата Сообщение от AHBAR Посмотреть сообщение
Если убрать родителя, то получается вот так:
естественно. координаты привязываются к родителю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2019, 09:13

Компонент StringGrid.
Найти максимальный и минимальный элементы массива и поменять их местами. (Результат записать в новый массив).

Компонент StringGrid!
Объясните всё про этот компонент, хочу в нём разобраться)

Компонент StringGrid Delphi
Вывести максимальное из двух чисел

Компонент StringGrid delphi 7
Здравствуйте У меня есть маленькая проблема с работой с компонентом delphi со StringGrid Когда я вывожу на этот компонент массив, то...

Компонент StringGrid в дельфи
Здравствуйте уважаемые. Помогите разобраться с компонентом StringGrid в Дельфи. Каким образом я могу сделать перенос по словам в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru