喜。
当BiDiMode = bdRightToLeft和Style = csDropDownList并且应用程序使用VCL Style时,TComboBoxEx项目没有正确绘制;在DropDown列表中,左侧绘制的图标和文字以及选择项目时,左侧绘制的图标和文本将消失!
我看到了Right to left ComboBox in Delphi XE2 with styles,但没有帮助我。
我该怎么做才能纠正它并在ComboBoxEx右侧绘制图标和文字(第一个图标和下一个文本)?
这正是我所需要的,我用Photoshop设计了这个样本:
我使用Delphi XE8
请帮帮我。
答案 0 :(得分: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;
我测试了它并且工作正常