Как отобразить элемент управления (например, TListbox) за пределами TForm
1 ответ
Решение
Вы не можете визуально расширить контроль за пределы родительской формы. Но вы можете добиться эффекта, создав отдельную форму без полей для этого элемента управления и частично отобразив эту вторичную форму поверх первой:
Вот 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;