TListBox İçine TEdit Yerleştirmek Ve Kullanmak

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

TListBox İçine TEdit Yerleştirmek Ve Kullanmak

Mesaj gönderen RamazanG »

Makale: Zarko Gajic.
Çeviri: Ramazan Gülbahar.


Dizayn zamanında TListBox komponentini metin listelerini göstermek için kullanırız. ListBox nesneleri direkt olarak değiştirilemez . Eğer ListBox içinde EditBox kullanmayı istersen aşşağıdaki yöntemi kullanabilirsin.

Dinamik olarak TEdit komponentine "ListEdit" adını verip Formun OnCreate olayında oluşturacağız. ListBox1 formun üzerindeyken, ListEditin parenti olarak seçelim, sonra OnClick olayı ile ListBox1’in sağ üst köşesine bir edit kontrolü oluşturacağız.
ListEdit odaklanarak, enter tuşu basıldığı zaman (hint Enter Key = #13) ListBox içinden eski nesneyi silinecek onun yerine ListEdit içine yazdığımız yeni metin yazılacak.

Kod: Tümünü seç

type
   TForm1 = class(TForm)
     ...
   private
     ListEdit : TEdit;
     procedure ListEditKeyPress(Sender: TObject; var Key: Char) ;
   end;

...

{TEdit oluştur ve parent’ini ListBox yap}
procedure TForm1.FormCreate(Sender: TObject) ;
begin
   ListEdit := TEdit.Create(self) ;
   ListEdit.Visible := false;
   ListEdit.Ctl3D := false;
   ListEdit.BorderStyle := bsNone;
   ListEdit.Parent := ListBox1;
   ListEdit.Width := ListBox1.ClientWidth;
   ListEdit.OnKeyPress := ListEditKeyPress;
end;

{Seçili satırda Edit oluştur}
procedure TForm1.ListBox1Click(Sender: TObject) ;
var
   ii : integer;
   lRect: TRect;
begin
   ii := ListBox1.ItemIndex;
   if ii = -1 then exit;

   lRect := ListBox1.ItemRect(ii) ;
   ListEdit.Top := lRect.Top + 1;
   ListEdit.Left := lRect.Left + 1;
   ListEdit.Height := (lRect.Bottom - lRect.Top) + 1;

   ListEdit.Text := ListBox1.Items.Strings[ii];
   ListBox1.Selected[ii] := False;

   ListEdit.Visible := True;
   ListEdit.SelectAll;
   ListEdit.SetFocus;
end;

{Enter tuşuna basılınca değiştir}
procedure TForm1.ListEditKeyPress(Sender: TObject; var Key: Char) ;
var
   ii: Integer;
begin
   if Key = #13 then
   begin
     ii := ListBox1.ItemIndex;
     ListBox1.Items.Delete(ii) ;
     ListBox1.Items.Insert(ii, ListEdit.Text) ;
     ListEdit.Visible := False;
     Key := #0;
   end;
end;

{ListBox’tan başka bir yere odaklanırsa editbox’ı gösterme}
procedure TForm1.ListBox1Exit(Sender: TObject) ;
begin
   ListEdit.Visible := false;
end;

Cevapla