2

TComboBox.SelStart編集テキスト文字列に沿って進行状況を示すために使用するモードがあります。このモードでは、編集カレットに何らかの変更を加えたいと思います。たとえば、編集カレットを2ピクセルに広げるか、このモードを示してより注意を引くために何らかの方法で「太字」にします。これは可能ですか?

4

1 に答える 1

3

はい、Alexがコメントで述べたように、これはAPI呼び出しを使用して実行できます。例:

procedure SetComboCaretWidth(ComboBox: TComboBox; Multiplier: Integer);
var
  EditWnd: HWND;
  EditRect: TRect;
begin
  ComboBox.SetFocus;
  ComboBox.SelStart := -1;
  Assert(ComboBox.Style = csDropDown);

  EditWnd := GetWindow(ComboBox.Handle, GW_CHILD);
  SendMessage(EditWnd, EM_GETRECT, 0, LPARAM(@EditRect));
  CreateCaret(EditWnd, 0,
              GetSystemMetrics(SM_CXBORDER) * Multiplier, EditRect.Height);
  ShowCaret(EditWnd);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetComboCaretWidth(ComboBox1, 4); // bold caret
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SetComboCaretWidth(ComboBox1, 1); // default caret
end;
于 2012-11-09T01:45:48.517 に答える