dblookupcombox 的輸入速度調整 |
缺席
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位! 我設置一組 dblookupcombobox元件, 假設其中有一組(一共1000組記錄)為
王大頭 在combox closeup的狀態下使用者不希望以下拉方式來選擇, 因為1000組太多了
, 所以希望直接輸入王大再下拉就可以更快找到
如果輸入的速度平均則可以輸入王大就找到"王大"起頭的記錄,
但如果輸入一個"王", 過了4-5秒再輸入"大", 則系統即消除前一個"王"的記憶
反而找到以"大"為開頭的記錄, 有沒有辦法可以關閉或延長這個等待時間, 以
配合中打速度慢的人, 謝謝!
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
我沒用過 TDBLookupComboBox,以下推測應該也是八九不離十。
在Delphi 源碼中,有定義以下程式。我把它列出,方便證明我的推測。
procedure TDBLookupControl.ProcessSearchKey(Key: Char); var TickCount: Integer; S: string; CharMsg: TMsg; begin if (FListField <> nil) and (FListField.FieldKind in [fkData, fkInternalCalc]) and (FListField.DataType in [ftString, ftWideString]) then case Key of #8, #27: SearchText := ''; #32..#255: if CanModify then begin TickCount := GetTickCount; if TickCount - SearchTickCount > 2000 then SearchText := ''; SearchTickCount := TickCount; if SysLocale.FarEast and (Key in LeadBytes) then if PeekMessage(CharMsg, Handle, WM_CHAR, WM_CHAR, PM_REMOVE) then begin if CharMsg.Message = WM_Quit then begin PostQuitMessage(CharMsg.wparam); Exit; end; SearchText := SearchText Key; Key := Char(CharMsg.wParam); end; if Length(SearchText) < 32 then begin S := SearchText Key; try if FListLink.DataSet.Locate(FListField.FieldName, S, [loCaseInsensitive, loPartialKey]) then begin SelectKeyValue(FKeyField.Value); SearchText := S; end; except { If you attempt to search for a string larger than what the field can hold, and exception will be raised. Just trap it and reset the SearchText back to the old value. } SearchText := S; end; end; end; end; end;在標示紅字,限定 兩秒就重新設定 SearchText := ''; 由於該 秒數變數為私有,無法更改! 為一一途,為更改元件,可能還有些希望。 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |