Как записывается адрес в строку состояния
Перейти к содержимому

Как записывается адрес в строку состояния

Строка cостояния

Ваши программы JavaScript могут писать в строку состояния – это область снизу вашего окна браузера. Все, что вы должны сделать, это указать строку в window.status. Следующий пример показывает вам две кнопки, которые могут использоваться, чтобы записать в строку состояния и опять стереть текст.
Сценарий выглядит следующим образом:

Мы создаем форму с двумя кнопками. Обе кнопки вызывают функцию statbar(). Посмотрите, как выглядит обращение к функции, созданное кнопкой Write!:

Внутри скобок мы определяем строку "Hi! This is the statusbar!" Это значит, что строка передаётся в функцию statbar(). Вы видите, что мы определили функцию statbar(), как показано ниже:

Что является новым – то, что мы используем txt внутри скобок имени функции. Это означает строка, которую мы передали в функциу, сохранена в переменной txt. Передача переменных в функции – часто используемый путь для создания более гибких функций. вы можете передавать несколько значений в функции – вы только должны отделить их через запятые.

Строка txt отображается в строке состояния через window.status = txt.
Стирание текста в строке состояния — достигаеться через задание пустой строки в window.status.

Показ текста в строке состояния может легко использоваться в комбинации с ссылками. Вместо того, чтобы показывать URL связи вы можете объяснять на словах, относительно чего следующая страница. Эта ссылка показывает это – только переместите ваш курсор поверх ссылки. Код для этого примера выглядит следующим образом:

Здесь мы используем onMouseOver и onMouseOut, чтобы обнаружить, когда курсор перемещается поверх ссылки.

Вы можете задать вопрос, почему мы должны писать return true внутри свойства onMouseOver. Это означает, что браузер не будет выполнять собственный код как реакцию на событие MouseOver. Обычно браузер отображает URL ссылки в строке состояния. Если мы не используем return true, браузер будет писать в строку состояния сразу после того, как наш код был выполнен – это означает, что браузер записало поверх нашего текста, и пользователь не смог бы прочитать его. В общем, мы можем подавить такие действия браузера, используя return true в обработчике событий.

onMouseOut не существовал в JavaScript 1.0. Вы можете получить различные результаты на различных платформах. На Unix платформах например текст исчезнет даже при том, что браузер не знает onMouseOut. В Windows текст останется. Если вы хотите, чтобы ваш сценарий был совместимым, вы могли бы например писать функцию, которая пишет текст в строку состояния и стирает этот текст после некоторого периода времени. Это программируется с использованием таймаутов. Мы узнаем больше относительно таймаутов в следующем разделе.

В этом сценарии вы можете видеть другую вещь – иногда вы хотите вывести кавычки. Мы хотим вывети строку Don't click me — поскольку мы определяем эту строку внутри onMouseOver обработчика событий, мы используем одиночные кавычки. Но слово Don't тоже использует одиночную кавычку! Броузер запутается, если вы просто напишете 'Don't . '. Чтобы решить эту проблему, вы можете просто написать наклонную черту влево \ перед кавычкой – что означает, что она принадлежит выводу (вы можете проделать тоже самое с двойными кавычками « ).

Панели состояния (элементы управления Windows)

Строка состояния — это горизонтальное окно в нижней части родительского окна, в котором приложение может отображать различные типы сведений о состоянии. Строка состояния может быть разделена на части для отображения нескольких типов сведений. На следующем снимке экрана показана строка состояния в приложении Microsoft Windows Paint. В этом случае строка состояния содержит текст «Для справки, щелкните «Разделы справки» в меню справки». Строка состояния — это область в нижней части окна, содержащая текст справки и сведения о координатах.

screen shot of the paint application, with a status bar that contains hints about online help

Этот раздел содержит следующие темы.

Типы и стили

Положение строки состояния по умолчанию находится в нижней части родительского окна, но вы можете указать стиль CCS_TOP , чтобы он отображалась в верхней части клиентской области родительского окна.

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

Объединение стилей CCS_TOP и SBARS_SIZEGRIP не рекомендуется, так как результирующий захват размера не работает.

Размер и высота

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

Процедура окна автоматически настраивает размер строки состояния при получении сообщения WM_SIZE . Как правило, при изменении размера родительского окна родитель отправляет WM_SIZE сообщение в строку состояния.

