Article B0002 Delphi
Create an editable TListBox

The following code allows you to create an editable TListBox:
    
{
NOTE : This will also work with an OwnerDraw ListBox, but be
sure you "pad" the Left Property of the Edit so any icons etc,
do not get covered up by the TEdit. Also be aware that there will
be a bit of "flashing" if you do use an OwnerDraw ListBox
}
{This is in a Popup menu.}
procedure TForm1.Change1Click(Sender: TObject);
var
  I9: Integer;
  ColInt: Integer;
  LRect: TRect;
begin
  LRect := ListBox1.ItemRect(ListBox1.ItemIndex);
  {Set the size of the TEdit}
  Edit1.Top := LRect.Top + 1;
  Edit1.Left := LRect.Left + 1;
  Edit1.Width := ListBox1.Canvas.TextWidth
  (ListBox1.Items.Strings[ListBox1.ItemIndex]) + 6;
  Edit1.Height := (LRect.Bottom - LRect.Top) + 1;
  Edit1.Text := ListBox1.Items.Strings[ListBox1.ItemIndex];
  ListBox1.Selected[ListBox1.ItemIndex] := False;
  Edit1.Visible := True;
  Edit1.SelectAll;
  Edit1.SetFocus;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Edit1.Visible := False;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject;
                                var Key: Char);
var
  I8: Integer;
begin
  if Key = #13 then
  begin
    I8 := ListBox1.ItemIndex;
    ListBox1.Items.Delete(ListBox1.ItemIndex);
    ListBox1.Items.Insert(I8, Edit1.Text);
    Edit1.Visible := False;
    Key := #0;
  end;
end;