C++Builder中TAutoComplete类获取及IAutoComplete2集成咨询
C++Builder相关控件问题解答
一、TButtonedEdit的IAutoComplete2支持实现
不需要额外下载第三方TAutoComplete类,直接调用Windows系统原生的COM接口就能实现:
- 首先在工程中配置依赖:包含头文件
#include <shldisp.h>,并在链接选项中加入shlwapi.lib。 - 给TButtonedEdit添加自动完成的核心代码示例:
void __fastcall TForm1::FormCreate(TObject *Sender) { IAutoComplete2* pAutoComplete = nullptr; HRESULT hr = CoCreateInstance(CLSID_AutoComplete, nullptr, CLSCTX_INPROC_SERVER, IID_IAutoComplete2, (void**)&pAutoComplete); if (SUCCEEDED(hr)) { // 绑定到TButtonedEdit的窗口句柄 hr = pAutoComplete->Init(ButtonedEdit1->Handle, nullptr, nullptr, nullptr); if (SUCCEEDED(hr)) { // 设置自动完成行为:启用建议+自动补全 pAutoComplete->SetOptions(ACO_AUTOSUGGEST | ACO_AUTOAPPEND); } pAutoComplete->Release(); } } - 如果需要自定义候选内容,实现
IAutoCompleteSource接口,将其指针替换Init方法的第二个参数即可。
二、C++Builder内置的编辑控件历史记录方案
C++Builder有现成的实现方式:
- 直接使用
TComboBox:将其Style设为csDropDown,表现和编辑框一致,同时Items属性可直接保存输入历史,开启AutoComplete相关属性就能自动匹配历史内容。 - 若坚持用TButtonedEdit,可搭配
TStringList手动维护历史:在控件的OnExit事件中把当前非空文本添加到列表(注意去重),再将这个列表作为自动完成数据源绑定到IAutoComplete2接口。
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

