Вы не можете визуально расширить элемент управления за пределы родительской формы. Но вы можете добиться эффекта, создав отдельную форму без полей для этого элемента управления и частично отобразив эту вторичную форму поверх первой:
Здесь Form1
- это основная форма со следующим обработчиком OnClick
для Button1
:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(nil);
try
Form2.Left := ClientOrigin.X + 140;
Form2.Top := ClientOrigin.Y + ClientHeight - 20;
Form2.ShowModal;
Edit1.Text := IntToStr(Form2.ModalResult);
finally
Form2.Free;
end;
end;
Поскольку вторая форма (Form2
) не связана (с точки зрения дочерних элементов) с Form1
, мы должны указать ее местоположение в виде пикселей экрана, но все же относительно Form1
. Поэтому мы используем Form1.ClientOrigin
(`клиентская область Form1 сверху и слева в качестве координат экрана) в качестве ссылки.
Вторая форма, Form2
, которая содержит TListBox
, имеет следующие настройки свойств
BorderStyle = bsNone
KeyPreview = True (to catch `Enter` key)
и имеет обработчик OnKeyUp
, записанный как
procedure TForm2.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then
ModalResult := ListBox1.ItemIndex;
end;