Uma interface visual economiza tempo do usuário: se ao lado do texto de uma opção aparece um ícone compreensível — a bandeira de um país, o logotipo de um sistema de pagamento, um indicador colorido de status — a escolha do item desejado leva segundos, e não tentativas de decifrar linhas secas. É justamente para esses cenários que ao conjunto de componentes FastEditors VCL, que faz parte do FastReport VCL Ultimate foi adicionado um novo controle — o TfrImageComboBox.
TfrImageComboBox — um editor com lista suspensa, em que cada item combina um valor-chave, uma imagem do TImageList e uma legenda textual. Ele não tem um análogo direto na paleta padrão de componentes. O componente suporta alinhamento horizontal das imagens e várias opções de deslocamento do texto na horizontal e na vertical — tanto nos itens da lista quanto no campo do editor.
Neste artigo examinaremos em detalhes as propriedades e os eventos do componente, mostraremos os cenários típicos de seu uso na interface do usuário e daremos um exemplo passo a passo com o qual você pode começar a trabalhar já hoje.
O componente ImageComboBox está disponível na IDE na paleta do FastEditors VCL e destina-se à seleção de imagens com legendas textuais em uma lista suspensa e à exibição subsequente delas no campo do editor.
Principais recursos do TfrImageComboBox:
Vejamos as principais propriedades que distinguem esse componente dos outros editores do conjunto FastEditors VCL.
Value — o valor-chave atual do item selecionado da lista. Você pode gravar aqui um valor do tipo Variant e, se o componente encontrar esse valor na coleção de itens, exibirá automaticamente a imagem e a legenda correspondentes no campo do editor. Se o ImageComboBox é usado dentro da célula de um componente FastGrid, o valor dessa célula é automaticamente atribuído ao Value.
ItemIndex — o índice do item selecionado da lista suspensa. Se o valor de Value não corresponde a nenhum valor-chave dos itens da lista, essa propriedade é igual a -1.
Selected — a propriedade que contém o item selecionado da lista do tipo TfrImageComboBoxItem.
Properties.AutoDropDown — define a possibilidade de mostrar automaticamente a lista suspensa quando o usuário começa a digitar texto no campo do editor.
Properties.DropDownCount — o número máximo de linhas exibidas na lista suspensa. Se esse valor for igual a 0, o componente tentará exibir quantos itens da lista couberem na tela do monitor.
Properties.ShowDropdownWindow — define se é permitida a exibição da lista suspensa de itens.
Properties.IncrementalFiltering — define se a busca e a filtragem pelas legendas textuais dos itens da lista estão habilitadas.
Essas propriedades definem o que o componente mostrará se o valor de Value não corresponder a nenhum dos itens da lista:
Properties.Layout — um conjunto de propriedades que controlam o alinhamento do texto e da imagem no campo do editor.
Properties.DropdownItemLayout — um conjunto de propriedades que controlam o alinhamento do texto e da imagem nos itens da lista suspensa.
Properties.DropDownWidth — a largura da lista suspensa. Se for igual a 0, a lista suspensa tem a mesma largura que o próprio componente TfrImageComboBox.
Properties.ImageMargin — a margem que regula a posição da imagem no campo do editor e na lista suspensa.
Properties.ItemHeight — a altura do item da lista. Com o valor 0, a altura é calculada automaticamente. Mas se for preciso desenhar o item da lista manualmente usando o evento Properties.OnCustomDrawItem, é conveniente atribuir a essa propriedade um valor diferente de 0.
Properties.ItemImages — o componente ImageList que contém as imagens para a coleção de itens da lista suspensa. Se essa propriedade for igual a nil, as imagens não serão exibidas, mas a possibilidade de exibir o texto será mantida.
Properties.Items — a coleção de itens da lista suspensa. Cada item tem as seguintes propriedades:
Properties.OnDropDown — o evento disparado quando a lista de itens aparece.
Properties.OnCloseUp — o evento disparado quando a lista de itens é fechada.
Properties.OnCustomDrawItem — o evento para desenhar os itens da lista manualmente. Por exemplo:
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;
Essas propriedades permitem configurar o estilo visual de exibição e o comportamento separadamente para o campo do editor e para a lista suspensa:
Na lista suspensa é possível buscar e filtrar as imagens pelo conteúdo das legendas correspondentes: basta começar a digitar texto no campo do editor, e a lista mostrará apenas os itens coincidentes.
O TfrImageComboBox é especialmente útil onde a escolha em uma lista se beneficia de uma imagem visual junto ao texto. Eis os elementos típicos da interface do usuário em que o componente se mostra excelente:
Para conectar o TfrImageComboBox ao projeto bastam alguns passos:
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;
E é isso — o componente está pronto para uso.
O TfrImageComboBox transforma a escolha comum em uma lista em um elemento de interface visual e conveniente. As imagens ao lado das legendas ficam mais vantajosas do que as linhas do TComboBox padrão, e a filtragem da lista suspensa pelo texto torna a busca da opção desejada rápida e natural.
Some a isso a configuração flexível da aparência do campo do editor e da lista, os eventos para desenhar os itens manualmente e o suporte integrado ao FastGrid — e você terá uma ferramenta completa para interfaces modernas de aplicativos comerciais: CRM, rastreadores de tarefas, catálogos e sistemas de monitoramento.
Se o seu projeto precisa de uma seleção de opções elegante e moderna com ícones e legendas — experimente o TfrImageComboBox do conjunto FastEditors VCL. Para começar, basta colocar o componente no formulário, conectar o TImageList e preencher a coleção Items, como mostrado no exemplo acima.