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 回答