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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 1 877

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

Приветствую, уважаемые эксперты!

Скажите пжлста почему не раскрывается ComboBox, который я создаю на StringGride? Он вроде пытается раскрыться, показывает мелкую полоску снизу и все.
А если создаю на форме, то все ок.
Код в приложении

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. cmb: TComboBox;
  4. begin
  5. StringGrid1.ColWidths[0] := 160;
  6. StringGrid1.RowHeights[0] := 80;
  7.  
  8. cmb:=TComboBox.Create(Form1);
  9. // cmb:=TComboBox.Create(StringGrid1);
  10. cmb.Name := 'MyCmb1';
  11.  
  12. cmb.Parent := StringGrid1;
  13. // cmb.Parent := Form1;
  14. cmb.DropDownCount := 8;
  15. cmb.Style := csDropDown;
  16. cmb.Height := 30;
  17. cmb.Width := 100;
  18. cmb.Left := StringGrid1.CellRect(0,0).Left+20;
  19. cmb.Top := StringGrid1.CellRect(0,0).Top+20;
  20. cmb.Items.Add('item 1');
  21. cmb.Items.Add('item 2');
  22.  
  23. end;
  24.  


Muratov Radik Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Muratov Radik (статус: Посетитель)
Вопрос отправлен: 5 сентября 2008, 16:04
Состояние вопроса: открыт, ответов: 0.


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

Всего сообщений: 12; последнее сообщение — 7 сентября 2008, 15:43; участников в обсуждении: 4.
Вадим К

Вадим К (статус: Академик), 5 сентября 2008, 16:10 [#1]:

Вообще то он должен раскрыться.
Но попробуйте ещё убрать строку
cmb.Height := 30;
В случае с combobox она малось бессмысленная. Попробуйте на отдельном приложении и поймёте почему. Если нет, раскажу отдельно.
Галочка "подтверждения прочтения" - вселенское зло.
Feniks

Feniks (статус: Бакалавр), 5 сентября 2008, 16:40 [#2]:

На сколько я помню, у него есть свойства:
DropDownCount - отвечающее за количество раскрываемых строк в списке;
ItemHeight - и их высоту. Может из-за них глюки...
Muratov Radik

Muratov Radik (статус: Посетитель), 5 сентября 2008, 16:52 [#3]:

Пробовал убрать cmb.Height := 30; не помогло. Помогло задание
cmb.Height заведомо больше, напрмер 100.
Изменение DropDownCount также никагого эффекта не дает
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 5 сентября 2008, 17:32 [#4]:

у меня подобная проблема возникала при использовании DBLookUpComboBox. При попытке раскрыть список - показывалась одна строчка из всего списка. Проблема была решена последовательным присваиванием ItemIndex сначала последнего значения в списке, затем первого.
Muratov Radik

Muratov Radik (статус: Посетитель), 6 сентября 2008, 13:58 [#5]:

Люди добрые!
А может подскажете еще как избавляться от следов, которые остаются при перемещении по таблице от этих ComboBoxов. А то складывается ощущение, что они везде, и что самое интересное, если в эти "следы" тыкнуть, то они раскрываются как настоящие и значение дает выбрать
Вадим К

Вадим К (статус: Академик), 6 сентября 2008, 14:30 [#6]:

Ну логично, посмотрите на свой код. Вы же на каждый клик создаёте комбобокс. Надо либо удалять за собой, либо банально не создавать каждый раз новый - просто пересовываем и всех делов.
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

Muratov Radik (статус: Посетитель), 6 сентября 2008, 14:32 [#7]:

Но я же создаю n-ое кол-во боксов по нажатию на кнопку, а при перемещении по таблице ничего же не создаю
Вадим К

Вадим К (статус: Академик), 6 сентября 2008, 16:33 [#8]:

Стоп. а таблицу вы прокручиваете? у неё есть полосы прокрутки?
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

Muratov Radik (статус: Посетитель), 7 сентября 2008, 13:05 [#9]:

Да, прокрутка есть.
Вадим К

Вадим К (статус: Академик), 7 сентября 2008, 14:07 [#10]:

Ну вот, а комбобоксы то о прокрутке ничего не знают.... Они остаются на своих местах

Вообще то эта задача решается немного другим способом. В нужных клетках рисуется только кнопка с треугольником. А вот комбобокс создаётся только в момент нажатия оной.
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

Muratov Radik (статус: Посетитель), 7 сентября 2008, 14:37 [#11]:

Это получается то же самое только вид сбоку. А эти кнопки тоже нужно ведь перерисовывать при прокрутке. А можно как-то решить эту проблему?
Вадим К

Вадим К (статус: Академик), 7 сентября 2008, 15:43 [#12]:

Это не тоже, во первых ресурсов потребляется меншь. Во вторых есть события, которые вызываются при прокрутке. Но отрисовывать лучше в OnDrawCell.

Но вообще, рекомендую не мучиться, ни изобретать велосипеды, а воспользоваться компонентовм TJvStringGrid с бесплатной библиотеки JVCL (гугл быстро подкажет, где качать).
Что бы заработало, надо выставить в Options goEditing плюс пару других по вкусу.
Теперь осталось дописать главное - событие OnGetEditStyle(Sender: TJvStringGrid; AColumn,
ARow: Integer; PickListStrings: TStrings; var EditStyle: TEditStyle);
Свойства просты.
AColumn, ARow: координаты ячейки, для которой было вызвано собитие - то есть, для этой ячейки можно показать редактор.
PickListStrings: - список строк, которые будут показаны, если раскроется. заполнять просто PickListStrings.add('строка'); Только если EditStyle = esPickList
EditStyle - какая именно кнопка появиться. Есть такие варианты.
esSimple - ничего не поменяется (на самом деле - просто обычный редактор)
esEllipsis - кнопка с троеточием. В случае нажатия срабатывает событие OnEditButtonClick.
esPickList - появиться кпопка с треугольником. При нажатии появиться список, содержимое которого можно наполнить в PickListStrings.
Интересным в этой ситуации будет событие OnListBoxCloseUp - оно вызывается тогда, когда список закрывается.
Галочка "подтверждения прочтения" - вселенское зло.

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 3 июня 2023, 01:58
Выполнено за 0.02 сек.
Рейтинг@Mail.ru