-
Похожий контент
-
От Morfi
Столкнулся с такой проблемой:
Есть форма с TComboBox. Стиль форме (один из тех, который поставляется из коробки) задаю в run-time:
procedure TFormEditorRoomAttribute.FormCreate(Sender: TObject); begin inherited; self.StyleBook := uAccommodationInventory.ReferenceAccommodationInventoryForm.StyleBook; end; Необходимо, чтобы TComboBox отображал items c bitmap. Заполняю TComboBox.ListBox так же в run-time (TListBoxItem.StyleLookup := 'listboxitemleftdetail'):
var I: integer; FListBoxItem: TListBoxItem; begin //cbPicture: TCombobox; Self.cbPicture.BeginUpdate; Self.FRoomAttributePictures := ConnectionModule.DSServerModuleAccommodationClient.GetRoomAttributePictures; for I := 0 to Self.FRoomAttributePictures.Count - 1 do begin FListBoxItem := TListBoxItem.Create(Self.cbPicture); FListBoxItem.TagObject:= Self.FRoomAttributePictures[i]; FListBoxItem.ItemData.Text := Self.FRoomAttributePictures[i].ID.ToString; FListBoxItem.ItemData.Bitmap := Self.FRoomAttributePictures[i].GetBitmap; FListBoxItem.StyleLookup := 'listboxitemleftdetail'; Self.cbPicture.AddObject(FListBoxItem); end; Self.cbPicture.EndUpdate; end; TComboBox.DropDownKind выставляю в "Custom".
Вроде как всё готово. Но получается вот такая картина.
Создаю и отображаю форму, bitmap в TCombobox отображен:
Раскрываю список, bitmaps так же отображаются:
Но, как только выбираю один из items, происходит следующее:
выбранный item не отображается, вообще!
Долго ли, мало ли копался в исходниках TCombobox...
В общем нашел некоторое решение данной проблемы. На событие TComboBox.OnClosePopup повесил код:
begin //cbPicture: TCombobox; self.cbPicture.Selected.NeedStyleLookup; self.cbPicture.NeedStyleLookup; self.ApplyStyleLookup; end; Результат, выбранный item отображается в TCombobox:
Теперь вопрос: Так и должно отрабатывать? Или что-то делаю не так?! Если что-то делаю не так, то как надо делать?
-
От Morfi
Ребята, как правильно настроить или реализовать поиск в TCombobox (данные которого связаны через livebinding c БД) при помощи TSearchBox?
-
От PFC
Есть класс:
class TMyObjectInt : public TObject { private: int Value; public: __fastcall TMyObjectInt (int _Value); __fastcall ~TMyObjectInt(); }; Есть ComboBox:
for (int i = 1; i <= 10; i++) cbxItems->Items->AddObject(IntToStr(i), new TMyObjectInt(i)); Почему при вызове ->Clear() не вызываются деструкторы для TObject'ов? Казалось бы базовый TObject замечательно для этого подходит, даже деструктор у него виртуальным объявлен.
Я могу написать свою функцию очистки, но это потенциально приводит к ошибкам, особенно если я отдаю указатель на ComboBox за пределы своей формы.
Кстати, так же ведут себя и многие другие контролы, да и в VCL было так же.
-
От Nix0N
Не отображаются кастомные item's при разворачивании списка TComboBox. Нет отображения конкретно в выпадающем списке, в самом TComboBox всё ок. Пробовал перерисовку во время события onPopup, создание на различных родителях и т.д. - не помогло. Подскажите в чем может быть дело ? Спасибо.
Чистый проект прилагается: RAD Studio XE6
CustomComboBox.zip
-
-
Последние посетители 0 пользователей онлайн
Ни одного зарегистрированного пользователя не просматривает данную страницу
На форму кладём TTabControl с двумя табами. На одном из них помещаем ComboBox.
В процедуре формируем item'ы. Примерно так:
Вызываем при создании формы:
и пересоздаем список item'ов после переключения табов.
Естественно, устанавливаем активный item, после того как их список сформирован.
В XE7 всё работает как часы.
В XE8 - артефакт. После переключения табов активный Item - нулевой, но ComboBox не отображает его значение. Визуально это выглядит так, будто ItemIndex = -1.
Проекты для XE7 и XE8 прикрепил.
https://yadi.sk/d/4FGvgF-ti5dWz
Отредактировал Brovin YaroslavПоделиться сообщением
Ссылка на сообщение