3

在此处输入图像描述 在此处输入图像描述

你好。

当 BiDiMode= bdRightToLeft 和 Style= csDropDownList 并且应用程序使用 VCL 样式时,TComboBoxEx 项目未正确绘制;在下拉列表中,左侧绘制的图标和文本在选择项目时,左侧绘制的图标和文本将消失!

在 Delphi XE2 中看到了从右到左的 ComboBox 样式,但没有帮助我。

我应该怎么做才能更正它并在 ComboBoxEx 的右侧绘制图标和文本(第一个图标和下一个,文本)?

这正是我所需要的,我用 Photoshop 设计了这个示例:

在此处输入图像描述

我用德尔福 XE8

请帮助我。

4

1 回答 1

1

BiDiMode 适用于从右到左书写的语言,因此并不真正适用于您的需求。

我看不到使用 TComboBoxEx 的方法,但是您可以很容易地使用 TComboBox 来做到这一点。

添加一个 TComboBox 并使其样式为 csOwnerDrawFixed。我在下面的代码中假设了 TImageList(您必须已经拥有)和 TComboBox 的基本名称。您需要将其修改为您自己的名称。添加一个 OnDrawItem 事件,如下所示。(你可能想把它弄碎一点)。

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  iImageWidth, iTextWidth, iMargin : integer;
  iText : string;
  iCanvas : TCanvas;
begin
  // draw image at right and text right justify
  // assume image index = Item for now.
  iCanvas := ComboBox1.Canvas;
  // need to check state; Just ignore for now.
  iImageWidth := ImageList1.Width;
  iMargin := 4; // pixels - can calculate instead
  iText := ComboBox1.Items[ Index ];
  iTextWidth := iCanvas.TextWidth( iText);

  ImageList1.Draw( iCanvas, Rect.Right - iImageWidth - iMargin, Rect.Top, Index );
  iCanvas.TextOut( Rect.Right - 2 * iMargin - iTextWidth - iImageWidth, Rect.Top, iText);
end;

我已经测试过了,它工作正常

更新

这是我在运行中的图像,与显示的代码完全相同 掉了下来

于 2015-09-03T10:02:42.463 回答