- •©А.Я.Архангельский. 100 компонентов общего назначения библиотеки Delphi5
- •1 Общая характеристика
- •2 Панели общего назначения — компоненты Panel, GroupBox, Bevel, ScrollBox, Splitter
- •3 Многостраничные панели — компоненты PageControl
- •4 Инструментальные панели — компоненты ToolBar
- •5 Перестраиваемые панели — компоненты ControlBar
- •6 Полоса состояния StatusBar
5 Перестраиваемые панели — компоненты ControlBar
Большую свободу перестроений дает пользователю компонент ControlBar, который появился в Delphi 4. В этой панели может широко применяться техника перетаскивания и встраивания Drag&Doc, широко используемая в Delphi (начиная с Delphi 4), в частности, используемая в инструментальных панелях среды проектирования Delphi.
Поместите на форму компонент ControlBarи перенесите на него несколько компонентов, например, инструментальных панелейToolBarи окон редактированияEdit. Вы увидите (см. рис. 5), что каждый компонент, попадая наControlBar, получает полосу захвата, свойственную технологии Drag&Doc.
Установите у компонентов, размещенных на ControlBar, свойствоDragMode = dmAutomaticиDragKind = dkDock. Это означает автоматическое выполнение операций Drag&Doc.
Свойства компонента ControlBar RowSizeиRowSnapопределяют процедуру встраивания. СвойствоRowSizeзадает размеры полос, в которые могут встраиваться компоненты, aRowSnapопределяет захват полосами встраиваемых компонентов. СвойствоAutoDragопределяет, можно (при значении true), или нельзя простым перетаскиванием вынести полосу за пределы ControlBar.
Рис. 5 Перестраиваемая панель на основе компонента ControlBar (а)
и вынесенное из нее окно редактирования (б)
Запустите приложение и посмотрите на практике широчайшие возможности перестроения панелей. А если вы установили свойство AutoDragвtrue, то вы можете даже вынимать из панели отдельные компоненты и они становятся самостоятельными окнами (см. рис. 5 б). Опробуйте в эксперименте различные значения свойств компонентаControlBar, и они станут вам более понятны.
6 Полоса состояния StatusBar
Компонент StatusBarпредставляет собой ряд панелей, отображающих полосу состояния в стиле Windows. Обычно эта полоса размещается внизу формы.
Свойство SimplePanelопределяет, включает ли полоса состояния одну или множество панелей. ЕслиSimplePanel = true, то вся полоса состояния представляет собой единственную панель, текст которой задается свойствомSimpleText. Если жеSimplePanel = false, то полоса состояния является набором панелей, задаваемых свойствомPanels. В этом случае свойствоSizeGripопределяет, может ли пользователь изменять размеры панелей в процессе выполнения приложения.
Каждая панель полосы состояния является объектом типа TStatusPanels. Свойства панелей вы можете задавать специальным редактором наборов. Вызвать редактор можно тремя способами: из Инспектора Объектов кнопкой с многоточием около свойстваPanels, двойным щелчком на компонентеStatusBarили из контекстного меню, выбрав команду Panels Editor. В окне редактора вы можете перемещаться по панелям, добавлять новые или уничтожать существующие. При перемещении по панелям в окне Инспектора Объектов вы будете видеть их свойства.
Основное свойство каждой панели — Text, в который заносится отображаемый в панели текст. Его можно занести в процессе проектирования, а затем можно изменять программно во время выполнения. Другое существенное свойство панели —Width(ширина).
Программный доступ к текстам отдельных панелей можно осуществлять двумя способами: через индексированное свойство Panelsили через его индексированное подсвойствоItems. Например, два следующих оператора дадут идентичный результат:
StatusBar1.Panels[0].Text := 'текст 1';
или
StatusBar1.Panels.Items[0].Text := 'текст 1';
Оба они напечатают текст «текст 1» в первой панели.
Количество панелей полосы состояния можно определить из подсвойства CountсвойстваPanels. Например, следующий оператор очищает тексты всех панелей:
for i := 0 to StatusBar1.Panels.Count - 1 do
StatusBar1.Panels[i].Text := '';
На рис. 6 приведен пример текстового редактора на основе компонента RichEdit, содержащий полосу состояния. В ее первой панели отображается номер строки и символа, перед которым находится курсор, во второй — отображается, модифицирован текст в окне, или нет. В третьей панели отображается подсказка о назначении компонента, над которым в данный момент расположен курсор мыши.
Рис. 6 Пример окна с полосой состояния
Для реализации такой полосы состояния надо в обработчиках событий OnKeyDown,OnKeyUp,OnMouseDownиOnMouseUpкомпонентаRichEdit1и событияOnResizeформы обеспечить выполнение операторов:
StatusBar1.Panels[0].Text:=IntToStr(
RichEdit1.CaretPos.Y+1) + ':'+
IntToStr (RichEdit1.CaretPos.X+1);
if RichEdit1.Modified
then StatusBar1.Panels[1].Text := 'модиф.'
else StatusBar1.Panels[1].Text := '';
Эти операторы заполняют первые две панели полосы состояния.
Чтобы все это работало, надо в свойствах Hintтех компонентов, пояснения которых вы хотите отображать в панели состояния, написать соответствующие тексты. Если вы к тому же хотите, чтобы у компонента появлялся ярлычок с короткими подсказками при задержке пользователем мыши над этим компонентом, то текст в свойствеHintдолжен состоять из двух частей, разделенных символом вертикальной черты «|». Например, в свойствеHintбыстрой кнопки, соответствующей разделу меню Сохранить можно ввести текст: «Сохранить|Сохранение документа в файле». Первая часть этого текста будет появляться в ярлычке кнопки, если ее свойствоShowHint(показать подсказку) установлено вtrue. А вторую часть описанные выше операторы будут отображать в строке состояния при перемещении курсора мыши над кнопкой, независимо от значения ее свойстваShowHint.