如何实现类似IE的URL栏的自动完成功能(50分)

  • 主题发起人 主题发起人 oceanwave
  • 开始时间 开始时间
O

oceanwave

Unregistered / Unconfirmed
GUEST, unregistred user!
在数据操作窗体常常要用到TDBLookupComboBox,但如果可选项很多,就很痛苦了。有没办法
象IE的URL栏一样,输入部分字符时就能自动跟随出最相似的选 项内容呢?
 
这个功能在 IE 中叫 AutoComplete.

应该可以,至少 D6 的 ComboBox 就实现了 AutoComplete,
我手头没有 D6,不知道它的 TDBLookupComboBox 实现没有,
你可以看它有没有 AutoComplete 属性。如果没实现,
你可以参考 TComboBox 自己做。
 
到http://www.euromind.com/iedelphi/去看看又组件
 
to 940801:
TComboBox和TDBComboBox都有AutoComplete的属性可设置,但TDBLookupComboBox没有,
自己怎么做呢?
to lentilz:
你提供的网站是用做做类似IE的组件,我要的是用于数据操作的,类似TDBLookupComboBox
而不是TComboBox的。
 
这个可以自己通过edit,然后在onchange中动态定义一个 TComboBox。
当用户按chr(70)(表示向下),TComboBox获取焦点可以了.
 
// To add auto-complete capability to a TEdit component
// 1) Declare a global TStringlist object
// 2) Create it on the form create event
// 3) Free it on the form destroy event
// 4) Add new entry to it on the TEdit exit event
// 5) Do the auto-complete on the TEdit keyUp event
// 6) Add a TCheckbox control for enable/disable

// If desired, initialize the list from a database, ini file etc.

procedure TForm1.FormCreate(Sender: TObject);
begin
listValues := TStringList.create;
listValues.sorted := true;
listValues.Duplicates := dupIgnore;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
listValues.free;
end;


procedure TForm1.edtListExit(Sender: TObject);
begin
listValues.add(edtList.text);
end;


procedure TForm1.edtListKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
theText: string;
i, p: integer;
begin
if not ckbxList.checked then exit; // User can enable/disable
with edtList do
case key of
8, 13, 46, 37..40: ; // No backspace, enter, delete, or arrows
else
begin
// Search for unselected portion at start of text
p := selStart; // cursor position
theText := copy(text, 0, p); // Excludes searched portion
// Match entered text portion
for i := 0 to listValues.count-1 do
begin
// Keep case of listed item
if pos(upperCase(theText), upperCase(listValues))=1 then
if compareText(theText, listValues) < 0 then
begin
text := listValues;
selStart := p;
SelLength := length(text) - selStart;
break; // Match found, so quit search
end;
end; // for
end; // case
end; // with
end;
 
接受答案了.
 

Similar threads

后退
顶部