3

ここに画像の説明を入力 ここに画像の説明を入力

こんにちは。

BiDiMode= bdRightToLeft および Style= csDropDownList でアプリケーションが VCL スタイルを使用している場合、TComboBoxEx アイテムが正しく描画されません。ドロップダウン リストでは、左側にアイコンとテキストが描画され、アイテムを選択すると、左側に描画されたアイコンとテキストが消えます!

Delphi XE2 で右から左への ComboBox をスタイルで見ましたが、役に立ちませんでした。

ComboBoxEx の右側にあるアイコンとテキスト (最初のアイコンと次のテキスト) を修正してペイントするにはどうすればよいですか?

これはまさに私が必要としているもので、Photoshop でこのサンプルをデザインしました。

ここに画像の説明を入力

Delphi 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 に答える