Как создать разделитель, содержащий компоненты?

Я хотел бы поместить некоторые кнопки между двумя изменяемыми размерами панелями или, если возможно, непосредственно на разделитель. Как я могу достичь, они будут двигаться вместе с разветкителем; как я их привязываю?

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. (Оба истины или оба ложные). В противном случае сплиттер не работает. Я боролся с этой проблемой в течение нескольких дней