Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Delphi - проблемы и решения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование на Delphi. От новичка до профессионала! 15.4 Размещение компонентов на форме
Информационный Канал Subscribe.Ru |
Здравствуйте, уважаемые читатели :-) Завтра (4 февраля) у меня День рождения. Поздравления принимаю в гостевую книгу.
15.4 Размещение компонентов на форме
1. Перенос компонентов со страниц библиотеки на форму
Для того чтобы перенести на форму компонент, надо
открыть соответствующую страницу палитры компонентов и найти на
ней нужный компонент. В поиске вам очень помогут ярлычки,
появляющиеся, если вы задерживаете курсор над той или иной
пиктограммой. Выделите курсором нужный вам компонент, а затем
щелкните мышью в том месте формы, куда вы хотите поместить
компонент. Возможен и другой вариант — двойной щелчок на
компоненте. Тогда компонент перенесется в центр формы, а затем вы
можете его отбуксировать в нужное место.
Если вы, выбрав компонент на странице, раздумали
переносить его, нажмите самую левую кнопку со стрелкой,
направленной но диагонали вверх и налево. Ваш выбор будет отменен.
Иногда вы знаете имя компонента, но не помните, на
какой странице он расположен и не можете его найти. В этом случае
вам может помочь команда View Component List. При ее выполнении
вам откроется диалоговое окно, содержащее алфавитный список всех
компонентов. В нем вы можете найти нужный компонент по имени. В
этом вам может помочь имеющееся вверху окно быстрого поиска по
имени Search by name. По мере набора в нем первых символов имени
указатель перемещается на соответствующие разделы списка. Выбрав
нужный компонент, вы можете нажать кнопку Add to form внизу окна
или сделать двойной щелчок на выбранном компоненте, и он
перенесется на форму. Если вы не уверены, тот ли компонент нашли,
нажмите клавишу Fl, и вам будет показана справка по выделенному
компоненту.
Удалить ошибочно перенесенный на форму компонент
очень просто: выделите его и нажмите клавишу Delete.
Приучите себя сразу при переносе компонента на форму
изменять его имя Name, принятое по умолчанию. Имя должно быть
осмысленным, чтобы потом, разбираясь в коде, вы легко могли бы
понять, что означает та или иная процедура, тот или иной компонент.
Настоятельно рекомендую следовать этому совету. Тем
самым вы сэкономите себе много времени. Представьте себе
простенькую форму, где имеется десяток кнопок, десяток меток и
пара десятков разделов меню. Уверяю вас, что если вы не даете
компонентам осмысленные имена, то очень скоро вы начнете
мучительно размышлять, что же это за кнопка Button7, щелчок
которой вы обрабатываете в данной процедуре, и почему в нем
задается какое-то значение надписи неизвестно где расположенной
метки Label3. А уж на поиски таинственного раздела меню N18 вы
точно потратите немало времени. Так что любите себя, давайте
компонентам понятные вам имена.
Перенеся компонент на форму, вы можете буксировать
его в нужное место, можете изменять его размеры. Для этого
выделите нужный элемент. Он станет окружен рамкой с маркерами.
Потяните курсором за один из маркеров и размер компонента будет
изменяться. При этом имеется удобный механизм информации об имени
и размерах компонента. При задержке курсора над компонентом
появляется является ярлычок с его именем, а при нажатии кнопки
мыши на компоненте, при его буксировке или изменении размеров
появляется ярлычок с размерами компонента.
2. Родители и владельцы компонентов — Parent и
Owner.
Часто компоненты размещаются не непосредственно на
формах, а на панелях, зрительно объединяющих группы компонентов по
их назначению. В этом случае сначала на форме должны быть
размещены панели, а потом на них располагаются компоненты.
Оконный компонент — форма, панель и т.д., включающий
в себя как контейнер другие компоненты, выступает по отношению к
ним как родительский компонент. У каждого компонента есть родитель.
Им может быть форма или другой оконный компонент. В процессе
выполнения приложения вы можете узнать родителя того или иного
компонента по его свойству Parent. Это свойство можно читать и
изменять только во время выполнения, в Инспекторе Объектов вы его
не найдёте.
Что даёт понятие родительского компонента? Компонент
может наследовать многие свойства своего родителя. Для всех
визуальных компонентов вы можете увидеть в Инспекторе Объектов
такие свойства, как ParentFont и ParentShowHint, для оконных
компонентов имеется еще свойство ParentCtl3D. Эти свойства
впитывают (если их значения установлены в true), что дочерний
компонент наследует от родительского соответственно атрибуты
шрифта, показа ярлычков, атрибуты своего оформления. Кроме того,
значения свойств Left и Тор, которые вы можете видеть в Инспекторе
Объектов для любого визуального компонента и которые определяют
положение левого верхнего угла компонента, измеряются в системе
координат родительского компонента. Таким образом, например, при
перемещении границ родительского компонента будут синхронно
перемещаться и все его дочерние компоненты.
Имеется еще два важных свойства, которые связывают
дочерние компоненты с родительским. Это свойства Visible — видимый,
и Enabled — доступный. Если в процессе выполнения приложения
сделать в родительском компоненте Visible равным false, то станет
невидимым не только родительский, но и все его дочерние компоненты.
Аналогично, если в процессе выполнения приложения сделать в
родительском компоненте Enabled равным false, то станут
недоступными все его дочерние компоненты. Т.е. пользователь не
сможет нажимать кнопки и производить любые другие действия в
пределах данного родительского компонента.
Таким образом, понятие родительского компонента
очень важное, и его смысл выходит далеко за рамки просто
эстетически приемлемого оформления окна формы.
Отметим еще одно свойство компонентов, которое часто
путается со свойством Parent. Это свойство Owner — владелец
данного компонента. Свойство Owner устанавливается в момент
создания компонента в процессе выполнения приложения. Владелец
компонента — этот тот компонент, при уничтожении которого (освобождении
занимаемой им памяти) уничтожится и данный компонент. Этим и
ограничивается связь между владельцем и компонентами, которыми он
владеет в отличие от множества указанных выше свойств, связывающих
родительский и дочерние компоненты.
3. «Многослойное» размещение компонентов на форме
Рассмотрим теперь особенности размещения, связанные
с обсуждавшимся выше понятием родительского компонента. Компоненты
очень часто размещаются на панелях. Более того, нередко панели
помещаются друг на друга, так что получается «многослойное»
размещение компонентов на форме.
Если вы перенесли компонент из библиотеки не на
форму, а на панель, то эта панель становится для него родительской.
Вы никакими передвижениями не сможете переместить его за пределы
родительской панели. Если же вы передумали размещать компонент на
данной панели и хотите переместить его на другую панель или
непосредственно на форму, то это можно сделать через буфер обмена
Clipboard. Выделите курсором переносимый компонент и вырежьте его
в Clipboard командой Edit | Cut или горячими клавишами Ctrl-X.
Затем щелкните на форме или на той панели, куда хотите перенести
компонент, и выполните команду Edit | Paste, дублируемую горячими
клавишами Ctrl-V. Компонент перенесется из Clipboard В новое место
и обретет нового родителя — панель или форму.
Проведите эксперимент. Поместите на форму три панели:
две из них непосредственно на форме, а третью - на одной из
предыдущих. Разместите на форме и на панелях различные метки,
кнопки и окна редактирования. Перемещайте компоненты по панелям, а
сами панели — по форме, выполняйте команды Bring To Front и Send
To Back и наблюдайте при этом видимость различных компонентов.
4. Поиск «пропавших» компонентов
Иногда бывает, что вы не можете найти на форме
компонент, который, как вы знаете, на ней присутствует. Это бывает
по нескольким причинам. Например, если Вы используете метку типа
TLabel, установив в ней свойство AutoSize (автоматическое
изменение размера по размерам надписи) в true и стерев значение
надписи Caption, то горизонтальный размер метки уменьшается до
нуля и ее не будет видно на форме, пока во время выполнения
приложения значение Caption не изменяется. Компонент может «пропасть»
также, если он накрыт другим компонентом. Возможны и некоторые
другие причины, например, такой выбор цветов, что компонент
сливается с фоном.
Найти «пропавший» компонент можно, выбрав его имя в
выпадающем списке, расположенном вверху окна Инспектора Объектов.
Этот список содержит все компоненты, размещенные на форме. Если вы
выберете в нем нужный компонент, то на форме вокруг него появится
рамка с маркерами, видимая даже в случае, если компонент накрыт
сверху какой-нибудь панелью или другим компонентом
5. Окно Object TreeView и страница диаграмм
Редактора
Начиная с Delphi 6, в ИСР появился новый инструмент
— окно Object TreeView (Дерево Объектов), которое отображает
дерево всех визуальных и не визуальных компонентов, имеющихся в
вашем приложении. Оно показывает самые различные виды связи между
компонентами: соотношение родительских и дочерних компонентов,
связь компонентов через их свойства, связи с наборами данных м т.п.
Пока мы не рассматривали большинство из этих связей, так что
рассмотрим работу с Деревом Объектов на примере связи родительских
и дочерних компонентов.
Разместите на форме какие-то панели, компоненты и
посмотрите окно Дерево Объектов. В конфигурации ИСР по умолчанию
это окно расположено в левой части экрана над окном Инспектора
Объектов. Если вы закрыли это окно и его не видно, выполните
команду View | Object TreeView, и оно появится на экране.
Если вы выделите какую-то вершину в дереве,
соответствующий компонент выделится на форме, а в Инспекторе
Объектов откроются его страницы свойств и событий. Так что
использование окна Дерева Объектов — еще один способ найти «потерявшийся»
на форме компонент.
Вы можете переносить компоненты из одного
родительского контейнера в другой, просто перетаскивая в дереве
соответствующую вершину в другую родительскую вершину, например,
на другую панель. Компонент на форме при этом переместится в поле
нового родителя. Аналогичным образом можно перетаскивать наборы,
источники данных, компоненты отображения данных и т.д. при работе
с базами данных.
Остановимся теперь на возможности документирования
связей между компонентами в виде диаграммы. Хотя эта возможность
более интересна для приложений, работающих с базами данных,
рассмотрим ее пока применительно к компоновке форм.
Для создания диаграммы окно Дерева Объектов
используется совместно со страницей Diagram Редактора Кода,
которую мы пока не рассматривали. Откройте в вашем примере эту
страницу. Окно Name на этой странице позволяет как-то назвать
строящуюся диаграмму.
Окно Description позволяет составить текстовое
описание диаграммы. А выпадающий список слева вверху позволяет
выбрать ту диаграмму, которую вы хотите видеть, если для данного
модуля вы составили несколько диаграмм. Левая быстрая кнопка рядом
со списком позволяет начать создание новой диаграммы. Правее её
расположена быстрая кнопка, удаляющая диаграмму.
Сначала, конечно, основное поле диаграммы будет
пустым. Чтобы занести в него интересующие вас компоненты, надо
перетащить мышью их вершины из окна Дерева Объектов. Между
изображениями перетащенных компонентов автоматически появятся
стрелки, описывающие связи между ними. Вам останется только
расположить их в окне диаграммы так, чтобы диаграмма было
наглядной. При этом вы можете перемещать и компоненты, и стрелки
связей между ними, просто буксируя их мышью. Если вы потянете одну
из средних точек стрелки, стрелка изогнется. Таким образом, вы
можете сделать линию стрелки кусочно-линейной, огибая ею какие-то
препятствия.
Левая быстрая кнопка с надписью «А В С» позволяет
создать на диаграмме блок, в котором можно написать произвольный
поясняющий текст. Вторая слева кнопка Allude connector позволяет
нанести на диаграмму дополнительные связи, не возникающие
автоматически. Например, если кнопка Button1 обрабатывает текст в
окне Edit1, в кнопка Button2 обрабатывает
текст окна Edit2, вы можете провести между этими программно
связанными компонентами соединения. Для проведения соединения надо
нажать кнопку Allude connector, затем нажать левую кнопку мыши на
изображении того компонента, от которого хотите провести стрелку,
а затем, не отпуская кнопку, провести линию к изображению другого
компонента. Тогда соединительная линия в виде стрелки появится на
экране.
Вы можете щелкнуть на ней и выбрать из контекстного
меню один из разделов, определяющих начертание стрелки: Starts
with — изображение начала стрелки и Ends with — изображение ее
конца. Выбор разделов Color и Fill color позволяет задать цвет
обрамляющей линии и цвет заполнения (он имеет смысл только для
некоторых типов изображений начала и конца стрелки).
6. Работа с группой компонентов, выравнивание
компонентов по размеру и положению
На форме можно выделить группу компонентов, к
которым применяется та или иная операция. Выделение группы
возможно двумя способами. Если компоненты расположены
непосредственно на форме и рядом друг с другом, то для выделения
группы достаточно обвести курсором рамку вокруг них, и все они
окажутся выделенными. Если компоненты группы расположены не
непосредственно на форме, а, например, на панели, то выделить их
рамкой невозможно. Так же невозможно выделить рамкой группу
компонентов, расположенных в разных местах формы. В этих случаях
выделение производится иначе. Выделяйте нужные компоненты курсором,
нажав и не отпуская при этом клавишу Shift. Все компоненты,
выделенные таким образом, войдут в группу.
С выделенной группой компонентов можно производить
следующие операции:
- Перемещать их одновременно, потянув курсором за
один из выделенных компонентов. Это очень удобно, когда надо
переместить группу компонентов на форме, не изменяя их взаимного
расположения.
- Задавать в Инспекторе Объектов общие для всей
группы свойства. При выделении группы на странице свойств в
Инспекторе Объектов будут видны только их общие свойства. А
индивидуальные свойства, такие, например, как имя компонента Name
или надпись Caption, исчезнут. Вы можете задать особенности шрифта,
оформления, цвет и т.п., которые будут присущи всем компонентам
выделенной группы.
- Задать общий для всех компонентов группы
обработчик какого-то события. Такая потребность возникает на
практике достаточно часто.
- Скопировать всю группу в буфер обмена Clipboard
командой Edit | Сору или «горячими» клавишами Ctrl-C. После этого
вы можете, например, открыть какую-то другую форму и перенести на
нее группу из Clipboard командой Edit | Paste или «горячими»
клавишами Ctrl-V. Это простой способ переносить фрагменты с одной
формы на другую или с одной панели формы на другую панель.
- Выравнивать компоненты группы по размеру и
взаимному расположению.
Как это делается, мы сейчас рассмотрим.
Когда вы размещаете компоненты на форме, трудно
бывает добиться аккуратного вида окна, симметричного расположения
компонентов, а иногда возникают проблемы и с тем, чтобы добиться
одинакового размера их по горизонтали и вертикали. В Delphi существует удобный инструмент для решения этих задач. Речь идёт о
командах Edit | Align — выравнивание размещения, Edit | Size — выравнивание размеров и Edit | Scale — масштабирование. Те же
команды можно выбирать не из меню Edit, а из раздела Position
контекстного меню, которое всплывает, если вы щёлкнете правой
кнопкой мыши на одном из компонентов группы (именно на компоненте,
так как если вы щелкнете в стороне, то выделение группы снимется).
При выполнении команды Size — выравнивания размеров, вам
открывается окно. Левая часть окна — Width устанавливает ширину
компонентов. Вы можете выбрать варианты: No change — не изменять,
Shrink To smallest — уменьшить до размера минимального из
компонентов группы, Grow to largest — увеличить до размера
максимального из компонентов группы, Width — задать в окне рядом с
этой радиокнопкой ширину компонента в пикселах. Аналогичные
варианты предлагаются в правой части окна для Height — высоты
компонентов.
При выполнении команды Edit | Align — выравнивание
размещения, вам открывается окно, левая часть которого —
Horizontal устанавливает выравнивание компонентов по горизонтали.
Вы можете выбрать варианты: No change — не изменять, Left sides — выравнивать компоненты по их левым сторонам, Center — по их
центрам, Right sides — по их правым сторонам, Space equally — разместить с равными интервалами между компонентами. Center in
window — расположить в центре окна. С остальными возможностями
ознакомьтесь сами. (понятно из названий).
Выполните команду View | Alignment Palette — палитра
выравнивания. Появится окно палитры выравнивания. Назначение ее
кнопок понятно из их пиктограмм. Верхний ряд кнопок относится к
выравниванию по горизонтали и соответствует обсужденным выше
вариантам выравнивания. Нижний ряд кнопок позволяет выравнивать по
вертикали. Испытайте этот инструмент на каком-нибудь тестовом
примере, и вы убедитесь в его эффективности.
7. Фиксация компонентов
После того, как вы тщательно разместили и выровняли
компоненты, их местоположение полезно зафиксировать. Иначе в
процессе последующей работы над проектом вы можете случайно
сдвинуть тот или иной компонент, когда будете его выделять
курсором, и всю работу по выравниванию придется начинать заново.
Чтобы этого не произошло, выполните команду Edit |
Lock Controls. Она зафиксирует расположение всех компонентов на
форме и не позволит их перемещать. Если в дальнейшем у вас
все-таки возникнет потребность изменить расположение компонентов,
то выполните повторно команду Edit | Lock Controls и компоненты
будут разблокированы.
Сайт рассылки http://mydelphi7.narod.ru, на котором есть архив рассылки, также гостевая книга, переводчик.
Копировать, размещать, продавать представленную информацию запрещается.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||