Delphi tComboxex项目不是';当BiDiMode=bdrightoleft且Style=csDropDownList且应用程序使用VCL样式时,t正确绘制

Delphi tComboxex项目不是';当BiDiMode=bdrightoleft且Style=csDropDownList且应用程序使用VCL样式时,t正确绘制,delphi,delphi-xe8,vcl-styles,tcombobox,Delphi,Delphi Xe8,Vcl Styles,Tcombobox,嗨 当BiDiMode=bdRightToLeft且Style=csDropDownList且应用程序使用VCL样式时,Tmboboxex项绘制不正确;在下拉列表中,左侧绘制的图标和文本以及选择项目时,左侧绘制的图标和文本将消失 我看到了,但没有帮助我 我应该怎么做才能更正它并在ComboBox的右侧绘制图标和文本(第一个图标和下一个,文本) 这正是我需要的,我用Photoshop设计了这个示例: 我使用delphixe8 请帮助我。BiDiMode适用于从右向左书写的语言,因此并不真正适用于

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

我看到了,但没有帮助我

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

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

我使用delphixe8


请帮助我。

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

我找不到一种使用TComboBox的方法,但使用TComboBox可以相当轻松地完成

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

我已经测试过了,效果很好

更新 这是我的图像,它正在运行,代码完全如图所示

我无法在XE5中重现该错误。该项目按以下方式显示-下拉按钮-最左侧-左侧的图像和文本不带空格。请提供MCVE。@asd tm hi。我已经编辑了我的帖子。请检查一下。现在我明白你到底想要什么了。我已经删除了我的答案。希望这个零分答案能吸引社区对你的问题的关注。但是在绘制项目时有很多问题。。。在csOwnerDrawFixed模式下,选定项周围的绘图边框也存在问题。。。示例拍摄:这只是一个起点-你需要自己做一些工作。我不知道你还设置了哪些其他选项,也许使用样式会把事情搞砸——我当然没有像你的图像那样绘制两次文本。对我来说,一切正常-文本在所选项目周围显示为蓝色,但我同意您可能需要通过查看状态参数来改进它-正如我在代码中所评论的那样。
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;