存到数据库里就可以了,我作数据库程序向来都用Tedit. edit的显示内容是自己维护的,稍加改动即可实现,搂住所说功能!Tedit的KeyDown事件 procedure Trydafrm.jkzkKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=40 then begin selectfrm.Left:=self.Left+jkzk.Left+4; selectfrm.Top:=self.Top+jkzk.Top+20+jkzk.Height; selectfrm.Width:=jkzk.Width; jkzk.Text:=selectfrm.selectitem('lib_健康状况','健康状况',false,jkzk.Text); end; end; //selectfrm的全部代码unit select;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, Grids, DBGrids, ADODB, Menus, StdCtrls;type Tselectfrm = class(TForm) ADODataSet1: TADODataSet; DBGrid1: TDBGrid; DataSource1: TDataSource; PopupMenu1: TPopupMenu; N1: TMenuItem; procedure DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure DBGrid1DblClick(Sender: TObject); function selectitem(tabname:string;fieldname:string;bm:boolean;text:string):string ; private { Private declarations } public { Public declarations } end;var selectfrm: Tselectfrm;implementation uses datau; {$R *.dfm}procedure Tselectfrm.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key=13) then begin if adodataset1.RecordCount>0 then self.Tag:=1 else self.Tag:=0; self.Close; end; if key=27 then begin self.Tag:=0; self.Close; end; end;procedure Tselectfrm.DBGrid1DblClick(Sender: TObject); begin self.Close; end; function Tselectfrm.selectitem(tabname:string;fieldname:string;bm:boolean;text:string):string ; begin with ADODataSet1 do begin Close; CommandText:='select '+fieldname+' from '+tabname+' where '+fieldname+' like ''%'+text+'%'''; if bm then CommandText:=CommandText+' or 编码 like ''%'+text+'%'''; open; selectfrm.ShowModal; if self.Tag=1 then Result:=fieldbyname(fieldname).AsString else Result:=text; close; end; end; end.'lib_健康状况'表的结构ID int 4 0 健康状况 varchar 50 1可增加“编码“字段,到时输入编码即可自动显示
写注册表啊?那要写多少啊?而且还要分类写啊.好象我这样大手笔给分的不多啊,期待大侠啊!
曾经看过类似的,不过是用combobox
如果会fontain()提出的combobox方法,则可以使用一个不可见的combobox记录以前录入的数据,在edit的change中通过向combobox传递输入值...
自动补全文件路径和名称。 function SHAutoComplete(h:hwnd;f:dword):dword;stdcall;external 'Shlwapi.dll';
procedure TForm1.Button1Click(Sender: TObject);begin SHAutoComplete(Edit1.Handle,0);end;
firetoucher(风焱) : 我说的分类是指象IE一样,凡是输入姓名的地方只会把以前输入过的名字列出来,输入证件的地方只会把以前的录入过证件数据列出来人.那写注册表不是要好多吗?如果IE是那样实现的(好象也是),它是写的那些值啊?lion_lh(xmanx) : 这段代码我试过,没有用啊!
对应的
edit的显示内容是自己维护的,稍加改动即可实现,搂住所说功能!Tedit的KeyDown事件
procedure Trydafrm.jkzkKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=40 then
begin
selectfrm.Left:=self.Left+jkzk.Left+4;
selectfrm.Top:=self.Top+jkzk.Top+20+jkzk.Height;
selectfrm.Width:=jkzk.Width;
jkzk.Text:=selectfrm.selectitem('lib_健康状况','健康状况',false,jkzk.Text);
end;
end;
//selectfrm的全部代码unit select;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, ADODB, Menus, StdCtrls;type
Tselectfrm = class(TForm)
ADODataSet1: TADODataSet;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBGrid1DblClick(Sender: TObject);
function selectitem(tabname:string;fieldname:string;bm:boolean;text:string):string ;
private
{ Private declarations }
public
{ Public declarations }
end;var
selectfrm: Tselectfrm;implementation
uses datau;
{$R *.dfm}procedure Tselectfrm.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=13) then
begin
if adodataset1.RecordCount>0 then self.Tag:=1 else self.Tag:=0;
self.Close;
end;
if key=27 then
begin
self.Tag:=0;
self.Close;
end;
end;procedure Tselectfrm.DBGrid1DblClick(Sender: TObject);
begin self.Close;
end;
function Tselectfrm.selectitem(tabname:string;fieldname:string;bm:boolean;text:string):string ;
begin
with ADODataSet1 do
begin
Close;
CommandText:='select '+fieldname+' from '+tabname+' where '+fieldname+' like ''%'+text+'%''';
if bm then CommandText:=CommandText+' or 编码 like ''%'+text+'%''';
open;
selectfrm.ShowModal;
if self.Tag=1 then Result:=fieldbyname(fieldname).AsString
else Result:=text;
close;
end;
end;
end.'lib_健康状况'表的结构ID int 4 0
健康状况 varchar 50 1可增加“编码“字段,到时输入编码即可自动显示
1:有数据输入的时候,判断是否是新纪录。如果是,记录下来。
2:程序启动时,动态的加载这些记录在Combobox的Item中。
方法1,存在注册表里,IE的自动完成好象是这样做的;
方法2,自己写一个文件,好象挺麻烦的;
方法3,写在数据库里,嗯,好象行的通.其实这些方案与我当初的设想都不同.当初我提这个问时,是想是不是有这么一个COM服务程序提供了这么一个接口.之所以有这样的想法,也是由于看到了和lion_lh(xmanx)一样的代码,联想到自己用IE时自动完成也确实省了不少的事.可是那段代码行不通,令我好失望啊.大家提的这些方法不现程度上加大了复杂度了!
注册表也不好,因为要是有很多项写注册表也不怎么好~写在一个text文件里面,一行一个纪录,程序启动的时候动态加载到combobox中~哪怕是几千行,对于txt文件操作,效率也是很高的~其实实现也就几行代码~
开始输入时从数据库中取出,
在输入后你可以用tdataset的locate方法
存到文件里面吧然后用edit.onchange的事件,搜索出来,
然后动态产生一个listbox,显示那些搜索出来的结果呵呵~不知道行不行》?
type
TNote=record
Text:string;
ControlName:string;
end;
自己记录