Библиотека программиста

22.09.2024 - Конструирование Splitter

У меня есть форма с расположенными на ней компонентами TreeView и Memo. Значение свойства align обоих компонентов позволяет им занимать всю форму. Я хотел бы расположить между ними движок типа Splitter, пропорционально меняющий их размеры (один шире, другой меньше и наоборот). Какой компонент мог бы симитировать поведение Splitter и как это реализовать?




Предположим, Ваш TreeView расположен в левой, а Memo в правой части формы. Вам нужно сделать следующее:

* Установите свойство Align компонента TreeView на alLeft.
* Вырежьте (Ctrl-X) компонент TMemo из вашей формы.
* Добавьте компонент Panel и присвойте его свойству Align значение alClient.
* Внутри панели разместите другой компонент Panel.
* Установите его ширину, равной 8 пикселам, свойству Align присвойте значение alLeft.
* Скопируйте вырезанный компонент TMemo в панель Panel1 и присвойте свойству Align значение alClient.

Код может быть модифицирован для получения горизонтального движка - идея, надеюсь, будет вам понятна.

Panel2 - движок: теперь вам необходимо добавить процедуры, приведенные ниже. Ваш код будет выглядеть приблизительно так:

Код
type

TForm1 = class(TForm)
TreeView1: TTreeview;
Panel1: TPanel;
Panel2: TPanel;
Memo1: TMemo;
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift:TShiftState;
X, Y: Integer);
private
Resizing: Boolean;
public
...
end;

procedure TForm1.Panel2MouseDown(Sender: TObject; Button:

TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

Resizing:=true;
end;

procedure TForm1.Panel2MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);
begin

Resizing:=false;
end;

procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState;

X, Y: Integer);
begin

if Resizing then begin
TreeView1.Width:=TreeView1.Width+X;
// Предохранение от странных ошибок перерисовки при изменении размеров:
Panel1.Invalidate;
end;
end;

Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=38