Приложение может задать минимальную высоту области рисования строки состояния, отправив окно SB_SETMINHEIGHT сообщение, задав минимальную высоту в пикселях. Область рисования не включает границы окна. Минимальная высота полезна для рисования в строке состояния, нарисованной владельцем. Дополнительные сведения см. далее в этой главе.

Вы получите ширину границ строки состояния, отправив окно SB_GETBORDERS сообщение. Сообщение содержит адрес массива из трех элементов, который получает ширину.

строки состояния Multiple-Part

Строка состояния может содержать множество различных частей, каждая из которых отображает другую строку текста. Строка состояния делится на части, отправляя окно SB_SETPARTS сообщение, указывая количество частей для создания и адрес целочисленного массива. Массив содержит один элемент для каждой части, а каждый элемент задает клиентская координата правой границы части.

Строка состояния может содержать не более 256 частей, хотя приложения обычно используют гораздо меньше, чем это. Вы получите количество частей в строке состояния, а также координату правого края каждой части, отправив окно SB_GETPARTS сообщение.

Текстовые операции строки состояния

Вы задаете текст любой части строки состояния, отправляя сообщение SB_SETTEXT , указывая отсчитываемый от нуля индекс части, адрес строки для рисования в части и метод рисования строки. Метод рисования определяет, имеет ли текст границу и стиль границы. Он также определяет, отвечает ли родительское окно за рисование текста. Дополнительные сведения см. в разделе «Гистограммы состояния владельца » ниже.

По умолчанию текст выравнивается по левому краю в указанной части строки состояния. Символы табуляции (\ t) можно внедрить в текст, чтобы выровнять по центру или по правому краю. Текст справа от одного символа табуляции выравнивается по центру, а текст справа от второго символа табуляции выравнивается по правому краю.

Чтобы получить текст из строки состояния, используйте SB_GETTEXTLENGTH и SB_GETTEXT сообщения.

Если приложение использует строку состояния с одной частью, можно использовать WM_SETTEXT, WM_GETTEXT и WM_GETTEXTLENGTH сообщения для выполнения текстовых операций. Эти сообщения обрабатываются только с частью, которая имеет индекс нуля, что позволяет обрабатывать строку состояния так же, как статический текстовый элемент управления.

Чтобы отобразить строку состояния без создания строки состояния, используйте функцию DrawStatusText . Функция использует те же методы для рисования состояния, что и процедура окна для строки состояния, но не задает автоматически размер и положение сведений о состоянии. При вызове функции необходимо указать размер и положение сведений о состоянии, а также контекст устройства окна, в котором его следует нарисовать.

строки состояния Owner-Drawn

Вы можете определить отдельные части строки состояния, чтобы они были нарисованы владельцем. С помощью этого метода вы получаете больше управления, чем в противном случае, над внешним видом части окна. Например, можно отобразить растровое изображение, а не текст или нарисовать текст с помощью другого шрифта.

Чтобы определить часть окна как нарисованную владельцем, отправьте сообщение SB_SETTEXT в строку состояния, указав часть и метод рисования SBT_OWNERDRAW. При указании SBT_OWNERDRAW параметр lParam представляет собой 32-разрядное значение, которое приложение может использовать при рисовании части. Например, можно указать дескриптор шрифта, точечный дескриптор, адрес строки и т. д.

Когда строке состояния необходимо нарисовать нарисованную владельцем часть, она отправляет сообщение WM_DRAWITEM родительскому окну. Параметр wParam сообщения — это идентификатор дочернего окна строки состояния, а параметр lParam — адрес структуры DRAWITEMSTRUCT . Родительское окно использует сведения в структуре для рисования части. Для нарисованной владельцем части строки состояния DRAWITEMSTRUCT содержит следующие сведения.

Участник Описание
CtlType Не определено; не используйте.
CtlID Идентификатор дочернего окна строки состояния.
Itemid Отсчитываемый от нуля индекс отрисовки части.
itemAction Не определено; не используйте.
ItemState Не определено; не используйте.
hwndItem Дескриптор строки состояния.
Hdc Обработка контекста устройства в строке состояния.
rcItem Координаты отрисовки части окна. Координаты относятся к левому верхнему углу строки состояния.
Itemdata Определяемое приложением 32-разрядное значение, указанное в параметре lParamсообщения SB_SETTEXT .

Строки состояния простого режима

Строка состояния помещается в простой режим, отправляя сообщение SB_SIMPLE . В строке состояния простого режима отображается только одна часть. Если задан текст окна, окно становится недействительным, но оно не будет перерисовывано до следующего WM_PAINT. Ожидание сообщения уменьшает мерцание экрана, минимизируя количество перерисовок окна. Строка состояния простого режима полезна для отображения текста справки для элементов меню, пока пользователь прокручивает меню.

Строка, отображаемая строкой состояния в простом режиме, сохраняется отдельно от строк, отображаемых в режиме nonsimple. Это означает, что окно можно поместить в простой режим, задать его текст и вернуться в режим nonsimple без изменения текста в режиме nonsimple.

При настройке текста строки состояния простого режима можно указать любой метод рисования, кроме SBT_OWNERDRAW. Строка состояния простого режима не поддерживает рисование владельца.

Обработка сообщений строки состояния по умолчанию

В этом разделе описываются сообщения, обрабатываемые процедурой окна для предопределенного класса STATUSCLASSNAME .

Строка состояния

Составленные Вами программы на JavaScript могут выполнять запись в строку состояния — прямоугольник в нижней части окна Вашего браузера. Все, что Вам необходимо для этого сделать — всего лишь записать нужную строку в window.status. В следующем примере создаются две кнопки, которые можно использовать, чтобы записывать некий текст в строку состояния и, соответственно, затем его стирать.

function statbar(txt) <­
window.status = txt;
>

Итак, мы создаем форму с двумя кнопками. Обе эти кнопки вызывают функцию statbar(). Вызов от клавиши Писать! выглядит следующим образом:

statbar(‘Привет! Это окно состояния!’);

В скобках мы написали строку: ‘Привет! Это окно состояния!’ Это как раз и будет текст, передаваемый функции statbar(). В свою очередь, можно видеть, что функция statbar() определена следующим образом:

function statbar(txt) <­
window.status = txt;
>

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

Механизм вывода текста в строку состояния удобно использовать при работе со ссылками. Вместо того, чтобы выводить на экран URL данной ссылки, Вы можете просто на словах объяснять, о чем будет говориться на следующей странице. Следующая ссылка демонстрирует это — достаточно лишь поместить указатель вашей мыши над этой ссылкой:

Здесь мы пользуемся процедурами onMouseOver и onMouseOut, чтобы отслеживать моменты, когда указатель мыши проходит над данной ссылкой. Вы можете спросить, а почему в onMouseOver мы обязаны возвращать результат true. На самом деле это означает, что браузер не должен вслед за этим выполнять свой собственный код обработки события MouseOver. Как правило, в строке состояния браузер показывает URL соответствующей ссылки. Если же мы не возвратим значение true, то сразу же после того, как наш код был выполнен, браузер перепишет строку состояния на свой лад — то есть наш текст будет тут же затерт и читатель не сможет его увидеть. В общем случае, мы всегда можем отменить дальнейшую обработку события браузером, возвращая true в своей собственной процедуре обработки события.

в JavaScript 1.0 процедура OnMouseOut еще не была представлена. И если Вы пользуетесь Netscape Navigator 2.x, то возможно на различных платформах Вы можете получить различные результаты. Например, на платформах Unix текст исчезает даже несмостря на то, что браузер не знает о существовании процедуры onMouseOut. В Windows текст не исчезает. И если Вы хотите, чтобы ваш скрипт был совместим с Netscape 2.x для Windows, то можете, к примеру, написать функцию, которая записывает текст в окно состояния, а потом стирает его через некоторый промежуток времени. Программируется это с помощью таймера timeout. Подробнее работу с таймерами мы рассмотрим в одном из следующих параграфов.

В этом скрипте Вы можете видеть еще одну вещь — в некоторых случаях Вам понадобится печатать символы кавычек. Например, мы хотим напечатать текст Don’t click me — однако поскольку мы передаем эту строку в процедуру обработки события onMouseOver, то мы используем для этого одинарные кавычки. Между тем, как слово Don’t тоже содержит символ одинарной кавычки! И в результате если Вы просто впишете »Don’t …’,браузер запутается в этих символах ‘. Чтобы разрешить эту проблему, Вам достаточно лишь поставить обратный слэш перед символом кавычки — это означает, что данный символ предназначен именно для печати. (То же самое Вы можете делать и с двойными кавычками — «).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *