Как сделать рамку фокуса для поля delphi

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

На этом шаге мы рассмотрим некоторые свойства класса TForm . Описание некоторых свойств приведено на шаге 11.

Основным элементом любого приложения является форма - контейнер, в котором размещаются другие визуальные и невизуальные компоненты. С точки зрения пользователя форма - это окно, в котором он работает с приложением. Каждой новой форме, вводимой в приложение, соответствует свой модуль ( Unit ), описывающий эту форму как класс и включающий, если необходимо, какие-то дополнительные константы, функции и процедуры.

Рассмотрим более подробно некоторые свойства класса TForm .

1) property Active: Boolean; - определяет, имеет ли форма фокус ввода. Если имеет, оно возвращает True , если нет - False . Windows выводит заголовок активной формы цветом, отличающимся от цвета неактивных.

Независимо от типа приложения в каждый момент времени может быть активной только одна форма . Обратите внимание на то, что заголовок родительской формы в MDI -приложении изображен "активным" цветом. Однако свойство Active родительского MDI -окна, никогда не бывает равным True .

Примечание . Свойство ActiveForm класса TScreen возвращает форму, которая в данный момент имеет фокус ввода.

2) property ActiveControl: TWinControl; - указывает на потомка TWinControl , имеющего в настоящий момент фокус ввода. Значение этого свойства можно установить во время создания программы, определив, какой элемент будет иметь фокус ввода при инициализации формы. Назначение ActiveControl во время работы программы - установка фокуса ввода в поле с некорректно введенными данными. Приведенный ниже фрагмент кода позволяет проверить текст, введенный в элемент editCustName перед закрытием формы:

Примечание . Метод SetFocus потомков TWinControl устанавливает фокус ввода и обновляет свойство ActiveControl . Большинство событий передает параметр Sender своему обработчику. Этот параметр определяет, какой элемент обнаружил событие и запустил обработчик на выполнение.

3) property AutoScroll: Boolean; property HorzScrollBar: TControlScrollBar; property VertScrollBar: TControlScrollBar . Свойство AutoScroll управляет появлением полос прокрутки в форме, размеры которой не позволяют вывести все ее элементы одновременно. Если свойство равно True , и размеры формы были изменены так, что не все элементы стали видны, то в форме автоматически появляются полосы прокрутки. Если же значение свойства равно False , то будет потерян доступ к элементам формы, не поместившимся на экране.

Примечание . Компонент ТScrollВаr (вкладка Standard ), позволяет прокручивать форму независимо от значения свойства AutoScroll .

Можно управлять полосами прокрутки с помощью свойств HorzScrollBar и VertScrollBar . Это весьма полезно в программах, реализующих свойство распахивания окна. Поскольку размеры, например, выводимой диаграммы могут быть больше размеров формы, а ее вывод осуществляется самостоятельно, AutoScroll не активизируется, и поэтому прокрутку и рисование должен обеспечить сам программист. Вот пример такого кода, обеспечивающего прокрутку в двойном размере формы:

  • bsSizeable - обычный вид окна Windows с полосой заголовка, с возможностью для пользователя изменять размеры окна с помощью кнопок, расположенных в заголовке или с помощью мыши. Это значение задается по умолчанию;
  • bsDialog - неизменяемое по размерам окно (диалоговое окно);
  • bsSingle - окно, размер которого пользователь не может изменить, потянув курсором мыши за край окна, но может менять кнопками в полосе заголовка;
  • bsToolWindow - то же, что и bsSingle , но с полосой заголовка меньшего размера;
  • bsSizeToolWin - то же, что и bsSizeable , но с полосой заголовка меньшего размера и отсутствием в ней кнопок изменения размера;
  • bsNone - без строки заголовка. Окно не только не допускает изменения размера, но и не позволяет переместить его по экрану.

По умолчанию свойство BorderStyle имеет значение bsSingle , создающее обычное окно с изменяемыми размерами. Такое окно имеет стандартную строку заголовка и не имеет ограничений на расположение в ней кнопок. Примеры таких окон - программы Explorer (Проводник) и Notepad (Блокнот).

Значение bsDialog создает диалоговое окно, которое используется, когда программа требует ответа для продолжения выполнения программы или для вывода какой-либо другой информации. Видимое различие между стандартными и диалоговыми окнами заключается в том, что последнее не может изменять размеры.

Примечание . Значения biMinimize и biMaximize свойства BorderIcons не будут работать, если свойство BorderStyle установлено равным bsDialog .

Третий по популярности стиль окон - bsSingle , создающий форму, которая не может изменять размеры во время работы. В отличие от bsDialog , bsSingle не запрещает установку любых пиктограмм. Единственное ограничение состоит в том, что кнопка сворачивания окна, будучи выведенной, является недоступной (блокированной). Примep такой программы - Calculator (Калькулятор).

Панель инструментов ( Toolbar ) позволяет быстро получить доступ к сгруппированным функциям. В Delphi можно сконструировать панель инструментов, поместив группу компонентов TSpeedButton в форму, имеющую стиль bsSizeToolWin или bsToolWindow . Окно в стиле bsSizeToolWin может изменять размеры и не имеет кнопок минимизации и максимизации. Окно в стиле bsToolWindow действует так же, но не позволяет изменять свои размеры.

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

Примечание . Если для свойства BorderStyle было установлено значение, создающее окно с разрешенным изменением размеров, Delphi автоматически установит значение AutoScroll равным True . Формы со стилями bsDialog и bsNone не могут иметь строки меню.

5) property BorderIcons: TBorderIcons; - определяет набор кнопок, которые имеются в полосе заголовка.

6) property Height: Integer; property Width: Integer; - определяют высоту и ширину формы в пикселях и обычно используются для изменения размеров формы во время работы на дисплеях разной разрешающей способности. Вот пример увеличения размеров формы до размеров всего экрана:

Приведенный код будет работать плохо, так как требуется четыре обновления формы. Для этих целей лучше использовать метод SetBounds , определенный у потомков TWinControl :

7) property ClientHeight: Integer; property ClientWidth: Integer; . Окно состоит из двух частей - клиентской и неклиентской . Обычно приложение выводит изображения только в клиентской области, размер которой возвращается через свойства ClientHeight и ClientWidth . Обычно эти свойства используются для того, чтобы убедиться, что в форме может выводиться весь объект определенного размера. Показанный ниже текст приводит размер клиентской области формы в соответствие размерам изображения, содержащегося в компоненте TImage с именем imgPicture :

8) property FormStyle: TFormStyle; - задает тип формы.

9) property Icon: TIcon; - определяет пиктограмму, выводимую Windows при сворачивании формы до кнопки на панели задач.

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

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

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

При этом все нажатия клавиш отсылаются обработчикам событий OnKeyDown, OnKeyUp и OnKeyPress автоматически, и для "отлова" нажатия функциональной клавиши надо написать только один обработчик события OnKeyDown формы. Вот пример закрытия формы при нажатии клавиши F2 .

Рассматривая принцип работы этого кода, имейте в виду, что события OnKeyDown и OnKeyUp используют виртуальные коды (все они перечислены в файле WINDOWS.PAS ).

11) property Menu: TMainMenu; - определяет компонент TMainMenu , который предоставляет главное меню формы. Свойство Menu позволяет сделать меню контекстно-зависимым и часто используется в OLE -приложениях при замене исходного меню на меню приложения-сервера. Для изменения свойства Menu просто присвойте ему новое значение.

  • poDesigned - первоначальные размеры и положение окна во время выполнения те же, что во время проектирования. Это значение принимается по умолчанию, но обычно его следует изменить;
  • poScreenCenter - окно располагается в центре экрана. Размер окна тот, который был спроектирован. В мультимедийных приложениях, работающих одновременно с несколькими мониторами (начиная с Delphi 4 ) эта центральная позиция может быть несколько изменена;
  • poDesktopCenter - это значение предусмотрено, начиная с Delphi 4 . Окно располагается в центре экрана. Размер окна тот, который был спроектирован. Этот режим не используется в приложениях со множеством мониторов;
  • poDefault - местоположение и размер окна определяет Windows , учитывая размер и разрешение экрана. При последовательных показах окна его положение сдвигается немного вниз и вправо;
  • poDefaultPosOnly - местоположение окна определяет Windows . При последовательных показах окна его положение сдвигается немного вниз и вправо. Размер окна - спроектированный;
  • poDefaultSizeOnly - размер окна определяет Windows , учитывая размер и разрешение экрана. Положение окна - спроектированное;
  • poMainFormCenter - это значение предусмотрено, начиная с Delphi 5 . Окно располагается в центре главной формы. Размер окна тот, который был спроектирован. Этот режим не приспособлен к приложениям со множеством мониторов. Используется только для вторичных форм. Для главной формы действует так же, как poScreenCenter .

Примечание . Рассмотренные свойства работают тогда, когда WindowState=wsNormal .

Таким образом, значение по умолчанию ( poDesigned ) заставляет форму выводиться в месте, определенном при разработке приложения. Положение и размер формы при этом берутся из свойств Left, Top, Height и Width . Поскольку заранее неизвестно, в какой системе будет запущено приложение, то может оказаться, что на мониторе с низким разрешением при использовании этого значения свойства будет видна только часть формы.

Более полезно значение poScreenCenter , которое использует заданные при создании приложения значения Width и Height , но оно так изменяет Left и Тор , что форма выводится в центре экрана.

Если свойство Position равно poDefault Windows автоматически установит размеры и положение формы, но при этом нельзя будет контролировать ее размеры. Можно создать форму размером 200x200 точек, которая будет выведена как 640x480 точек. Из-за этого, в частности, не допускается применение данного значения для MDI -форм.

Значение poDefaultPosOnly более полезно, так как оно автоматически определяет расположение формы, но не ее размеры (а потому рекомендуется для MDI -форм, в которых требуются определенные размеры дочерних форм).

Значение свойства ( poDefaultSizeOnly ) автоматически определяет размер, но не расположение формы. Это значение может использоваться там, где важно положение формы на экране, а не ее размер.

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

Приведем код приложения с комментариями.

Примечание . Для компиляции примера не забудьте включить в раздел uses модуль INIFiles .

После выполнения приложения INI -файл будет содержать строки такого типа:

Как сделать рамку вокруг родительского блока, при фокусе на input. Чтобы рамка была вокруг "header-search-wrapper". Но только без JS, нужно на чистом CSS если возможно. С JS знаю как.


1 ответ 1

Нужен всё обернуть в форму и воспользоваться псевдоклассом. Не поддерживается edge и IE


Всё ещё ищете ответ? Посмотрите другие вопросы с метками css style focus или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.26.41266

Сам :focus часто используется в качестве сигнала пользователю, что элемент готов к работе. Браузер Chrome, например, к полю формы, получившему фокус, добавляет цветную рамку (рис. 1).

Поле с фокусом и без

Рис. 1. Поле с фокусом и без

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


Вычерчивание дуги выполняет метод Arc, инструкция вызова которого вобщем виде выглядит следующим образом:

  • xl, yl, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является вычерчиваемая дуга;
  • хЗ, уз — параметры, определяющие начальную точку дуги;
  • х4, у4 — параметры, определяющие конечную точку дуги.

Начальная (конечная) точка — это точка пересечения границы эллипса и прямой, проведенной из центра эллипса в точку с координатами хЗ и уз (х4, у4). Дуга вычерчивается против часовой стрелки от начальной точки к конечной

Цвет, толщина и стиль линии, которой вычерчивается дуга, определяются значениями свойства Реп поверхности (canvas), на которую выполняется вывод.

Рис. 1О.7. Значения параметров метода Arc определяют дугу как часть эллипса (окружности)


Прямоугольник

Прямоугольник вычерчивается методом Bectangie, инструкция вызова которого в общем виде выглядит следующим образом:

  • Объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;
  • x1, y1 и y2, у2 — координаты левого верхнего и правого нижнего углов прямоугольника.

Метод RoundRec тоже вычерчивает прямоугольник, но со скругленными углами. Инструкция вызова метода RoundRec выглядит так:

  • x1, y1, х2, у2 — параметры, определяющие положение углов прямоугольника, в который вписывается прямоугольник со скругленными углами;
  • хЗ и уЗ — размер эллипса, одна четверть которого используется для вычерчивания скругленного угла (рис. 10.8).

Рис. 10.8. Метод RoundRec вычерчивает прямоугольник со скругленными углами


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

Есть еще два метода, которые вычерчивают прямоугольник, используя в качестве инструмента только кисть (Brush). Метод FiliRect вычерчивает закрашенный прямоугольник, а метод FrameRect — только контур. У каждого из этих методов лишь один параметр — структура типа TRect. Поля структуры TRect содержат координаты прямоугольной области, они могут быть заполнены при помощи функции Rect.

