Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Полигон
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  21:42[Войти] | [Зарегистрироваться]

Выдвижной ящик для визуальных компонентов

Антон Григорьев
дата публикации 02-05-2006 04:57

Выдвижной ящик для визуальных компонентов

Многим программистам знакома дилемма, когда, с одной стороны, нужно сделать как можно более доступными для пользователя много элементов управления, а с другой — нельзя загромождать ими интерфейс. Я столкнулся с такой проблемой, когда мне пришлось отображать график с множеством настроек. С одной стороны, график должен был занимать как можно большую площадь экрана, чтобы пользователь мог рассмотреть все подробности. С другой стороны, у пользователя должны были быть под рукой многочисленные настройки, влияющие на то, как будет выглядеть этот график. Обычные диалоговые окна для таких настроек подходили плохо, а размещать настройки непосредственно в главном окне — значит, терять полезную площадь экрана. Решение мне виделось в чём-то типа панели задач, которая может быть невидима большую часть времени, а когда пользователь подводит к ней мышь — плавно выезжать из-за края экрана. Так возник компонент TDrawer (от англ. drawer — выдвижной ящик).

Компонент TDrawer представляет собой нечто типа панели, от которой в обычном состоянии виден только небольшой кусочек около края окна (рисунок 1).


Рисунок 1 — Окно с двумя убранными компонентами TDrawer

Однако при необходимости эти панели выезжают и дают пользователю доступ к тем компонентам, которые на них расположены (рисунок 2).


Рисунок 2 — Один из "ящиков" выдвинут

Если на форме расположено несколько "ящиков", они могут выдвигаться и задвигаться независимо.

В design-time TDrawer ведёт себя как обычная панель — ну разве что выглядит немного по-другому. Но при запуске программы от неё остаётся лишь узкая полоска с края формы, нажав на которую (или просто подержав над ней мышь) пользователь может выдвинуть этот "ящик" и воспользоваться хранящимися в нём компонентами. Когда они больше не нужны, компонент снова прячется за край экрана.

Свойства компонента TDrawer:

Placement: TDrawerPlacement — определяет, за какой из краёв родительского окна "задвигается" компонент. Тип TDrawerPlacement объявлен так:

TDrawerPlacement=(dpLeft,dpRight,dpTop,dpBottom);

dpLeft означает, что компонент будет задвинут за левый край (как на рисунках), dpRight — за правый, dpTop — за верхний, dpBottom — за нижний.

Примечание: если компоненты с расположением dpRight и dpBottom кладутся непосредственно на форму, у этой формы свойства AutoScroll и AutoSize должны быть равны False. Иначе при задвигании форма будет менять размеры, или на ней будут появляться полосы прокрутки.

Closed: Boolean — True, если компонент "задвинут", False — если "выдвинут". Свойство доступно для чтения и записи.

AnimationPause: Integer — задержка (в микросекундах) между шагами анимации (т.е. между сдвигами на один пиксель) при выдвижении/задвижении компонента. Если значение свойства меньше или равно нулю, анимации не будет.

ImmediateRefresh: Boolean — если True, при выдвижении и задвижении компонента на каждом шаге будет перерисовываться его содержимое целиком. Свойство можно поставить в False, если перерисовка требует большого количества времени.

ImmediateParentRefresh: Boolean — при задвижении компонента открываются новые участки его родительского окна. Если свойство равно True, на каждом шаге анимации родитель будет перерисовываться, если False — перерисовка выполнится только после завершения анимации (применяется, когда перерисовка родителя занимает слишком много времени).

AutoOpenDealy: Integer — задвинутый компонент выдвигается, когда пользователь щёлкает мышью на его заголовке. Но он также может быть выдвинут, если пользователь просто держит курсор мыши над этим заголовком. AutoOpenDelay задаёт время в миллисекундах, в течение которого курсор должен находиться над заголовком задвинутого компонента, чтобы он выдвинулся. Если свойство меньше или равно нулю, компонент не будет выдвинут, пока мышь не будет нажата.

AutoHideDelay: Integer — определяет, сколько времени (в миллисекундах) должно пройти после того, как пользователь увёл курсор мыши за пределы выдвинутого компонента, чтобы он закрылся. Если свойство равно нулю, уход мыши за пределы компонента не приводит к его задвижению, он задвигается только после того как пользователь щёлкнет на его заголовке.

OpenOnEnter: Boolean — если True, задвинутый компонент выдвигается, если он или один из расположенных на нём элементов управления получает фокус.

CloseOnExit: Boolean — если True, выдвинутый компонент автоматически задвигается, если он потерял фокус.

ArrowColor: TColor — определяет цвет, которым на заголовке рисуется стрелка (она отображается только если свойство Caption содержит пустую строку).

События компонента TDrawer:

OnOpen и OnClose — возникают соответственно при выдвижении и задвижении компонента (по любой причине).

OnOpening и OnClosing — возникают соответственно перед выдвижением и задвижением компонента. Имеют параметр-переменную Allow типа Boolean, установив который в False, можно запретить действие.

Компонент испытан в Delphi 7, Windows 2000



К материалу прилагаются файлы:


Смотрите также материалы по темам:
[Изменение размеров компонент, нестандартная форма] [Создание собственных компонент] [Координаты компонент, относительное расположение.] [Компоненты-контейнеры. Внедрение одних контролов в другие.]

 Обсуждение материала [ 24-06-2009 11:27 ] 47 сообщений
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования