delphi中Memo1中ListBox_keyWords代码补全
拖一个Memo1下拉ListBox到界面上,假设ListBox_keyWords,里已加载关键字
最终效果:
Memo1里输入关键字开头字母,自动带出ListBox_keyWords开头的关键字,选择好 关键字,回车,将关键字全称输入到Memo1原位置
全局变量aMemoInput代表,已输入的关键字开头字母
ListBox_keyWords_Refresh(aMemoInput);
更新ListBox_keyWords列表
procedure TForm8.ListBox_keyWords_Refresh(aInput:string);
var i:integer;a:string;
begin
if ainput='' then begin ListBox_keyWords.Visible:=false; exit; end;
ListBox_keyWords.Items.Clear;
for i := 0 to aStringList.Count -1 do begin
if sameText( leftStr( aStringList[i],length(aMemoInput)) ,aInput) then begin
ListBox_keyWords.Items.Add(aStringList[i])
end;
if ListBox_keyWords.Items.Count>0 then begin
a:= leftStr( Memo1.Lines[Memo1.CaretPos.Y ] , Memo1.CaretPos.x) ;
ListBox_keyWords.Left:=length(a) * memo1.Font.Size+9;
ListBox_keyWords.Top:=(memo1.CaretPos.Y-Memo1.Perform(EM_GETFIRSTVISIBLELINE,0,0)+2)*abs(memo1.Font.Height)+22; ;
ListBox_keyWords.BringTofront;
ListBox_keyWords.Visible:=True;
end
else ListBox_keyWords.Visible:=false;
end;
end;
procedure TForm8.ListBox_keyWordsKeyPress(Sender: TObject; var Key: Char);
var tempStr:string;
begin
if key=#27 then //esc
begin
ListBox_keyWords.Visible:=false;
memo1.SetFocus;
aMemoInput:='';
end;
if key =#13 then begin //回车键
tempStr:= ListBox_keyWords.Items[ListBox_keyWords.ItemIndex] ;
Memo1.SelText := rightstr( tempStr ,length(tempStr)-length(aMemoInput));
ListBox_keyWords.Visible:=false;
memo1.SetFocus;
aMemoInput:='';
end;
end;
procedure TForm8.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if key in ['a'..'z','A'..'Z','_'] then begin
aMemoInput:=aMemoInput+key;
ListBox_keyWords_Refresh(aMemoInput);
end;
end;
procedure TForm8.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if ( key=VK_DOWN) and (ListBox_keyWords.Visible) then begin //按 向下键,选择
if ListBox_keyWords.CanFocus then ListBox_keyWords.SetFocus;
ListBox_keyWords.ItemIndex:=0;
key:=0;
exit;
end;
if ( key=VK_BACK) then begin // 删除键
aMemoInput:=leftstr(aMemoInput,length(aMemoInput)-1) ;
ListBox_keyWords_Refresh(aMemoInput);
key:=0;
exit;
end;
end;
\
procedure TForm8.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ListBox_keyWords.Visible:= False;
aMemoInput:='';
end;