Элемент TComboBoxEx не отображается правильно, когда BiDiMode= bdRightToLeft и Style= csDropDownList и приложение используют стиль VCL

Привет.

Элемент TComboBoxEx не отображается правильно, когда BiDiMode= bdRightToLeft и Style= csDropDownList и приложение используют стиль VCL; в выпадающем списке значок и текст нарисованы слева, а при выборе элемента значок нарисован слева и текст исчезнет!

Я видел справа налево ComboBox в Delphi XE2 со стилями, но мне это не помогло.

что я должен сделать, чтобы исправить это и нарисовать значок и текст (первый значок, а затем текст) на правой стороне ComboBoxEx?

Это именно то, что мне нужно, и я разработал этот образец с помощью Photoshop:

Я использую Delphi XE8

Пожалуйста, помогите мне.

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;

Я проверил это, и он отлично работает

Обновить

Вот мое изображение этого в действии с точно показанным кодом Упал

Другие вопросы по тегам