如何实现渐增输入?(类似IE地址输入栏)(200分)

  • 主题发起人 主题发起人 xjlaokai2000
  • 开始时间 开始时间
X

xjlaokai2000

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个控件里如EDIT控件,如何实现既能增加输入新内容,而且在输入时又能像IE地址栏一样

,能够根据输入的内容,动态提示并可将提示内容输入EDIT控件里。

能提供类似功能的控件也可,但请详细说明使用方法。

由于本人是DELPHI小虾,请回答一定要详细准确。
 
这个问题前面有人问过。我的解答不太好。
关键是没能实现
Edit1.SelStart:=n;
Edit1.SelLength:=l;
而光标停在n处,而不是n+l处。
 
在onchange里判断当前内容是否和list中的一项匹配
相同就用.text:=list.item来替换当前edit的内容。
加入一个标志防止程序这段程序修改edit时onchange重入.
 
同意g622的说法
 
在combobox的item中加入要提示的字符串。然后:
procedure TForm1.ComboBox1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i,oldlen:integer;
begin
for i:=0 to combobox1.Items.Count-1 do
begin
if pos(combobox1.text,combobox1.Items)=1 then
begin
oldlen:=length(combobox1.text);
combobox1.Text:=combobox1.items;

combobox1.SelStart:=oldlen;
combobox1.SelLength:=length(combobox1.items)
-oldlen;
exit;
end;
end;
end;
 
不同意g622
eyes4和我上次的做法类似。不能BackSpace;
问题解决关键在于
SelStart:=n;
SelLength:=l;
而光标停在n处,而不是n+l处。
 
呵呵 我以前在vb?delphi?下作过。
回去找到了会贴上来
 
请各位多多帮忙,急,急,急。。。。
SOS,SOS,
虽然eyes4提出了在在combobox中的算法,但在edit中还是不行,
其它各位的方法请再详细,我没搞清楚 。
多谢。
 
其实道理是一样的,以下是用edit与listbox的例子,如果不用listbox,自已
建一个TStrings也是一样的。

不能BackSpace的问题可以解决,同时解决了方向键的问题。

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i,oldlen:integer;
begin
if key in [8,37..40] then exit;
for i:=0 to listbox1.Items.Count-1 do
begin
if pos(edit1.text,listbox1.Items)=1 then
begin
oldlen:=length(edit1.text);
edit1.Text:=listbox1.items;

edit1.SelStart:=oldlen;
edit1.SelLength:=length(listbox1.items)
-oldlen;
exit;
end;
end;
end;
 
见DELPHI 5 HELP -》Selstart 的 Example :
The following example shows how to complete partial strings typed into a combo
box. The code represents the OnKeyPress event handler of the combo box, which
performs most of the default keystroke handling before finding a matching list
item and updating the text.
 
多人接受答案了。
 
后退
顶部