Конспект лекции
доцента кафедры ИВТ Гродненского госуниверситета
канд. техн. наук Ливак Елены Николаевны
ВВОД и ОТОБРАЖЕНИЕ ИНФОРМАЦИИ
Отображение текста
Для отображения различных надписей на форме используются в основном компоненты Label, StaticText (метки, специально предназначенные для отображения текстов) и Panel (предназначен для компоновки компонентов в окне формы, но может быть использован и для вывода тестов).
Отображаемый тест во всех компонентах определяется значением свойства Cаption. Его можно устанавливать в процессе проектирования или программно. Например,
Label1.Caption := ‘Новый текст’;
StaticText1.Caption := ‘Новый текст’;
! |
Для вывода числовой информации необходимо перевести число в строку.
Причем, для перевода целого числа следует воспользоваться функцией IntToStr,
для перевода числа с плавающей точкой - FloatToStr. Например,
Label1.Caption := ‘Решение уравнения: ’ + FloatToStr(x); {конкатенация строк}
Во всех компонентах цвет фона определяется свойством Color, а цвет символов - подсвойством Color свойства Font.
Компоненты StaticText и Panel имеют свойство BorderStyle, определяющее рамку текста (бордюр). Компонент Panel имеет еще свойства BevelInner, BevelOuter, BevelWidth, BorderWidth. Все они используются для оформления надписи.
Задание для самостоятельной работы - поэкспериментировать самостоятельно с перечисленными свойствами для оформления надписей.
Размещение всех компонентов на форме определяется свойствами Top (верхний край), Left (левый край), Heght (высота), Width (ширина).
Размер меток Label, StaticText определяется свойством Autosize.
Если Autosize = True, то размеры компонента (вертикальный и горизонтальный) определяются размерами надписи.
Если Autosize = False, то выравнивание теста компонента определяется свойством Alignment, которое позволяет выравнивать текст по левому, правому краю или центру клиентской области метки.
Замечание. Свойство Autosize панели Panel не относится к размерам надписи, свойство Alignment работает.
Перенос длинного текста осуществляется
· автоматически в метке StaticText, если Autosize = False и размер компонента достаточен для размещения нескольких строк;
· в метке Label, если
свойство WordWrap = True (допустимость переноса слов на новую строку)
Autosize = False (размер компонента не определяется размером надписи)
и высота компонента достаточна для размещения нескольких строк.
· в панели размещение нескольких строк невозможно!
Замечание. Для отображения текстовой информации можно использовать окна редактирования Edit и MaskEdit в режиме ReadOnly (плюс AutoSelect=False). Появляется возможность прокрутки длинных текстов.
Окна редактирования Edit и MaskEdit
В этих компонентах вводимый и выводимый текст содержится в свойстве Text. Его можно устанавливать в процессе проектирования или программно.
! |
Выравнивание текста невозможно.
Перенос строк невозможен. (Текст, не помещающийся по длине в окно, сдвигается; пользователь может его просмотреть перемещением курсора).
Если Autosize = True, то автоматически подстраивается под размер текста только высота.
Внешнее оформление определяется свойством BorderStyle.
Окна редактирования снабжены функциями работы с буфером. В них предусмотрены горячие клавиши: копирования (Ctrl+C), вырезания (Ctrl+X) в буфер, вставки (Ctrl+V) из буфера и отмены последней операции редактирования (Ctrl+Z). Следует напоминать пользователям об этих возможностях подсказками.
При вводе текста
Можно ограничить максимальную длину вводимого текста значением свойства MaxLength
Если MaxLength = 0, то длина текста не ограничена,
иначе задает макс количество символов, которое может ввести пользователь.
Можно определить, проводилось ли редактирование теста в окне, посредством свойства Modified. Для этого необходимо перед началом работы пользователя с текстом установить
Modified = False;
а при последующих обращениях проверять (True или False) значение этого свойства.
! |
При вводе числовой информации необходимо преобразовывать строковые значения в числовые. StrToFloat - функция преобразования строки в значение с плавающей точкой, StrToInt - в целое число.
Желательно предотвращать неправильный ввод чисел.
Лучше не дать возможность пользователю ввести неправильные символы. Это можно реализовать следующим образом.
Пусть хотим, чтобы пользователь в окно редактирования Edit мог вводить только цифры и символ запятой. Следует в обработчик события OnKeyPress этого компонента внести оператор:
if not (Key in [‘0’ .. ‘9’, ‘,’]) then Key := #0;
Этот оператор подменит все символы, кроме цифр и запятой, нулевым символом, который не занесется в текст окна редактирования.
Свойство PasswordChar позволяет превращать окно редактирования в окно ввода пароля.
По умолчанию его значение #0 - что соответствует обычному окну редактирования.
Если заменить этот символ любым другим (например, на *), то при вводе текста в данное окно вместо вводимых символов будут появляться символы *.
Компонент MaskEdit отличается от компонента Edit тем, что в нем можно задать строку маски в свойстве EditMask. Используется для ввода данных в общепринятых форматах, например, время (21:35:51), дата (01.03.2000) или тел. ( (0172) 108-209) и т.п.
Замечание. Для ввода и отображения чисел, дат и времени есть специальные компоненты.
Домашнее задание. По табличным данным справочников научиться пользоваться масками.
Многострочные окна редактирования Memo и RichEdit
Из названия следует, что компоненты работают с многострочным тестом.
Основное свойство - Lines, содержащее текст окна в виде списка строк. Имеет тип Tstrings.
Начальное значение текста можно установить в процессе проектирования, нажав на кнопку с многоточием около свойства Lines. А затем вводить и редактировать текст непосредственно в окне редактирования списков строк.
Программно можно заносить текст в окно редактирования с помощью методов свойства Lines.
Рассмотрим свойства и методы свойства Lines.
· Весь текст содержится в свойстве Text. Он представлен одной строкой типа String, внутри которой используются разделители типа символов возврата каретки и перевода строки.
· Доступ к отдельной строке текста можно получить с помощью
свойства Strings[Index: Integer]. (!! Индексы всегда с 0)
Например, текст первой строки - это Memo1.Lines.Strings[0].
Замечание. Следует учесть, что если окно редактирования изменяется в размерах при работе с приложением и свойство WordWrap=True {разрешен перенос строк}, то индексы строк будут изменяться при переносах строк, программно сложно отследить индексы.
· свойство Count содержит число строк в тексте (!!! доступно только для чтения)
Методы:
* Add и Append - служат для занесения новой строки в конец текста
Например, Memo1.Lines.Add (‘Фамилия’);
* LoadFromFile - для загрузки текста из файла
Например, Memo1.Lines.LoadFromFile(‘name.txt’);
* SaveToFile - для сохранения теста в файле
Например, Memo1.Lines.SaveToFileFile(‘newname.txt’);
Свойство Alignment - определяет выравнивание текста.
Свойство WordWrap - допустимость переноса длинных строк.
Свойство ScrollBars - определяет наличие полос прокрутки
(ssNone - нет по умолчанию, ssBoth -обе).
Свойство MaxLength - задает максимальную длину вводимого текста (0 - неограничена)
Свойство WantReturns -допустимость ввода пользователем в текст символа перевода строки.
Свойство WantTab -допустимость ввода пользователем в текст символа табуляции.
Cвойство SelStart (есть у обоих компонентов) указывает позицию курсора в тексте или начало выделенного пользователем текста.
Свойство CaretPos указывает на запись, поле X которой содержит номер символа в строке,
поле Y - номер строки, в которой находится курсор. Например, определить номер строки и символа, перед которым расположен курсор можно по значениям
Memo1.CaretPos.X+1 {символ}
Memo1.CaretPos.Y+1 {строка} !! нум с нуля, следовательно +1
Замечание. Можно отображать в строке состояния позицию курсора.
Очистить текст в окне редактирования можно с помощью процедуры Clear окна (! это не свойство и не метод компонентов редактирования).
Например, Memo1.Clear;
Особенности окна редактирования RichEdit
В компоненте Memo формат (шрифт, атрибуты, выравнивание) одинаков для всего текста и определяется свойством Font.
! |
При сохранении текста из Memo в файле формат не сохраняется.
При чтении из файла формат будет определяться значением свойства Font.
Компонент RichEdit работает с текстом в обогащенном формате RTF.
Атрибуты текста можно задавать свойством SelAttributes. У него есть подсвойства Color, Name (имя шрифта), Size, Style и т.п. Например,
RichEdit1.SelAttributes.Color:= ???
Метод Assign присваивает сразу всем атрибутам свойства SelAttributes значения.
Например,
можем реализовать изменение атрибутов текста (шрифта) с помощью окна диалога FontDialog. !!! Учитывает то, что объекты SelAttributes и Font совместимы по типу.
(на форме есть компонет RichEdit1, FontDialog1, Buttion1 {изменяет атрибуты текста}), тогда в обработчик события OnClick внести оператор
if FontDialog1.Execute
then RichEdit1. SelAttributes.Assign (FontDialog1.Font);
RichEdit1.SetFocus;
Свойство DefAttributes (!!! доступно только во время выполнения) содержит атрибуты по умолчанию (действуют до того, пока не изменены в свойстве SelAttributes, но сохраняются и в случае необходимости могут быть методом Assign присвоены атрибутам свойства SelAttributes.
Свойство Paragraph отвечает за выравнивание, отступы в пределах текущего абзаца с помощью значений подсвойств (Alignment и другие). (!!! Доступны только во время выполнения).
Компоненты выбора из списков
ListBox, CheckListBox, ComboBox
Компоненты ListBox и ComboBox отображают списки строк.
Отличия:
* ListBox отображает данные и позволяет пользователю выбирать
* ComboBox кроме того позволяет редактировать данные
* Различная форма отображения:
¨ ListBox отображает список в раскрытом виде с полосами прокрутки, если необходимо,
¨ ComboBox позволяет отображать список либо в раскрытом виде, либо в виде выпадающего списка
(!!! Замечание. Удобнее, так как экономит площадь окна приложения)
Общие свойства
Основное свойство компонентов Items. Имеет тип Tstrings. Свойства и методы этого типа уже рассмотрены выше. (Свойство Text, Strigs[Index], метод Add).
Свойство ItemIndex содержит индекс выбранной строки.
По умолчанию ItemIndex=-1 (означает, что ни одна из строк не выбрана)
! |
Свойство доступно только во время выполнения. Невозможно задать во время проектирования выбор по умолчанию (строка выбранная в начале работы).
Если это необходимо, то следует в обработчике события OnCreate формы задать значение, например, ListBox1.ItemIndex :=0;
Замечание. В окне ComboBox следует обязательно задавать значение по умолчанию, так как именно оно отображается в окне первоначально.
Замечание. Если в окне проводилось редактирование данных, то ItemIndex=-1. По этому признаку можно определить, проводилось ли редактирование.
Свойство Sorted позволяет упорядочивать список по алфавиту. Если Sorted=True, то новые строки добавляются не в конец, а по алфавиту.
Компонент ListBox
Свойство MultiSelect позволяет пользователю множественный выбор в списке (True). Если MultiSelect=False, то пользователь может выбрать только один элемент списка.
При множественном выборе для проверки выбран ли элемент списка следует проверять свойство Selected[Index:Integer] (типа Boolean).
Замечание. Если MultiSelect=True, то значение ItemIndex соответствует тому элементу списка, который находится в фокусе.
Свойство ExtendedSelect влияет на способ множественного выбора.
Если ExtendedSelect=True, то работают клавиши Shift (выбор прилегающих элементов) и Ctrl (выбор нескольких неприлегающих).
Свойство Columns определяет число столбцов, в которых будет отображаться список, если он не помещается целиком в окне компонента.
Свойство Style - стиль изображения.
LbStandard (по умолчанию) - список строк
другие значения позволяют отображать в списке изображения
Компонент CheckListBox
Список с индикаторами. Все свойства аналогичны ListBox, за исключением множественного выбора (мн. выбор посредством установки индикаторов).
Компонент ComboBox
Свойство Style - стиль изображения
csDropDown - выпадающий список с окном редактирования
csSimple - развернутый список с окном редактирования
csDropDownList - выпадающий список без окна редактирования
Свойство MaxLength определяет максимальное число символов, которое пользователь может ввести в окно редактирования. При MaxLength=0 число вводимых символов не ограничено.
Задача. Создание таблицы квадратных корней
Форма содержит окно списка ListBox1 и кнопку Button1 (Выход).
При создании формы необходимо загрузить в окно списка таблицу квадратных корней.
Procedure TForm1.FormCreate(Sender:Tobject);
var n:integer;
root:real;
rootstr, numstr: string;
begin
for n:=1 to 100 do
begin
root := sgrt(n);
str(root:14:9,rootstr);
str(n:5,numstr);
ListBox1.Items.Add(numstr + ‘ : ‘ + rootstr);
end;
end;
procedure TForm1.Button1Click(Sender:Tobject);
begin
Close; {закрытие главной формы завершает приложение}
end;
КОМПОНЕНТЫ ВВОДА и ОТОБРАЖЕНИЯ целых чисел
Для ввода и отображения целых чисел предназначены компоненты UpDown и SpinEdit.
Компонент UpDown превращает окно редактирования Edit в компонент, в котором пользователь может выбирать целое число, изменяя его кнопками со стрелками.
Компонент SpinEdit - отдельный компонент-сочетание окна редактирования с кнопками-стрелками.
Удобнее пользоваться компонентом SpinEdit. Если необходимо что-то нестандартное, тогда UpDown.
Свойства MinValue, MaxValue задают максимальное и минимальное значение.
Свойство Value - текущее значение.
! |
При вводе текстовых и числовых данных необходимо сократить число возможных ошибок пользователя.
Частично безошибочного ввода можно добиться за счет маскирования с использованием компонента MaskEdit.
Еще лучше использовать при вводе выбор с помощью компонентов типа ListBox, ComboBox (без разрешения редактирования), StringGrid и т.п. (При вводе с помощью компонента Edit пользователь может сделать любые ошибки.)