WWW.KNIGI.KONFLIB.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

 
<< HOME
Научная библиотека
CONTACTS

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 85 |

«CVBuilder 6 СПРАВОЧНОЕ ПОСОБИЕ Книга 2 Классы и компоненты Москва ЗАО Издательство БИНОМ 2002 УДК 004.43 ББК 32.973.26-018.1 А87 Архангельский А.Я. C++Builder 6. ...»

-- [ Страница 4 ] --

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

for (int i = 0; i Screen-FormCount;

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 пикселов.

В приведенных примерах надо, конечно, предусмотреть, чтобы при изменении размеров формы адекватно изменялось и расположение компонентов на ее поверхности.

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

Если нет — то можно или дать пользователю соответствующее предупреждение, или сменить шрифт в приложении на один из доступных, или дать пользователю возможность самому выбрать соответствующий шрифт. Например, вы можете поместить в вашем приложении компонент списка TComboBox и при событии формы OnCreate загрузить его доступными шрифтами с помощью операторов:

ComboBoxl-Items = Screen-Fonts;

ComboBoxl-ItemIndex = 0;

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

RichEditl-SelAttributes-Name = ComboBoxl-Items-Strings [ComboBoxl-ItemIndex] ;

RichEditl-SetFocus ( ) ;

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

Font-Name = ComboBoxl-Items-Strings [ComboBoxl-ItemIndex] ;

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

Screen-Cursor = crHourGlass;

// выполнение требуемых длинных операций catch (...) Screen-Cursor = c r D e f a u l t ; // восстановление курсора Screen-Cursor = crDefault;

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

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

TCursor Save_Cursor = Screen-Cursor;

Screen-Cursor = crHourGlass;

// выполнение требуемых длинных операций Screen-Cursor = Save_Cursor;

Screen-Cursor = Save_Cursor;

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

Пусть, например, вы создали свой курсор и включили его в ресурс приложения под именем NEWCURSOR. Тогда в своем приложении вы можете ввести глобальную константу, обозначающую ваш курсор. Например:

const crMyCursor = 1;

Значение этой константы может лежать в пределах от -32768 до 32767. Но важно, чтобы она не совпадала с предопределенными значениями стандартных курсоров, лежащими в диапазоне от 0 до -21.

В обработчике события OnCreate формы вы можете ввести оператор, регистрирующий ваш курсор в свойстве Cursors:

Screen-Cursors[crMyCursor]=LoadCursor(HInstance, "NEWCURSOR");

Обратите внимание на то, что имя курсора пишется обязательно заглавными буквами, так как именно так хранятся имена курсоров в ресурсах приложения.

В нужный момент вы можете установить этот курсор в качестве глобального оператором Screen-Cursor = crMyCursor;

а затем восстановить значение глобального курсора оператором Screen-Cursor = crDefault;

Вы можете использовать ваш зарегистрированный курсор и как локальный, например, для панели Panel 1 оператором Panell-Cursor = (TCursor)crMyCursor;

Некоторые базовые классы, типы, переменные, константы Подробнее методика создания и использования собственных курсоров изложена в [1].

С помощью Screen можно получить доступ к активной в текущий момент форме вашего приложения через свойство ActiveForm. Если в данный момент пользователь переключился с вашего приложения на какое-то другое и, следовательно, ни одна форма вашего приложения не активна, то ActiveForm указывает на форму, которая станет,активной, когда пользователь вернется к вашему приложению.



В момент переключения фокуса с одной вашей формы на другую, генерируется событие OnActiveFormChange.

Аналогично с помощью свойства ActiveControl можно получить доступ к активному в данный момент оконному компоненту на активной форме. При смене фокуса генерируется событие OnActiveControlChange.

В C++Builder предусмотрена возможность разработки мультиэкранных приложений, работающих одновременно с множеством мониторов. При этом приложение может решать, какие формы и диалоги надо отображать на том или ином мониторе. Свойства различных мониторов, используемых в таком приложении, можно найти с помощью свойства Screen—Monitors[ I ], где I — индекс монитора. Индекс 0 относится к первичному монитору. Свойство Screen-Monitors[ I ] является списком объектов типа TMonitor, содержащих информацию о конкретных мониторах.

Среди свойств объектов типа TMonitor имеются Height — высота и Width — ширина экрана монитора. Кроме того, имеются свойства Left и Тор. Эти свойства означают следующее. Все доступное экранное пространство можно представить себе разбитым на экраны отдельных мониторов, размещающихся слева направо и сверху вниз. Соответственно свойства Left и Тор определяют координаты левого верхнего угла экрана монитора в этом логическом экранном пространстве. Объекты типа TMonitor имеют также свойство MonitorNum — номер монитора, представляющий собой его индекс в свойстве Screen—Monitors[ I ].

Для управления тем, на каком мониторе должна появляться та или иная форма, служит свойство формы DefaultMonitor. Это свойство может принимать значения:

не предпринимается попыток разместить форму на конкретdmDesktop dmPrimary форма размещается на первом мониторе в списке Screen— dmMainForm форма появляется на том мониторе, на котором размещена форма появляется на том мониторе, на котором размещена теdmActiveForm Set — шаблон класса Является шаблоном, реализующим встроенный класс Delphi, используемый в библиотеке компонентов VCL.

Модуль vcl/sysset.h.

Определение templateclass Т, unsigned char minEl, unsigned char maxEl class declspec(delphireturn) Set;

Описание В шаблоне должно быть задано три параметра:

тип элементов множества (обычно hit, char или епшп) type минимальное значение элемента множества (не менее 0) minval максимальное значение элемента множества (не более 255) maxval Тип каждого объекта класса Set определяется всеми тремя параметрами. Если какие-то из этих параметров различаются, считается, что это объекты разных типов и их нельзя, например, сравнивать друг с другом. Например, если объявлены объекты то оператор будет воспринят как ошибка, поскольку типы si и s2 различны.

Для множества определены следующие операции (в описании операций словами «данное множество» обозначается левый операнд):

Операция Определение —(const Set& rhs) const; двух множеств: данного и rhs -=(const Set& rhs); деленного разностью двух множеств: данного и rhs (операция *=(const Set& rhs); деленного пересечением двух множеств: данного и rhs (операция *(const Set& rhs) const; нию двух множеств: данного и rhs Set fastcall operator создание нового множества, опреconst Set& rhs) const; деленного объединением двух множеств: данного и rhs (операция or Set& fastcall operator данное множество равно объединеconst Set& rhs); нию двух множеств: данного и rhs Set& fastcall operator « friend ostream& operator«( поместить множество arg в поток ostream& os, const Set& arg); ostream (выводится 0 или 1 для » Set& fastcall operator удаление элемента el из данного » friend istream& operator извлечь множество arg из потока »(istream& is, Set& arg); istream (вводится 0 или 1 для Set& fastcall operator присваивание данному множеству ~ bool fastcall operator эквивалентность двух множеств:

==(const Set& rhs) const; данного и rhs (совпадение всех Все операции можно применять только к множествам одного типа, то есть к таким, при объявлении которых все аргументы объявления (type, minval и maxval) совпадают. В операциях, создающих новое множество (операции +, и *), переменная, в которую заносится результат, также должна быть того же типа, что и операнды. Операция эквивалентности возвращает true в случае, когда оба операнда содержат только совпадающие элементы. Соответственно только в этом случае операция неэквивалентности возвращает false.

Для множеств Set определены также два метода:

Метод Определение Clear Contains bool fastcall Рассмотрим примеры работы с множествами. Пусть вы задаете пользователю в программе некоторый вопрос, подразумевающий ответ типа "Yes/No". Тогда возможные символы, вводимые пользователем в качестве ответа, являются множеством, содержащим символы "у", "Y", "п" и "N". Сформировать такое множество можно операторами:

Set char, 0, 255 TrueKey;

Тогда проверить, принадлежит ли введенный пользователем символ Key множеству допустимых ответов, можно с помощью метода Contains:

if (ITrueKey.Contains(Key)) ShowMessage("Вы ввели ошибочный о т в е т " ) ;

Рассмотрим еще один пример. Пусть вы хотите, чтобы в окне редактирования Editl пользователь мог вводить только число, т.е. только цифры от 0 до 9. Это можно сделать, включив в обработчик события OnKeyPress этого окна операторы:

При попытке пользователя ввести символ, отличный от цифры, раздастся звук (его обеспечит функция Веер) и символ не появится в окне.

ShortDateFormat, LongDateFormat — переменные Определяют формат отображения дат.

Модуль SysUtils.hpp.

Определения extern PACKAGE A n s i S t r i n g ShortDateFormat;

extern PACKAGE A n s i S t r i n g LongDateFormat;

Описание Глобальная переменная ShortDateFormat определяет формат отображения дат в виде строки такими функциями, как DateTimeToString, FormatDateTime, DateToStr, DateTimeToStr и многими другими. По умолчанию в русифицированных версиях Windows она обеспечивает отображение даты в формате день (две цифры), месяц (две цифры), год (четыре цифры). В качестве разделителей используется символ, определенный в глобальной переменной DateSeparator (обычно точка). Один из приведенных ниже спецификаторов обеспечивает отображение даты в длинном формате, определенном глобальной переменной LongDateFormat. По умолчанию в русифицированных версиях Windows это день, название месяца, год (четырехзначное число с последующими символами "г."), разделенные пробелами.



Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 85 |