Ç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;