Ниже в качестве примера использования методов FillRect и FrameRect приведена процедура, которая на поверхности формы вычерчивает прямоугольник с красной заливкой и прямоугольник с зеленым контуром.

Многоугольник

Метол polygon вычерчивает многоугольник. В качестве параметра метод получает массив типа TPoint. Каждый элемент массива представляет собой

запись, поля (х,у) которой содержат координаты одной вершины многоугольника. Метод Polygon вычерчивает многоугольник, последовательно

соединяя прямыми линиями точки, координаты которых находятся в массиве; первую со второй, вторую с третьей, третью с четвертой и т. д. Затем

Цвет и стиль границы многоугольника определяются значениями свойства Реп, а ивет и стиль заливки области, ограниченной линией границы, — зна-

Метод polygon вычерчивает многоугольник. В качестве параметра методполучает массив типа TPoint. Каждый элемент массива представляет собой запись, поля (х,у) которой содержат координаты одной вершины многоугольника. Метод Polygon вычерчивает многоугольник, последовательносоединяя прямыми линиями точки, координаты которых находятся в массиве; первую со второй, вторую с третьей, третью с четвертой и т. д. Затемсоединяются последняя и первая точки.

Цвет и стиль границы многоугольника определяются значениями свойстваРеп, а цвет и стиль заливки области, ограниченной линией границы, — значениями свойства Brush, причем область закрашивается с использованиемтекущего цвета и стиля кисти.

Ниже приведена процедура, которая, используя метод polygon, вычерчиваеттреугольник:

Сектор

Метод Pie вычерчивает сектор эллипса или круга. Инструкция вызова метода в общем виде выглядит следующим образом:

  • x1, y1, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является сектор;
  • хЗ, уЗ, х4, у4 — параметры, определяющие координаты конечных точек прямых, являющихся границами сектора.

Начальные точки прямых совпадают с центром эллипса (окружности). Сектор вырезается против часовой стрелки от прямой, заданной точкой с координатами (хЗ, уз), к прямой, заданной точкой с координатами (х4, у4) (рис. 10.9).

Рис. 1О.9. Значения параметров метода Pie определяют сектор как часть эллипса (окружности)


Точка

Поверхности, на которую программа может осуществлять вывод графики, соответствует объект canvas. Свойство Pixels, представляющее собой двумерный массив типа TCoior, содержит информацию о цвете каждой точки графической поверхности. Используя свойство Pixels, можно задать тре-

Поверхности, на которую программа может осуществлять вывод графики,соответствует объект canvas. Свойство Pixels, представляющее собой двумерный массив типа TColor, содержит информацию о цвете каждой точки графической поверхности. Используя свойство Pixels, можно задать требуемый цвет для любой точки графической поверхности, т. е. "нарисовать" точку.

Например, инструкция:

окрашивает точку поверхности формы в красный цвет.

Размерность массива Pixels определяется размером графической поверхности. Размер графической поверхности формы (рабочей области, которую также называют клиентской) задается значениями свойств clientwidth и clientHeight, а размер графической поверхности компонента image — значениями свойств width и Height. Левой верхней точке рабочей области формы соответствует элемент pixels [о, о], а правой нижней —Pixels[Clientwidth - 1,ClientHeight - 1].

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

Например, если некоторая функция f(x) может принимать значения от нуля до 1000, и для вывода ее графика используется область формы высотой в 250 пикселов, то масштаб оси у вычисляется по формуле: т = 250/1000. Таким образом, значению/(х) = 70 будет соответствовать точка с координатой Y= 233. Значение координаты вычислено по формуле

Y=h-f(x)x m = 250 - 70х(250/1000),

где h — высота области построения графика.

Обратите внимание на то, что точное значение выражения

250 - 70х(250/1000) равно 232,5.

Но т. к. индексом свойства Pixels, которое используется для вывода точки на поверхность canvas, может быть только целое значение, то число 232,5 округляется к ближайшему целому, которым является число 233.

Следующая программа, текст которой приведен в листинге 10.5, используя свойство Pixels, выводит график функции у = 2 sm(x) e^5. Для построения графика используется вся доступная область формы, причем если во время работы программы пользователь изменит размер окна, то график будет выведен заново с учетом реальных размеров окна.

Читайте также: