我有一個搜索字段,用戶搜索每個輸入的字符。所以沒有搜索按鈕。問題是搜索速度很慢。我的想法是在每個鍵輸入一點後延遲搜索,所以如果用戶快速輸入搜索字符串,則不用搜索就可以進行搜索。然後執行搜索。我的代碼到目前爲止。如何搜索每一個性能更好的字符?
procedure TAgreementModuleForm.SetIsSearching(const Value: Boolean);
begin
fIsSearching := Value;
tmrDelayKey.Enabled := Value;
end;
procedure TAgreementModuleForm.tmrDelayKeyTimer(Sender: TObject);
begin
IsSearching := True;
end;
procedure TAgreementModuleForm.txtSearchAgreementCustomerExit(Sender: TObject);
begin
IsSearching := False;
end;
procedure TAgreementModuleForm.txtSearchAgreementCustomerKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
vSearchExpression: string;
begin
if IsSearching then
begin
vSearchExpression := Trim(txtSearchAgreementCustomer.Text);
IsSearching := False;
if vSearchExpression <> '' then
DoSearch(vSearchExpression);
end
else
tmrDelayKey.Enabled := True;
end;
tmrDelayKey是延時爲1000ms的TTimer。 IsSearching是一個布爾屬性。
這是用戶停止編寫搜索時無法使用的代碼。 這怎麼能改進?
您可能會攔截Char(13)以根據需要進行搜索。您可以重置OnKeyup中的計時器(disbled/enabled),並處理OnTimer內的計時器搜索和禁用。 – bummi
對於那個搜索編輯,我會寫一個組件['像這樣'](http://pastebin.com/45Z2d7pE)。它考慮到了任何變化,而不僅僅是當用戶在鍵盤上鍵入時(您應該考慮像通過彈出菜單粘貼文本等情況)。 – TLama