Russian Belarusian English German Japanese Ukrainian
  • Главная

Изменение местоположения и размеров компонентов

Оконные компоненты имеют свойство Anchors привязку к родительскому компоненту при изменении размеров последнего. Это свойство представляет собой множество, которое может содержать следующие элементы:
Тип Описание
akTop Верхний край компонента привязан к верхнему краю родительского компонента.
akLeft Левый край компонента привязан к левому краю родительского компонента.
akRight Правый край компонента привязан к правому краю родительского компонента.
akBottom Нижний край компонента привязан к нижнему краю родительского компонента.
Если в множестве Anchors присутствуют привязки к противоположным сторонам родительского компонента, то при изменении размеров родительского компонента происходит растяжение или сжатие дочернего компонента, поскольку расстояния от сторон родительского компонента выдерживаются. Сжатие может происходить вплоть до полного исчезновения изображения данного компонента. Поэтому необходимо ограничивать диапазон допустимого изменения размеров.

Подробнее...

Подсказки и контекстно-зависимые справки

Приложение должно предельно облегчать работу пользователя, снабжая его системой подсказок, помогающих сориентироваться в приложении. Эта система включает в себя:
  • Ярлычки, которые, всплывают, когда пользователь задержит курсор мыши над каким-то элементом окна приложения. В частности, такими ярлычками обязательно должны снабжаться быстрые кнопки инструментальных панелей, поскольку нанесенные на них пиктограммы часто не настолько выразительны, чтобы пользователь без дополнительной подсказки мог понять их назначение.
  • Кнопка справки в полосе заголовка окна, позволяющая пользователю посмотреть во всплывающих окнах назначение различных элементов окна.
  • Более развернутые подсказки в панели состояния или в другом отведенном под это месте экрана, которые появляются при перемещении курсора мыши в ту или иную область окна приложения.
  • Встроенную систему контекстно-зависимой оперативной справки, вызываемую по клавише F1.
  • Раздел меню Справка, позволяющий пользователю открыть стандартный файл справки Windows .hlp, содержащий в виде гипертекста развернутую информацию по интересующим пользователя вопросам.
Тексты ярлычков и подсказок панели состояния устанавливаются для любых визуальных компонентов в свойстве Hint в виде строки текста, состоящей из двух частей, разделенных символом вертикальной черты '|'.

Подробнее...

Основы при компоновке форм

Каждое окно, которое нужно вводить в свое приложение, должно быть тщательно продумано и скомпоновано. Удачная компоновка может стимулировать эффективную работу пользователя, а неудачная рассеивать внимание, отвлекать, заставлять тратить лишнее время на поиск нужной кнопки или индикатора. Управляющие элементы и функционально связанные с ними компоненты экрана должны быть зрительно объединены в группы, заголовки которых коротко и четко поясняют их назначение. Такое объединение позволяют осуществлять различные панели. Можно рекомендовать, как правило, размещать компоненты не непосредственно на форме, а на таких панелях. Но и внутри панелей надо продумывать размещение компонентов, как с точки зрения эстетики, так и с точки зрения визуального отражения взаимоотношений элементов. Например, если имеется кнопка, которая разворачивает окно списка, то эти два компонента должны быть визуально связаны между собой: размещены на одной панели и в непосредственной близости друг от друга. Если же экран представляет собой случайные скопления кнопок, то именно так он и будет восприниматься. И в следующий раз пользователь не захочет пользоваться программой.

Подробнее...

Простая посылка сообщений

Построим простую программу, демонстрирующую посылку сообщений. Создаем новый проект и в нем две формы Form1 и Form2, сохраните проект, назвав модули форм U1Mess1 и U2Mess1 соответственно, а файл проекта PMess1. Форма Form1 будет главной и она будет управлять видимостью формы Form2. Поэтому в ее модуль необходимо включить директиву препроцессора:
#include "U2Messl.h"
а свойство Visible формы Form2 должно быть равно false.
 
Перенесите на форму Form1 две кнопки, дав им надписи «Show Form2» и «Close Form2». В обработчике щелчка первой кнопки напишите оператор:
Form2->Show();
а в обработчике щелчка второй кнопки оператор:
SendMessage(Form2->Handle,WM_CLOSE, 0,0);
Этот оператор посылает сообщение WM_CLOSE (второй параметр функции SendMessage) форме Form2. Первый параметр функции SendMessage содержит дескриптор окна этой формы, полученный с помощью ее свойства Handle. Сообщение WM_CLOSE не имеет параметров поэтому параметры wParam и lParam заданы равными нулю.
 
Приведенный выше оператор можно заменить на следующий:
Form2->Perform(WM_CLQSE,0,0);
Результат будет тем же самым.

Подробнее...

Хитрости выравнивания компонентов с помощью Align

