找了半天没找到类似的问题,请问?(100分)

  • 主题发起人 主题发起人 linghua_meng
  • 开始时间 开始时间
L

linghua_meng

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现类似输入法的功能:将符合条件的数据以动态List的形式显示出来以供选择,如输入“刘”,则将“刘X”,“刘XX”显示出来,输入“刘X”,则将“刘XX”显示出来,先行谢过!
 
用Combobox来做吧,可以参考下面的代码:

private
selectItem:boolean;

procedure TForm1.FormShow(Sender: TObject);
begin
selectitem:=true;
{With Dataset1 do
begin
Close;
CommandText:='select distinct 相应字段 from 表 ';
Open;
Combobox1.items.Clear;
while not eof do
begin
Combobox1.items.add(fieldbyname(相应字段).asstring);
next;
end;
close;
end;}
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var sinput, sselected : string;
i, j : integer;
begin
j := 0;
if not selectitem then
begin
selectitem := true;
exit;
end;
sinput := copy((Sender as Tcombobox).text, 1, (Sender as Tcombobox).SelStart);
for i := 0 to (Sender as Tcombobox).items.count - 1 do
if copy((Sender as Tcombobox).items, 1, length(sinput)) = sinput then
begin
if j = 0 then sselected := (Sender as Tcombobox).items;
j := j + 1;
end;
if j > 0 then (Sender as Tcombobox).Text := sselected
else (Sender as Tcombobox).Text := sinput;
(Sender as Tcombobox).SelStart := length(sinput);
(Sender as Tcombobox).SelLength := length((Sender as Tcombobox).text) - length(sinput);
end;

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#8 then selectitem:=false
else if key=#13 then selectNext(ActiveControl,true,true)
else (Sender as TCombobox).droppedDown:=true;
end;

procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
(Sender as TCombobox).DroppedDown:=false;
end;
 
如果是数据库可用SQL语句在charge事件中动态填写
jgz
 
猎手1号的答案不能满足我的要求,请注意“动态”是指在输入条件的同时改变,而不是输入完成后再显示;
KOKS则没有详细解答,一样无用,其实动态生成SQL我也知道。
请继续!
 
在输入的地方捕捉text的change事件
在change事件里写动态查询代码
 
对OnChange或OnKeyPress中写代码阿
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Query1.Close;
Query1.Sql.clear;
Query1.sql.add('select 姓名 from table where 姓名 like ''%'+ComboBox1.text+'%''');
Query1.open;
Query1.first;
while not Query1.eof do
begin
ComboBox1.items.clear;
ComboBox1.items.add(Query1.fieldbyname('姓名').asString);
Query1.next;
end;
end;
 
猎手1号,不好意思,错怪你了,你的能实现我的功能,谢谢!
 
后退
顶部