Учись программированию на C++ Builder бесплатно!

В приложении C++ Builder автоматически создается глобальный объект Screen (экран) типа TScreen, свойства которого определяются из информации Windows о мониторе, на котором запускается приложение. Можно в любом приложении использовать, например, такие свойства объекта Screen, как Height - высота экрана и Width - его ширина. Это, в частности, может потребоваться, если нужно задать значение свойства своих форм Position таким, что размеры форм остаются постоянными. Так как можно использовать в процессе проектирования один тип монитора, а приложение в дальнейшем может работать на мониторе другого типа, то не исключено, например, что ваша форма не поместится на экране или наоборот будет слишком маленького размера для данного монитора. Чтобы избежать этих неприятностей, можно автоматически масштабировать свою форму, вводя, например, в обработчик ее события OnCreate код:

Width = Screen->Width / 2;
Height = Screen->Height / 2;

Этот код задает размеры формы равными половине соответствующих размеров экрана.

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

Screen имеет свойство Forms[int Index], содержащее список форм, отображаемых в данный момент на экране, и свойство FormCount, отражающее количество таких форм. Можно использовать это свойство, например, для того чтобы гарантировать, что на данном типе монитора размеры ни одной формы не превысят размеров экрана. Соответствующий код может выглядеть так:

for(int i = 0; i < Screen->FormCount; i++)
{
if(Screen->Forms[i]->Height > Screen->Height)
Screen->Forms[i]->Height = Screen->Height - 100;
if(Screen->Forms[i]->Width > Screen->Width)
Screen->Forms[i]->Width = Screen->Width - 100;
}

Размеры форм, превышающие размер экрана, урезаются этим кодом с запасом в 100 пикселов.

В приведенных примерах надо, конечно, предусмотреть, чтобы при изменении размеров формы адекватно изменялось и расположение компонентов на ее поверхности. Так же, как к формам, можно получить доступ и к модулям данных. Свойство DataModules[int Index] содержит список всех существующих на текущий момент модулей данных приложения, а параметр DataModuleCount указывает число таких модулей. Эти параметры можно использовать в совокупности для поиска по всем модулям данных приложения.

Еще одно полезное свойство объекта Screen это Fonts (шрифты). Это свойство типа TStrings содержит список шрифтов, доступных на данном компьютере (свойство только для чтения). Его можно использовать в приложении, чтобы проверять, имеется ли на компьютере тот или иной шрифт, используемый в приложении. Если нет, то можно или дать пользователю соответствующее предупреждение, или сменить шрифт в приложении на один из доступных, или дать пользователю возможность самому выбрать соответствующий шрифт. Например, можно поместить в приложении компонент списка TComboBox и при событии формы OnCreate загрузить его доступными шрифтами с помощью операторов:

ComboBox1->Items = Screen->Fonts;
ComboBox1->ItemIndex = 0;

Тогда в нужный момент пользователь может выбрать подходящий шрифт из списка, а для того, чтобы этот шрифт использовался, например, для текста в компоненте RichEdit1, в обработчик события OnClick или OnChange списка необходимо вставить следующие операторы:

RichEdit1->SelAttributes->Name = ComboBox1->Items->Strings[CoraboBox1->IteraIndex];
RichEdit1->SetFocus();

Если хотите использовать выбранный шрифт для всех компонентов формы, в которых свойство ParentFont установлено в true, то приведенный выше оператор должен иметь вид:

Font->Name = ComboBox1->Items->Strings[ComboBox1->ItemIndex];

Свойство Cursor объекта Screen определяет вид курсора. Если это свойство равно crDefault, то вид курсора при перемещении над компонентами определяется установленными в них свойствами Cursor. Но если свойство Cursor объекта Screen отлично от crDefault, то соответствующие свойства компонентов отменяются и курсор имеет глобальный вид, заданный в Screen. Этим можно воспользоваться для такой частой задачи, как изменение курсора на форму «песочные часы» во время выполнения каких-то длинных операций. Подобное изменение формы курсора можно оформить следующим образом:

Screen->Cursor = crHourGlass;
try
{
// выполнение требуемых длинных операций
}
catch (...)
{
Screen->Cursor = crDefault; // восстановление курсора
throw;
}
Screen->Cursor = crDefault;

При успешном или аварийном окончании длинных операций курсор в любом случае возвращается в значение по умолчанию.

Если в приложении в какие-то отрезки времени используется отличный от crDefault глобальный вид курсора, то приведенный код можно изменить, чтобы по окончании длинных операций восстановить прежнее глобальное значение:

TCursor Save_Cursor = Screen->Cursor;
Screen->Cursor = crHourGlass;
try
{
// выполнение требуемых длинных операций
}
catch (...)
{
Screen->Cursor = Save_Cursor;
throw;
}
Screen->Cursor = Save_Cursor;

Имеется также свойство Cursors[I], которое представляет собой список доступных приложению курсоров. Можно создать и использовать также свой собственный курсор. Создается он и включается в ресурс приложения встроенным в C++Builder Редактором Изображений (Image Editor). А регистрируется созданный курсор с помощью функции LoadCursor.

Поделиться