bannerbannerbanner
полная версияПрограммирование на Delphi 7

Сергей Николаевич Талипов
Программирование на Delphi 7

3. РАЗРАБОТКА ОКНА С НЕСКОЛЬКИМИ ИНТЕРФЕЙСНЫМИ ЗОНАМИ И РАСШИРЕННЫМ ИНТЕРФЕЙСОМ

Рассмотрим задачу, когда нужно сделать программу, окно которой состоит из нескольких зон, на которых находятся компоненты. Размер зон нужно уметь менять во время работы программы с помощью мыши. Пример задачи приведен на рис. 2.

Рис. 2. Форма с несколькими зонами и компонентами

В рассматриваемой задачи имеется три зоны: зона выбора пункта из компонента-дерева (верхняя левая), зона информации (верхняя правая) и зона управления (внизу). Мышью можно менять размеры «зона выбора – зона информации» и «зоны выбора и информации – зона управления».

Разработка примера происходит в три приема:

создание на форме зон из панелей и полос разделения

установка на зоны нужных компонент

написание процедур обработки компонент

3.1. Создание на форме зон

Для создания окна с несколькими областями, с изменяющимися размерами, нужно использовать компоненты «Panel» (вкладка «Standard»), «Splitter» (вкладка «Additional») и Инспектор объектов для их связывания. Рассмотрим алгоритм создания окна с тремя областями (см. рис.3):

наносим на пустую форму компонент «Panel1»;

устанавливаем у компонента «Panel1» выравнивание по правому краю (через Инспектор объектов): Panel1.Align:=alRight;

наносим на пустую часть формы слева компонент «Splitter1»;

устанавливаем у компонента «Splitter1» выравнивание по правому краю: Splitter1.Align:=alRight;

наносим на левую (пустую) часть формы компонент «Panel2»;

устанавливаем у компонента «Panel2» выравнивание по нижнему краю: Panel2.Align:=alBottom;

наносим на пустую часть формы слева компонент «Splitter2»;

устанавливаем у компонента «Splitter2» выравнивание по нижнему краю: Splitter2.Align: =alBottom;

наносим на левую верхнюю (пустую) часть формы компонент «Panel3»;

устанавливаем у компонента «Panel3» выравнивание по всему объему:Panel3.Align: =alClient.

Рис. 3. Форма с несколькими областями

3.2. Установка на зоны нужных компонент

После создания формы с несколькими зонами наносят на каждую панель компоненты и устанавливают у них свойство «Align» в значение «alClient» (выравнивание по всей области). На «Panel1» нанесем компонент «Memo1», на «Panel3» компонент-дерево «TreeView1» (вкладка «Win32»), на «Panel2» семь кнопок и компонент статусной строки «StatusBar1» (вкладка «Win32»).

Компонент-дерево «TreeView1» содержит в свойстве «Items» набор узлов и под узлов дерева. Содержимое дерева может задаваться через Инспектор объектов (и свойство «Items»), загружаться из файла или генерироваться программно.

Компонент статусной строки «StatusBar1» содержит «Panels» набор секций статусной строки. По-умолчанию в этом компоненте нет секций, поэтому их нужно создавать либо программно, либо через Инспектор объектов и свойство «Panels». В данном примере нужно сделать через Инспектор объектов три секции статусной строки.

3.3. Процедуры многозонной программы

  private

    { Private declarations }

    td: TTime; nf: string;

procedure TForm1.FormCreate(Sender: TObject);

{ Создание формы }

begin

  Form1.Position:=poScreenCenter;

  TreeView1.ReadOnly:=true; Memo1.ReadOnly:=true;

  Memo1.Clear;

  td:=now; nf:=ExtractFilePath(Application.ExeName)+'tree.txt';

  button7.Click;

end;

procedure TForm1.Button7Click(Sender: TObject);

{ Создаем программно дерево }

var tr, tr2: TTreeNode;

begin

  with TreeView1.Items do begin

    Clear; memo1.Clear;

    tr:=Add(nil, 'Принтеры');

      AddChild(tr,'матричные');

      tr2:=AddChild(tr,'струйные');

        AddChild(tr2,'цветные');

        AddChild(tr2,'черно-белые');

        AddChild(tr2,'фото-принтер');

    tr:=Add(nil, 'Мониторы');

      AddChild(tr,'LCD');

      AddChild(tr,'аналоговые с ЭЛТ');

   TreeView1.FullExpand;

  end;

end;

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

  Shift: TShiftState; X, Y: Integer);

{ Обработка выбора пункта в дереве }

var k: integer;

begin

  { Проверяем, выбран ли пункт, или это раскрытие/скрытие узлов дерева }

    if (htOnItem in TreeView1.GetHitTestInfoAt(X,Y)) then begin

    { Очищаем дерево }

    memo1.Clear;

    k:=TreeView1.Selections[0].AbsoluteIndex+1;

    memo1.Lines.Add('Выбран пункт № '+inttostr(k));

    memo1.Lines.Add('Содержимое пункта: '+TreeView1.Selections[0].Text);

  end;

end;

procedure TForm1.Button1Click(Sender: TObject);

{ Сохранение дерева в файл }

begin

  TreeView1.SaveToFile(nf);

end;

procedure TForm1.Button2Click(Sender: TObject);

{ Чтение дерева из файла }

begin

  TreeView1.LoadFromFile(nf);

  { Раскрываем все узлы дерева }

  TreeView1.FullExpand;

end;

procedure TForm1.Button3Click(Sender: TObject);

{ Сворачиваем все узлы дерева }

begin

  TreeView1.FullCollapse;

end;

procedure TForm1.Button4Click(Sender: TObject);

{ Раскрываем все узлы дерева }

begin

  TreeView1.FullExpand;

end;

procedure TForm1.Button6Click(Sender: TObject);

{ Очищаем дерево }

begin

  TreeView1.Items.Clear; memo1.Clear;

end;

procedure TForm1.Button5Click(Sender: TObject);

{ Закрытие программы }

begin

  close;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

{ Процедура таймера }

begin

  StatusBar1.Panels[0].Text:='Вы работаете с программой: '+timetostr(now-td);

  StatusBar1.Panels[1].Text:='Время: '+timetostr(now);

  StatusBar1.Panels[2].Text:='Дата: '+datetostr(now);

end;

4. РАСШИРЕННЫЕ СРЕДСТВА ДЛЯ СОЗДАНИЯ ИНТЕРФЕЙСА ПРОГРАММЫ «WIN32»

1)  ImageList – контейнер с картинками формата «bmp»

Height – высота картинок

Width – ширина картинок

2) CoolBar – контейнер плавающих панелей

Bands – набор плавающих панелей

Bitmap – фоновый рисунок контейнера

BandBorderStyle – вкл/выкл разграничительных линий между панелями

3) ToolBar – инструментальная панель с кнопками и компонентами

ButtonHeight – высота кнопок

ButtonWidth – ширина кнопок

ShowCaptions – вкл/выкл показывать надписи на кнопках

Images – ссылка на компонент с набором картинок ImageList для отображения кнопок

HotImages – ссылка на компонент с набором картинок ImageList для наведения на кнопку

DisabledImages – ссылка на компонент с набором картинок ImageList для отображения неактивных кнопок

 List – вкл/выкл режима, при котором надпись на кнопке и картинка располагаются в одной строке

ToolButton – кнопка в инструментальная панели ToolBar. Создается через контекстное меню ToolBar «New Button» и «New Separator»

ImageIndex – номер картинки на кнопки из ImageList

Style – обычная кнопка (tbsButton), кнопка с выпадающим списком (tbsDropDown), кнопка с залипанием (tbsCheck), сепаратор (tbsDivider)

Width – ширина кнопки (для сепаратора)

Dropdownmenu – ссылка на выпадающее меню кнопки Popupmenu

4) StatusBar – статусная строка

Panels – набор панелей

Text – текст панели

Width – ширина панели

Aligment – выравнивание текста по горизонтали

«Additional»

1) ButtonGroup – контейнер с кнопками

ButtonHeight – высота кнопок

ButtonWidth – ширина кнопок

Images – ссылка на компонент с набором картинок ImageList для отображения кнопок

Items – набор кнопок

Caption – надпись на кнопке

ImageIndex – номер картинки кнопки

ButtonOptions

gboFullSize – кнопки располагаются в столбик вертикально

gboShowCaptions – показывать надписи на кнопках

Событие «ButtonClicked» передает в свою процедуру номер «Index» нажатой кнопки

2) CategoryButtons – контейнер с вкладками кнопок

ButtonHeight – высота кнопок

ButtonWidth – ширина кнопок

Images – ссылка на компонент с набором картинок ImageList для отображения кнопок

ButtonOptions – опции вкладок (категорий)

boFullSize – кнопки располагаются в полную ширину компонента (true)

boShowCaptions – показывать надписи на кнопках (true)

boVerticalCategoryCaptions – вкладки располагаются вертикально (false)

boBoldCaptions – надписи вкладок жирным цветом

boUsePlusMinus – использование «+» и «-» для раскрытия вкладок

Categories – Категории (вкладки)

Caption – название вкладки

Collapsed – вкладка закрыта (false)

Items – кнопки вкладки

Caption – надпись на кнопке

ImageIndex – номер картинки кнопки

Button.Category.Index – номер выбранной вкладки

Button.Index – номер выбранной кнопки в текущей вкладке

Событие «ButtonClicked» передает в свою процедуру номер «Index» нажатой кнопки

    with CategoryButtons1 do begin

      SelectedItem:=Categories[0].Items[0];

      CategoryButtons1ButtonClicked(Sender, SelectedItem);

    end;

3) ActionManager – менеджер акций (пунктов меню)

 

Images – ссылка на компонент с набором картинок ImageList для отображения кнопок

Двойной щелчок мыши по компоненту раскрывает редактор акций. В нем правой кнопкой мыши выбираем пункт «New Action». Свойства акции:

Caption – название подпункта меню («Открыть»)

Category – название пункта (основного раздела) меню («Файл»)

ImageIndex – – номер картинки акции

ActionToolBar – панель акций. На данную панель из ActionManager наносятся акции (кнопки), аналог ToolBar.

ActionMainMenuBar – меню акций. В данное меню из ActionManager наносятся акции (пункты меню), аналог MainMenu.

Рейтинг@Mail.ru