|
Вопрос # 1 877/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Скажите пжлста почему не раскрывается ComboBox, который я создаю на StringGride? Он вроде пытается раскрыться, показывает мелкую полоску снизу и все.
А если создаю на форме, то все ок.
Код в приложении
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- var
- cmb: TComboBox;
- begin
- StringGrid1.ColWidths[0] := 160;
- StringGrid1.RowHeights[0] := 80;
-
- cmb:=TComboBox.Create(Form1);
- // cmb:=TComboBox.Create(StringGrid1);
- cmb.Name := 'MyCmb1';
-
- cmb.Parent := StringGrid1;
- // cmb.Parent := Form1;
- cmb.DropDownCount := 8;
- cmb.Style := csDropDown;
- cmb.Height := 30;
- cmb.Width := 100;
- cmb.Left := StringGrid1.CellRect(0,0).Left+20;
- cmb.Top := StringGrid1.CellRect(0,0).Top+20;
- cmb.Items.Add('item 1');
- cmb.Items.Add('item 2');
-
- end;
-
 |
Вопрос задал: Muratov Radik (статус: Посетитель)
Вопрос отправлен: 5 сентября 2008, 16:04
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 12; последнее сообщение — 7 сентября 2008, 15:43; участников в обсуждении: 4.
|
Вадим К (статус: Академик), 5 сентября 2008, 16:10 [#1]:
Вообще то он должен раскрыться.
Но попробуйте ещё убрать строку
cmb.Height := 30;
В случае с combobox она малось бессмысленная. Попробуйте на отдельном приложении и поймёте почему. Если нет, раскажу отдельно.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Feniks (статус: Бакалавр), 5 сентября 2008, 16:40 [#2]:
На сколько я помню, у него есть свойства:
DropDownCount - отвечающее за количество раскрываемых строк в списке;
ItemHeight - и их высоту. Может из-за них глюки...
|
|
Muratov Radik (статус: Посетитель), 5 сентября 2008, 16:52 [#3]:
Пробовал убрать cmb.Height := 30; не помогло. Помогло задание
cmb.Height заведомо больше, напрмер 100.
Изменение DropDownCount также никагого эффекта не дает
|
|
Мережников Андрей (статус: Абитуриент), 5 сентября 2008, 17:32 [#4]:
у меня подобная проблема возникала при использовании DBLookUpComboBox. При попытке раскрыть список - показывалась одна строчка из всего списка. Проблема была решена последовательным присваиванием ItemIndex сначала последнего значения в списке, затем первого.
|
|
Muratov Radik (статус: Посетитель), 6 сентября 2008, 13:58 [#5]:
Люди добрые!
А может подскажете еще как избавляться от следов, которые остаются при перемещении по таблице от этих ComboBoxов. А то складывается ощущение, что они везде, и что самое интересное, если в эти "следы" тыкнуть, то они раскрываются как настоящие и значение дает выбрать
|
|
Вадим К (статус: Академик), 6 сентября 2008, 14:30 [#6]:
Ну логично, посмотрите на свой код. Вы же на каждый клик создаёте комбобокс. Надо либо удалять за собой, либо банально не создавать каждый раз новый - просто пересовываем и всех делов.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 6 сентября 2008, 14:32 [#7]:
Но я же создаю n-ое кол-во боксов по нажатию на кнопку, а при перемещении по таблице ничего же не создаю
|
|
Вадим К (статус: Академик), 6 сентября 2008, 16:33 [#8]:
Стоп. а таблицу вы прокручиваете? у неё есть полосы прокрутки?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Muratov Radik (статус: Посетитель), 7 сентября 2008, 13:05 [#9]:
Да, прокрутка есть.
|
|
Вадим К (статус: Академик), 7 сентября 2008, 14:07 [#10]:
Ну вот, а комбобоксы то о прокрутке ничего не знают.... Они остаются на своих местах
Вообще то эта задача решается немного другим способом. В нужных клетках рисуется только кнопка с треугольником. А вот комбобокс создаётся только в момент нажатия оной.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
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 - оно вызывается тогда, когда список закрывается.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|