Если проектируется окно, размеры которого пользователь может изменять во время выполнения приложения, то необходимо принять меры, чтобы компоненты в окне при этом тоже изменяли свои размеры или местоположение, равномерно распределяясь по площади окна и не оставляя пустых мест.
 
Пусть, например, проектируя форму, окно которой содержит панель Panel1, на которой будут размещаться какие-то управляющие компоненты и список ListBox1, панель Panel2, в середине которой будет размещаться некоторая надпись в метке StaticText1, и компонент Memo1, в котором будут редактироваться тексты. Если, разместив все это на форме и не приняв мер для того, чтобы при изменении размеров окна компоненты изменялись, то при том размере формы, который проектировалось, все будет выглядеть нормально. Но если пользователь растянет размеры формы, надеясь увеличить площадь редактирования и длину списка, то приложение приобретет нелепый вид. Увеличение формы просто приводит к увеличению на ней пустого места.
 
Чтобы избежать таких неприятностей, у многих компонентов и, в частности, у панелей, есть свойство Align (выравнивание). По умолчанию оно равно alNone, что означает, что никакое выравнивание не осуществляется. Но его можно задать равным alTop, или alBottom, или alLeft, или alRight, что будет означать, что компонент должен занимать всю верхнюю, или нижнюю, или левую, или правую часть клиентской области компонента-контейнера.

Подробнее...

5 последовательностей фокусировки элементов

При проектировании приложения важно правильно определить последовательность табуляции оконных компонентов. Под этим понимается последовательность, в которой переключается фокус с компонента на компонент, когда пользователь нажимает клавишу табуляции Tab. Это важно, поскольку в ряде случаев пользователю удобнее работать не с мышью, а с клавиатурой. Пусть, например, вводя данные о каком-то сотруднике пользователь должен в отдельных окнах редактирования указать фамилию, имя и отчество. Конечно, набрав фамилию ему удобнее нажать клавишу Tab и набирать имя, а потом опять, нажав Tab, набирать отчество, чем каждый раз отрываться от клавиатуры, хватать мышь и переключаться в новое окно редактирования.
 
Свойство формы ActiveControl, установленное в процессе проектирования, определяет, какой из размещенных на форме компонентов будет в фокусе в первый момент при выполнении приложения. В процессе выполнения это свойство изменяется и показывает тот компонент, который в данный момент находится в фокусе.

Подробнее...

5 причин использовать меню в приложениях

Практически любое приложение должно иметь меню, поскольку именно меню дает наиболее удобный доступ к функциям программы. Существует несколько различных типов меню: главное меню с выпадающими списками разделов, каскадные меню, в которых разделу первичного меню ставится в соответствие список подразделов, и всплывающие или контекстные меню, появляющиеся, если пользователь щелкает правой кнопкой мыши на каком-то компоненте.
 
В C++Builder меню создаются компонентами MainMenu (главное меню) и PopupMenu (всплывающее меню). Оба компонента расположены на странице Standard. Кроме того, в C++Builder 6 имеется возможность создания меню, настраиваемого пользователем во время выполнения, с помощью компонентов ActionManager и ActionMainMenuBar.
 
Основное требование к меню это их стандартизация. Это требование относится ко многим аспектам меню: месту размещения заголовков меню и их разделов, форме самих заголовков, клавишам быстрого доступа, организации каскадных меню. Цель стандартизации - облегчит пользователю работу с приложением. Надо, чтобы пользователю не приходилось думать, в каком меню и как ему надо открыть или сохранить файл, как ему получить справку, как работать с буфером обмена Clipboard и т.д. Для осуществления всех этих операций у пользователя, поработавшего хотя бы с несколькими приложениями Windows, вырабатывается стойкий автоматизм действий и недопустимо этот автоматизм ломать.
Начнем рассмотрение требований с размещения заголовков меню.

Подробнее...

Тип строк AnsiString

В C++ Builder тип строк AnsiString реализован как класс, объявленный в файле vcl/dstring.h и аналогичный типу длинных строк в Delphi. Это строки с нулевым символом в конце. При объявлении переменные типа AnsiString инициализируются пустыми строками.
 
Для AnsiString определены операции отношения ==, !=, >, <, >=, <=. Сравнение производится с учетом регистра. Сравниваются коды символов, начиная с первого, и если очередные символы не одинаковы, строка, содержащая символ с меньшим кодом, считается меньше. Если все символы совпали, но одна строка длиннее и в ней имеются еще символы, то она считается больше, чем более короткая.
 
Для AnsiString определены операции присваивания =, += и операция склеивания строк (конкатенации) +. Определена также операция индексации []. Индексы начинаются с 1. Например, если S1 = "Привет", то S1[1] вернет 'П', S1[2] вернет 'р' и т.д.

Подробнее...