2016-06-03 3 views

답변

1

exsist는 아니지만 직접 작성할 수 있습니다.

은 콤보에 대한 예입니다하지만 당신은 내가 대답이 '아니오'생각하지만, 바퀴를 개혁하기 전에, 나는이 그냥 이름이 변경되지해야 할 comboedit에게

{Combobox default behavior} 

TCombobox = class(FMX.ListBox.TComboBox) 
    private 
    LastTimeKeydown:TDatetime; 
    Keys:string; 
    protected 
    procedure KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState);override; 
    end; 

{ TCombobox } 

procedure TCombobox.KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); 
var 
    aStr:string; 
    I: Integer; 
begin 
    if key=vkReturn then exit; 
    if (keychar in [chr(48)..chr(57)]) or (keychar in [chr(65)..chr(90)]) or (keychar in [chr(97)..chr(122)]) then begin 
    //combination of keys? (500) is personal reference 
    if MilliSecondsBetween(LastTimeKeydown,Now)<500 then 
     keys:=keys+keychar 
    else // start new combination 
     keys:=keychar; 
    //last time key was pressed 
    LastTimeKeydown:=Now; 
    //lookup item 
    for I := 0 to count-1 do 
     if uppercase(copy(items[i],0,keys.length))=uppercase(keys) then begin 
     itemindex:=i; 
     exit; //first item found is good 
     end; 
    end; 
    inherited; 
end; 
+0

on loop'I : = 0 to count-1 do 대문자 (copy (items [i], 0, keys.length)) = 대문자 (keys)이면 do 시작 itemindex : = i; 휴식; // 찾은 첫 번째 항목이 좋음 끝;'exit'을'break'로 바꿉니다. 'Exit'는 루프를 깨는 좋은 방법이 아닙니다. –