Çeviri:Ramazan Gülbahar.
Bu kodu ComboBox’un OnKeyPress olayına yazarsanız yarım metinleri tamamlar. Önceden kullandığınız metinlere bir handle atar ve metin karşılaştırması yaparak yarım metinleri tamamlar.
Not: OnKeyPress olayının problem çıkarma ihtimaline karşı kodu OnKeyDown olayına yazın.
Kod: Tümünü seç
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char) ;
var
Found: boolean;
j,SelSt: Integer;
TmpStr: string;
begin
{ İlk süreçte geçerli metin sağlanır }
{ Bu kod bütün metinlerin büyük harf olmasını gerektirir}
if Key in ['a'..'z'] then Dec(Key,32) ; {Sadece büyük harfleri destekle!}
with (Sender as TComboBox) do
begin
SelSt := SelStart;
if (Key = Chr(vk_Back)) and (SelLength <> 0) then
TmpStr := Copy(Text,1,SelStart)+Copy(Text,SelLength+SelStart+1,255)
else if Key = Chr(vk_Back) then {SelLength = 0}
TmpStr := Copy(Text,1,SelStart-1)+Copy(Text,SelStart+1,255)
else {tuş ['A'..'Z', etc] içinde}
TmpStr := Copy(Text,1,SelStart)+Key+Copy(Text,SelLength+SelStart+1,255) ;
if TmpStr = '' then Exit;
{ Geçerli girişleri SelSt ile güncelle }
if (Key = Chr(vk_Back)) and (SelSt > 0) then Dec(SelSt)
else if Key <> Chr(vk_Back) then Inc(SelSt) ;
Key := #0; { basılan tuş handle larını göster }
if SelSt = 0 then
begin
Text:= '';
Exit;
end;
{Eğer eşleştirme doğru ise, TmpStr geçerli bir metin türü }
Found := False;
for j := 1 to Items.Count do
if Copy(Items[j-1],1,Length(TmpStr)) = TmpStr then
begin
Text := Items[j-1]; { Bulunan eşleşmiş metinleri güncelle }
ItemIndex := j-1;
Found := True;
Break;
end;
if Found then { Son türü olmayan metni seç }
begin
SelStart := SelSt;
SelLength := Length(Text)-SelSt;
end
else Beep;
end;
end;