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;
我已经测试过了,它工作正常
更新
这是我在运行中的图像,与显示的代码完全相同