Как создать разделитель, содержащий компоненты?
Я хотел бы поместить некоторые кнопки между двумя изменяемыми размерами панелями или, если возможно, непосредственно на разделитель. Как я могу достичь, они будут двигаться вместе с разветкителем; как я их привязываю?
![screenshot]()
Edit:
Возможно, самое главное, о котором я забыл упомянуть. Этот сплиттер должен быть таким же широким, как на снимке экрана, и кнопки должны лежать на нем; так что теперь эти кнопки фактически "плавают над сплиттером".
Спасибо большое
Ответы
Ответ 1
Йо не может сделать это автоматически.
Вручную вы можете изменить свойство Left в кнопках в событии OnMoved сплиттера.
Там нет хорошего решения (визуализация на момент перетаскивания не очень хорошая), но он может сделать результат, который вам нужен. Вы можете решить эту проблему, попробуйте ResizeStyle = rsUpdate; При этом, когда вы перетаскиваете сплиттер, кнопки тоже перемещаются.
procedure TForm1.Splitter1Moved(Sender: TObject);
begin
SpeedButton1.Left := Splitter1.Left + 40;
SpeedButton2.Left := Splitter1.Left + 40;
SpeedButton3.Left := Splitter1.Left + 40;
SpeedButton4.Left := Splitter1.Left + 40;
end;
Здесь вы можете просмотреть результат.
Привет
Ответ 2
Вот скриншот из моего приложения:
![]()
Эта форма имеет один TSplitter
, расположенный справа от древовидной структуры в левой панели. Справа от разделителя находится TPanel
, который содержит кнопку.
Здесь он находится во время разработки, и вы можете увидеть сплиттер, нарисованный пунктирной линией:
![]()
Фокус в том, что сплиттер не содержит элементов управления - для этого вы используете панель.
Итак, используя ваше имя, вам нужно заменить Splitter1 панелью, чтобы содержать кнопки, и добавить разделитель между Panel1 и новой панелью. Левая и средняя панели и разделитель выравниваются alLeft
, а правая панель ручек выравнивается alClient
.
Установите splitter1.autosnap:= false
Ответ 3
Вы можете вставлять панели друг в друга.
+--------------+#+------------+
|+---------+ p |#| panel3 |
|| panel1 | a |#| |
|| | n |#| |
|| | e |#| |
|| | l |#| |
|| | 2 |#| |
где #
- разделитель.
Поместите кнопки в правой части панели2.
Или даже лучше поместите дополнительную панель4 на панель2, сделайте это
panel4.align:= alRight;
panel1 align:= alClient;
panel2.Align:= alClient;
splitter1.align:= alright or alLeft //experiment here
panel3.Align:= alRight;
Это должно сделать трюк.
Ответ 4
Есть одно важное уведомление. Обе панели между Splitter должны иметь одинаковый параметр AlignWithMargins
. (Оба истины или оба ложные). В противном случае сплиттер не работает. Я боролся с этой проблемой в течение нескольких дней