Наглядный интерфейс экономит время пользователя: если рядом с текстом варианта выводится понятная иконка — флаг страны, логотип платёжной системы, цветовой индикатор статуса — выбор нужного пункта занимает секунды, а не попытки расшифровки сухих строк. Именно для таких сценариев в набор компонентов FastEditors VCL, входящий в состав FastReport VCL Ultimate, добавлен новый элемент управления — TfrImageComboBox.
TfrImageComboBox — это редактор с выпадающим списком, каждый элемент которого сочетает ключевое значение, изображение из TImageList и текстовую подпись. Прямого аналога в стандартной палитре компонентов у него нет. Компонент поддерживает горизонтальное выравнивание изображений и различные варианты смещения текста по горизонтали и вертикали — как в элементах списка, так и в поле редактора.
В этой статье подробно разберём свойства и события компонента, покажем типовые сценарии его применения в пользовательском интерфейсе и приведём пошаговый пример, с которого можно начать работу уже сегодня.
Компонент ImageComboBox доступен в IDE на палитре FastEditors VCL и предназначен для выбора изображений с текстовыми подписями из выпадающего списка и последующего отображения их в поле редактора.
Ключевые возможности TfrImageComboBox:
Рассмотрим основные свойства, отличающие этот компонент от других редакторов набора FastEditors VCL.
Value — текущее ключевое значение выбранного элемента списка. Вы можете записать сюда значение типа Variant, и если компонент найдёт это значение в коллекции элементов, то автоматически отобразит соответствующую картинку и подпись в поле редактора. Если ImageComboBox используется внутри ячейки компонента FastGrid, то в качестве Value автоматически подставляется значение этой ячейки.
ItemIndex — индекс выбранного элемента выпадающего списка. Если значение Value не соответствует ни одному ключевому значению элементов списка, это свойство равно -1.
Selected — свойство, содержащее выбранный элемент списка типа TfrImageComboBoxItem.
Properties.AutoDropDown — определяет возможность автоматически показывать выпадающий список, если пользователь начинает набирать текст в поле редактора.
Properties.DropDownCount — максимальное число строк, отображаемых в выпадающем списке. Если это значение равно 0, компонент попытается отобразить столько элементов списка, сколько уместится на экране монитора.
Properties.ShowDropdownWindow — определяет, допускается ли показ выпадающего списка элементов.
Properties.IncrementalFiltering — определяет, включена ли возможность поиска и фильтрации по текстовым подписям элементов списка.
Эти свойства определяют, что компонент покажет, если значение Value не соответствует ни одному из элементов списка:
Properties.Layout — набор свойств, управляющих выравниванием текста и изображения в поле редактора.
Properties.DropdownItemLayout — набор свойств, управляющих выравниванием текста и изображения в элементах выпадающего списка.
Properties.DropDownWidth — ширина выпадающего списка. Если она равна 0, выпадающий список имеет такую же ширину, как и сам компонент TfrImageComboBox.
Properties.ImageMargin — отступ, регулирующий положение картинки в поле редактора и в выпадающем списке.
Properties.ItemHeight — высота элемента списка. При значении 0 высота вычисляется автоматически. Но если нужно вручную нарисовать элемент списка с использованием события Properties.OnCustomDrawItem, удобно задать для этого свойства отличное от 0 значение.
Properties.ItemImages — компонент ImageList, в котором содержатся изображения для коллекции элементов выпадающего списка. Если это свойство равно nil, изображения не будут показываться, но возможность отображать текст сохранится.
Properties.Items — коллекция элементов выпадающего списка. Каждый элемент имеет следующие свойства:
Properties.OnDropDown — событие, срабатывающее при появлении списка элементов.
Properties.OnCloseUp — событие, срабатывающее при закрытии списка элементов.
Properties.OnCustomDrawItem — событие для отрисовки элементов списка вручную. Например:
procedure TForm1.frImageComboBox2PropertiesCustomDrawItem(Sender: TfrImageComboBoxCustomProperties; ACanvas: TfrCustomCanvas; AItemViewInfo: TfrImageComboBoxItemViewInfo; var DefaultDraw: Boolean); var LText: string; LTextRect: TRect; begin DefaultDraw := False; LText := 'Item ' + Sender.Items[AItemViewInfo.SourceItemIndex].Caption; LTextRect := AItemViewInfo.ItemRect; ACanvas.FillRect(LTextRect, clWhite); ACanvas.DrawFocusRect(LTextRect); ACanvas.DrawText(LTextRect, LText); end;
Эти свойства позволяют настроить визуальный стиль отображения и поведение отдельно для поля редактора и для выпадающего списка:
В выпадающем списке можно искать и фильтровать изображения по содержимому соответствующих им подписей: достаточно начать набирать текст в поле редактора, и список покажет только совпадающие элементы.
TfrImageComboBox особенно полезен там, где выбор из списка выигрывает от визуального образа рядом с текстом. Вот типовые элементы интерфейса пользователя, в которых компонент отлично себя показывает:
Подключить TfrImageComboBox к проекту можно за несколько шагов:
procedure TForm1.FormCreate(Sender: TObject); var I: Integer; LItem: TfrImageComboBoxItem; begin frImageComboBox1.BeginUpdate; try for I := 0 to 9 do begin LItem := frImageComboBox1.Properties.Items.Add; LItem.Caption := 'Item ' + IntToStr(I); LItem.ImageIndex := I; LItem.Value := I; end; finally frImageComboBox1.EndUpdate; end; end;
И это всё — компонент готов к использованию.
TfrImageComboBox превращает обычный выбор из списка в наглядный и удобный элемент интерфейса. Изображения рядом с подписями выглядят выигрышнее, чем строки стандартного TComboBox, а фильтрация выпадающего списка по тексту делает поиск нужного варианта быстрым и естественным.
Добавьте к этому гибкую настройку внешнего вида поля редактора и списка, события для отрисовки элементов вручную и встроенную поддержку FastGrid — и вы получите полноценный инструмент для современных интерфейсов деловых приложений: CRM, трекеров задач, каталогов и систем мониторинга.
Если вашему проекту нужен аккуратный и современный выбор опций с иконками и подписями — попробуйте TfrImageComboBox из набора FastEditors VCL. Для начала работы достаточно поместить компонент на форму, подключить TImageList и заполнить коллекцию Items, как показано в примере выше.