Как создать разделитель, содержащий компоненты? - PullRequest
11 голосов
/ 24 мая 2011

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

screenshot

Edit:
Может быть, самое важное, что я забыл упомянуть. Этот сплиттер должен быть таким же широким, как на скриншоте, и кнопки должны лежать на нем; таким образом, эти кнопки фактически «плавают над сплиттером».

Большое спасибо

Ответы [ 4 ]

6 голосов
/ 24 мая 2011

Йо не может сделать это автоматически.
Вручную вы можете изменить свойство 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;

Здесь вы можете просмотреть результат.

Привет

5 голосов
/ 24 мая 2011

Вот скриншот из моего приложения:

Эта форма имеет один TSplitter, расположенный справа от дерева в левой панели.Справа от разделителя находится TPanel, который содержит кнопку.

Здесь это во время разработки, и вы можете увидеть разделитель, нарисованный пунктирной линией:

Хитрость в том, что сплиттер не содержит элементов управления - для этого вы используете панель.

Итак, при использовании именования вам нужно заменить Splitter1 панелью, содержащей кнопки и добавитьразделитель между Panel1 и новой панелью.Левая и средняя панели и разветвитель выровнены alLeft, а правая панель управления выровнена alClient.Комплект splitter1.autosnap:= false

1 голос
/ 22 октября 2012

Есть одно важное замечание.Обе панели между Splitter должны иметь одинаковый параметр AlignWithMargins.(Оба истинные или оба ложные).В противном случае сплиттер не работает.Я боролся с этой проблемой в течение нескольких дней

1 голос
/ 24 мая 2011

Вы можете вкладывать панели друг в друга.

+--------------+#+------------+
|+---------+ 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;

Это должно сработать.

...