任何实现IE地址栏中输入文字后的效果 弹出下拉框,显示相应地址。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把这些东西写入注册表,每次启动程序把注册表中的内容读取到ComboBox中去 严重关注,我正要做这个效果,可惜想到的方法比较笨,就是用文件或者数据库来保存以前的输入,然后在你每键入一个新的字母是检查以前列表(可使用一个Tstringlist来临时保存),然后就是onkeypress事件了每输入一个字符,检查整个列表与当前列表的中每一项局部内容是否匹配,然后聚焦在最匹配的上面,用户输入tab键,就修改地址 可以将数据写入一个表中,然后再写入Combobox等不就可以了 难点不在这,Combobox有一些自动操作使之完全达不到效果。 unit lyt1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, DBCtrls;type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Query1: TQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; Database1: TDatabase; Label2: TLabel; Memo1: TMemo; ComboBox1: TComboBox; Button1: TButton; DBComboBox1: TDBComboBox; procedure Edit1Change(Sender: TObject); procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ComboBox1Change(Sender: TObject); Procedure ComboBoxQuery(); procedure ComboBox1KeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; Count: Integer;implementation{$R *.dfm}procedure TForm1.Edit1Change(Sender: TObject);var Sqlstr : string;begin Sqlstr := 'SELECT DISTINCT DeviceInf.DeviceAddr as 站点地址,DeviceInf.SiteId as 站点序列号'; Sqlstr := Sqlstr + ' FROM DeviceInf where DeviceAddr <>'+#39#39' and (DeviceAddr like '; Sqlstr := Sqlstr +#39+'%'+ Edit1.Text +'%'+#39; Sqlstr := Sqlstr + ' or SiteId like '; Sqlstr := Sqlstr +#39+'%'+ Edit1.Text +'%'+#39; Sqlstr := Sqlstr + ') order by SiteId ';//Str:=Str + ' and DeviceInf.DeviceAddr like '+#39+'%'+EdtSiteName.Text+'%'+#39; //Sqlstr := 'SELECT * FROM DeviceInf '; memo1.Text := Sqlstr; try Query1.Close ; Query1.SQL.Clear ; Query1.SQL.Add(Sqlstr); Query1.Open; Query1.First; ComboBox1.Items.Clear ; ComboBox1.Text :=''; if Query1.RecordCount <= 0 then begin ShowMessage('没有符合条件的站点数据,请重新选择查询条件!'); Exit; end; while not Query1.Eof do begin ComboBox1.Items.Add(Query1.FieldByName('站点地址').AsString); Query1.Next ; end; except showmessage('查询数据出错!'); exit; end;end;procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin memo1.Text := inttostr(Key); if (Key=40) or (Key=13) then Begin ComboBox1.SetFocus; Endend;procedure TForm1.ComboBox1Change(Sender: TObject);begin ComboBoxQuery;end;procedure TForm1.ComboBoxQuery;var Sqlstr : string;I : Integer;begin Sqlstr := 'SELECT DISTINCT DeviceInf.SiteId as 站点序列号,DeviceInf.DeviceAddr as 站点地址'; Sqlstr := Sqlstr + ' FROM DeviceInf where DeviceAddr <>'+#39#39' and (DeviceAddr like '; Sqlstr := Sqlstr +#39+'%'+ ComboBox1.Text +'%'+#39; Sqlstr := Sqlstr + ' or SiteId like '; Sqlstr := Sqlstr +#39+'%'+ ComboBox1.Text +'%'+#39; Sqlstr := Sqlstr + ') order by SiteId ';//Str:=Str + ' and DeviceInf.DeviceAddr like '+#39+'%'+EdtSiteName.Text+'%'+#39; //Sqlstr := 'SELECT * FROM DeviceInf '; memo1.Lines.Add(Sqlstr) ; try Query1.Close ; Query1.SQL.Clear ; Query1.SQL.Add(Sqlstr); Query1.Open; Query1.First; //For I := 0 to ComboBox1.Items.count do // ComboBox1.Items[I]:=''; ComboBox1.Items.Clear ; //ComboBox1.Text :=''; if Query1.RecordCount <= 0 then begin //ShowMessage('没有符合条件的站点数据,请重新选择查询条件!'); end; while not Query1.Eof do begin ComboBox1.Items.Add(Query1.FieldByName('站点序列号').AsString); Query1.Next ; end; Query1.First; Count := ComboBox1.Items.count; except showmessage('查询数据出错!'); exit; end;end;procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);begin //Memo1.Lines.Add('-'+Key+'-'); //ComboBoxQuery;// Memo1.Lines.Add('-ComboBox1KeyPress-');end;procedure TForm1.Button1Click(Sender: TObject);beginMemo1.Text :='';end;procedure TForm1.FormCreate(Sender: TObject);beginCount := 0;end;end.请帮忙看看。 关于 给字符串编号 的问题???????? 怎样向Visual Foxpro写的程序中的控件发送消息?重谢!!! 兄弟门! 这样的SQL语句也有错吗?我找不到问题了。 请教++++UP有分 为什么每次执行程序关闭窗口后程序还没有释放掉 注册dll时出错! 关于使用webbrowser读取 页面input信息的问题 delphi報表問題 如何设定ClientSocket的超时时间。 Image报错,急切 在Delphi的IDE下,按Ctrl + Shift + UpArrow(或者DownArrow)为什么没有效果?
就是用文件或者数据库来保存以前的输入,然后在你每键入一个
新的字母是检查以前列表(可使用一个Tstringlist来临时保存),
然后就是onkeypress事件了
每输入一个字符,检查整个列表与当前列表的中每一项局部内容是否
匹配,然后聚焦在最匹配的上面,用户输入tab键,就修改地址
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, DBCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Database1: TDatabase;
Label2: TLabel;
Memo1: TMemo;
ComboBox1: TComboBox;
Button1: TButton;
DBComboBox1: TDBComboBox;
procedure Edit1Change(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ComboBox1Change(Sender: TObject);
Procedure ComboBoxQuery();
procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
Count: Integer;implementation{$R *.dfm}procedure TForm1.Edit1Change(Sender: TObject);
var Sqlstr : string;begin
Sqlstr := 'SELECT DISTINCT DeviceInf.DeviceAddr as 站点地址,DeviceInf.SiteId as 站点序列号';
Sqlstr := Sqlstr + ' FROM DeviceInf where DeviceAddr <>'+#39#39' and (DeviceAddr like ';
Sqlstr := Sqlstr +#39+'%'+ Edit1.Text +'%'+#39;
Sqlstr := Sqlstr + ' or SiteId like ';
Sqlstr := Sqlstr +#39+'%'+ Edit1.Text +'%'+#39;
Sqlstr := Sqlstr + ') order by SiteId ';
//Str:=Str + ' and DeviceInf.DeviceAddr like '+#39+'%'+EdtSiteName.Text+'%'+#39;
//Sqlstr := 'SELECT * FROM DeviceInf ';
memo1.Text := Sqlstr;
try
Query1.Close ;
Query1.SQL.Clear ;
Query1.SQL.Add(Sqlstr);
Query1.Open;
Query1.First; ComboBox1.Items.Clear ;
ComboBox1.Text :='';
if Query1.RecordCount <= 0 then
begin
ShowMessage('没有符合条件的站点数据,请重新选择查询条件!');
Exit;
end;
while not Query1.Eof do
begin
ComboBox1.Items.Add(Query1.FieldByName('站点地址').AsString);
Query1.Next ; end; except
showmessage('查询数据出错!');
exit;
end;
end;procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
memo1.Text := inttostr(Key);
if (Key=40) or (Key=13) then
Begin
ComboBox1.SetFocus; Endend;procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ComboBoxQuery;
end;
procedure TForm1.ComboBoxQuery;
var Sqlstr : string;
I : Integer;
begin
Sqlstr := 'SELECT DISTINCT DeviceInf.SiteId as 站点序列号,DeviceInf.DeviceAddr as 站点地址';
Sqlstr := Sqlstr + ' FROM DeviceInf where DeviceAddr <>'+#39#39' and (DeviceAddr like ';
Sqlstr := Sqlstr +#39+'%'+ ComboBox1.Text +'%'+#39;
Sqlstr := Sqlstr + ' or SiteId like ';
Sqlstr := Sqlstr +#39+'%'+ ComboBox1.Text +'%'+#39;
Sqlstr := Sqlstr + ') order by SiteId ';
//Str:=Str + ' and DeviceInf.DeviceAddr like '+#39+'%'+EdtSiteName.Text+'%'+#39;
//Sqlstr := 'SELECT * FROM DeviceInf ';
memo1.Lines.Add(Sqlstr) ;
try
Query1.Close ;
Query1.SQL.Clear ;
Query1.SQL.Add(Sqlstr);
Query1.Open;
Query1.First; //For I := 0 to ComboBox1.Items.count do
// ComboBox1.Items[I]:='';
ComboBox1.Items.Clear ;
//ComboBox1.Text :='';
if Query1.RecordCount <= 0 then
begin
//ShowMessage('没有符合条件的站点数据,请重新选择查询条件!');
end; while not Query1.Eof do
begin
ComboBox1.Items.Add(Query1.FieldByName('站点序列号').AsString);
Query1.Next ;
end;
Query1.First;
Count := ComboBox1.Items.count;
except
showmessage('查询数据出错!');
exit;
end;
end;
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
//Memo1.Lines.Add('-'+Key+'-');
//ComboBoxQuery;
// Memo1.Lines.Add('-ComboBox1KeyPress-');
end;procedure TForm1.Button1Click(Sender: TObject);
beginMemo1.Text :='';
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Count := 0;
end;end.
请帮忙看看。