Как сделать выпадающий список?

Рейтинг: 1Ответов: 1Опубликовано: 20.01.2011

Я создал таблицу TStringGrid. Как сделать выпадающий список с определенными значениями в ячейках, определенной колонки?

Если использовать DBGrid1, то там можно в конструкторе и свойствах всё задать, а вот тут я не знаю... И для DBGrid1 нужна БД, а тут нужно, чтоб пользователь заносил данные в таблицу, нажимал кнопку, эти данные собирались в пакет и отправлялись на сервер...

Ответы

▲ 3Принят

Ок. Порыскал в инете и нашел один из вариантов.

procedure TForm1.FormCreate(Sender: TObject);
begin
    {Высоту combobox'а не изменишь, так что вместо combobox'а
       будем изменять высоту строки grid'а !}
    StringGrid1.DefaultRowHeight := ComboBox1.Height;
    {Спрятать combobox}
    ComboBox1.Visible := False;
    ComboBox1.Items.Add('ProgrammersForum');
    ComboBox1.Items.Add('Форум программистов Дельфи');
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 = 3) 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;

Источник.

Поработаю с этим вариантом. Возникнут вопросы, спрошу. Если у кого-то есть другие варианты или предложения, буду очень благодарен. Спасибо.