Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 669

•  TDictionary Custom Sort  5 800

•  Fast Watermark Sources  5 603

•  3D Designer  8 218

•  Sik Screen Capture  5 913

•  Patch Maker  6 388

•  Айболит (remote control)  6 378

•  ListBox Drag & Drop  5 237

•  Доска для игры Реверси  94 551

•  Графические эффекты  6 570

•  Рисование по маске  5 644

•  Перетаскивание изображений  4 759

•  Canvas Drawing  5 135

•  Рисование Луны  4 863

•  Поворот изображения  4 411

•  Рисование стержней  3 116

•  Paint on Shape  2 360

•  Генератор кроссвордов  3 228

•  Головоломка Paletto  2 551

•  Теорема Монжа об окружностях  3 328

•  Пазл Numbrix  2 200

•  Заборы и коммивояжеры  2 849

•  Игра HIP  1 820

•  Игра Go (Го)  1 740

•  Симулятор лифта  2 072

•  Программа укладки плитки  1 798

•  Генератор лабиринта  2 240

•  Проверка числового ввода  1 925

•  HEX View  2 225

•  Физический маятник  1 911

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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



У меня есть форма с расположенными на ней компонентами TreeView и Memo. Значение свойства align обоих компонентов позволяет им занимать всю форму. Я хотел бы расположить между ними движок типа Splitter, пропорционально меняющий их размеры (один шире, другой меньше и наоборот), но к сожалению я обладаю лишь дистрибутивом Delphi2 (Splitter вошел в палитру только в Delphi3). Какой компонент мог бы с'имитировать поведение 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;

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





Похожие по теме исходники

Delphi Notes Splitter




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте