TComboBox İçindeki Yarım Metni Tamamlama

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
RamazanG
Üye
Mesajlar: 73
Kayıt: 16 Tem 2010 03:38

TComboBox İçindeki Yarım Metni Tamamlama

Mesaj gönderen RamazanG »

Makale:Zarko Gajic.
Ç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;

Cevapla