Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Стандартные процедуры для работы с множествами

Поиск

В язык Delphi введены две стандартные процедуры Include и Exclude, которые предназначены для работы с множествами.

1. Процедура Include(S, I) включает во множество S элемент I. Она дублирует операцию + (плюс) с той лишь разницей, что при каждом обращении включает только один элемент и делает это более эффективно.

2. Процедура Exclude(S, I) исключает из множества S элемент I. Она дублирует операцию – (минус) с той лишь разницей, что при каждом обращении исключает только один элемент и делает это более эффективно.

Выражение Результат
S:= [1, 3]; [1, 3]
Include(S, 2); [1, 2, 3]
Exclude(S, 3) [1, 2]

13. Записи. Описание, задание значений полей, работа с записями. Примеры.

Объявление записи

Запись — это составной тип данных, состоящий из фиксированного числа элементов одного или нескольких типов. Описание типа записи начинается словом record и заканчивается словом end. Между ними заключен список элементов, называемых полями, с указанием идентификаторов полей и типа каждого поля:

type <имя записи> = record

<список имен полей1>: тип1;

...

<список имен полей…>: тип…;

end.

 

Пример:

 

type TPerson = record FirstName: string[20]; // имя LastName: string[20]; // фамилия BirthYear: Integer; // год рождения end;

Особенности:

1. Идентификаторы полей должны быть уникальными только в пределах записи.

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

Чтобы получить в программе реальную запись, нужно создать переменную соответствующего типа:

var Friend: TPerson;

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

Доступ

Доступ к содержимому записи осуществляется посредством идентификаторов переменной и поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи Friend, нужно записать:

Friend.FirstName:= 'Alexander';Friend.LastName:= 'Ivanov';Friend.BirthYear:= 1991;

Обращение к полям записи имеет несколько громоздкий вид, что особенно неудобно при использовании мнемонических идентификаторов длиной более 5 символов. Для решения этой проблемы в языке Delphi предназначен оператор with, который имеет формат:

with <запись> do <оператор>;

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

with Friend dobegin FirstName:= 'Alexander'; LastName:= 'Ivanov'; BirthYear:= 1991;end;

Операции над записями

Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип. Например,

Friend:= BestFriend;

После выполнения этого оператора значения полей записи Friend станут равными значениям соответствующих полей записи BestFriend.

2.11.3. Записи с вариантами

Строго фиксированная структура записи ограничивает возможность ее применения. Поэтому в языке Delphi имеется возможность задать для записи несколько вариантов структуры. Такие записи называются записями с вариантами. Они состоят из необязательной фиксированной и вариантной частей.

Вариантная часть напоминает условный оператор case. Между словами case и of записывается особое поле записи – поле признака. Оно определяет, какой из вариантов в данный момент будет активизирован. Поле признака должно быть равно одному из расположенных следом значений. Каждому значению сопоставляется вариант записи. Он заключается в круглые скобки и отделяется от своего значения двоеточием.

type <имя записи> = record

<список имен полей1>: тип1;

...

<список имен полей…>: тип…;

case <поле признака>: ordinalType of

<список значений1>: (вариант1);

...

<список значений…>: (вариант…);

end,

 

где <поле признака> - корректный идентификатор, который может принимать значения порядкового типа; ordinalType – идентификатор порядкового типа; <список значений…> - список значений поля признака, разделенных ‘,’; (вариант…) – список имен полей с типами, заключенных в круглые скобки.

Пример описания записи с вариантами:

type TFigure = record X, Y: Integer; case Kind: Integer of 0: (Width, Height: Integer); // прямоугольник 1: (Radius: Integer); // окружностьend;

Обратите внимание, что у вариантной части нет отдельного end, как этого можно было бы ожидать по аналогии с оператором case. Одно слово end завершает и вариантную часть, и всю запись.

14. Основные компоненты VCL для работы со строками, массивами строк (Label, Edit, LabeledEdit, Memo, StringGrid), их свойства.

EDIT

Компонент Edit используется для ввода, вывода и редактирования строк. Отображается строка, записанная в свойстве Text. Строки могут быть достаточно длинные. Однако этот компонент не распознаёт символов конца строки и не может быть использован для работы с несколькими строками. С помощью компонента Edit можно отобразить нередактируемый текст, если свойству ReadOnly присвоить значение true.

Для изменения шрифта, используемого при записи текста, необходимо изменить значение свойства Font. Свойство CharCase используется для задания регистра символов, а свойство MaxLength позволяет ограничить длину строки.

Метод Clear применяется для удаления всего текста, а метод ClearSelection – для удаления выделенной части строки. По умолчанию введённый текст выделяется при получении компонентом фокуса ввода – это определяется значением свойства AutoSelect (если true – то выделяется). Компонент Edit можно использовать для ввода пароля. Для этого свойству PassWordChar необходимо присвоить значение символа, который будет отображаться на экране при наборе пароля.

MEMO

Компонент Memo предназначен для ввода, редактирования и отображения текста. В отличие от редактора Edit может содержать несколько строк, которые задаются либо свойством Text, либо свойством Lines. Свойство Text используется для доступа ко всему содержимому компонента, а свойство Lines – для работы с отдельными строками. Редактор Memo может содержать полосы прокрутки ScrollBars.

Многострочный редактор хранит информацию в массиве Lines типа TStrings. Для загрузки текста из файла используется метод LoadFromFile. Для сохранения информации в файле используется метод SaveToFile. При необходимости добавить, удалить, вставить строку используются методы Add, Delete, Insert. Для записи текста в процессе проектирования приложения надо открыть окно редактора String list editor кнопкой, расположенной в Инспекторе объектов у свойства Lines.

В примере редактор Memo1 очищается, и в него с помощью метода Add выводятся значения из массива целых чисел x. Так как компонент Memo работает со строками, то предварительно выполняется перевод целого числа в строку функцией inttostr:

Memo1.Lines.Clear; for i:=0 to n-1 do Memo1.Lines.Add(inttostr(x[i]));

STRINGGRID

Компонент StringGrid имеют форму таблиц, предоставляют программисту мощные возможности создания и обслуживания табличных структур данных, позволяют отображать и редактировать данные в каждой ячейке

таблица StringGrid, предназначеная для работы с текстовыми данными.

Таблица делится на две части – фиксированную и рабочую. Фиксированная часть служит для отображения заголовков столбцов/рядов и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самый верхний ряд таблицы. Остальная часть таблицы – рабочая, она содержит произвольное число столбцов и рядов. Количество рядов и столбцов можно изменять в Инспекторе объектов и программно. По умолчанию свойства ColCount и RowCount, определяющие размеры таблицы, имеют значение 5. С помощью сложного свойства Options определяется внешний вид и функциональные свойства таблицы. Так, параметр goEditing управляет режимом редактирования. Чтобы можно было вводить в таблицу данные и редактировать содержимое ячеек, параметр goEditing надо установить в true. При работе приложения пользователь может вводить данные только в ячейки рабочей области. Однако программно может быть реализован доступ к любым ячейкам таблицы.

Свойство Cells[ACol,ARow:integer]:String обеспечивает доступ к отдельным ячейкам и представляет собой двумерный массив, содержащий строки текста ячеек таблицы. Размеры массива определяются значениями свойств ColCount и RowCount. Параметр ACol указывает колонку ячейки, а параметр ARow – её строку. Доступ к ячейкам таблицы осуществляется во время выполнения приложения. Для примера зададим нужное число строк таблицы и запишем заголовки первого и второго столбца:

StringGrid1.RowCount:=10;StringGrid1.Cells[0,0]:='Аргумент';StringGrid1.Cells[1,0]:='Функция';

Свойство Objects[ACol,ARow:integer]:TObject обеспечивает доступ к объекту, связанному с ячейкой (ACol, Arow). Это свойство применяется, в основном, для связывания изображения со строками и использования их для специфического отображения данных в таблице. Следующая строка помещает объект MyBitmap типа TBitmap в 10-ю колонку, 3-ю строку таблицы StringGrid:

StringGrid1.Objects[10,3]:= MyBitmap;

Если объект был помещен в массив Objects, он продолжит своё существование даже после того, как таблица StringGrid будет удалена. Свойство Cols[index:integer]:TString – представляет собой список строк, содержащий значения всех ячеек колонки с номером index. Это свойство используется для получения доступа к любому столбцу.

Свойство Rows[index:integer]:TString обеспечивает доступ к ряду с номером, заданным параметром index. Для примера выполним копирование первой строки StringGrid2 в четвёртую строку StringGrid1:

StringGrid1.Rows[4].Assign(StringGrid2.Rows[1]);

Аналогично можно выполнять копирование в любые компоненты, имеющие свойства класса TString, например, в ComboBox или ListBox. Компонент StringGrid позволяет выбирать значения, отображённые в ячейках, во время работы приложения. В момент выбора ячейки генерируется событие OnSelectCell, в обработчик которого передаются номера столбца ACol и строки ARow выделенной ячейки. Это событие позволяет использовать в программе значение из выбранной ячейки:

procedure TForm1.StringGrid2SelectCell(Sender: TObject; ACol,ARow: Integer; var CanSelect: Boolean); beginif (ACol in[1..3]) and (ARow in[1..3]) then case ARow of 1: xn:=strtofloat(StringGrid2.cells[ACol,ARow]);2: xk:=strtofloat(StringGrid2.cells[ACol,ARow]);3: hx:=strtofloat(StringGrid2.cells[ACol,ARow]); end; end; Labelededit Компонент Delphi LabeledEdit во многом похож на окно редактирования Edit с единственным отличием – в нем имеется привязанная к окну метка(Label). Наличие метки – свойства EditLabel имеющего свои подсвойства, методы, события, создает ряд удобств в использование компонента. Во-первых, практически любые окна редактирования в приложении все равно имеют связанную с ним метку, типа Label, поясняющую название окна. Но в данном случае не приходится заботиться о её размещении: с помощью свойства LabalPosition метку можно разместить снизу, сверху, слева или справа окна и она будет привязана к нему при любых перемещениях. Во-вторых, выделение символом амперсанда «&» какого-то символа надписи в свойстве EditLabel1.Caption позволяет задать для окна клавиши быстрого доступа – при нажатии пользователем клавиши Alt и клавиши выделенного символа, при этом фокус будет автоматически передаваться данному окну. В-третьих, облегчает управление доступностью окна. Например LabeledEdit1.Enabled:=not LabeledEdit1.Enabled;Изменяет доступность окна. Если окно сделано недоступным, то недоступной выглядит и связанная с ним метка, извещая пользователя, что данным окном нельзя пользоваться.Большинство свойств, методов и событий идентичны компоненту Edit.Рассмотрим основные свойства LabeledEdit EditLabel.Captoin строка текста, отображаемая меткой EditLabel.Color определяет цвет фона метки EditLabel.Font определяет атрибуты шрифта EditLabel.Layout позволяет выравнивать текст в метки по вертикалиEditLabel.ShowAccelChar определяет, как символ амперсанд «&» отображается в тексте метки EditLabel.WordWrap если True то текст переносится на новую строку, если он больше ширины метки, и высота метки позволяет разместить несколько строк LabelPosition Определяет положение метки относительно окнаLabelSpacing Расстояние в пикселях между меткой и окном edit Компонент Delphi Edit предназначен для ввода пользовательских данных и представляет собой однострочное поле.Основным свойством edit’a является text типа данных string т.е. для ввода чисел нужно использовать функции FloatToStr(дробные числа) и IntToStr(целые числа). Перенос строк в этом компоненте по сравнению с label невозможен. Текст, не поместившийся по длине в компонент, просто сдвигается влево и пользователь может курсором перемещаться по этому тексту. свойства Edit Text Содержит отображаемую компонентом строкуMaxLegth максимальная длина текста, если значение равно 0, то можно вводить неограниченное количество символовFont Свойство позволяющее устанавливать шрифт текста, размер и его цветReadOnly Если значение этого свойство равно True, то текст в поле ввода пользователь изменить не сможет AutoSize автоматически подстраивает под размер текста высоту поля, а ширина окна не меняется ни при каких условияхBevelEdgesBevelInnerBevelKindBevelOuter Эти свойства определяют эффекты объемности поля вводаBorderStyle вид рамки, поля вводаPasswordChar свойство позволяющее сделать поле для ввода пароля, по умолчанию стоит значение равное #0(нулевой символ), для отображения звездочек необходимо в это поле поставить соответствующий символ AutoSelect Если значение равно True то при получении фокуса компонентом весь текст будет выделен CharCase позволяет вводить текст определенного регистра. это свойство может принимать следуюие значения:ecUpperCase — текст преобразуется в верхний регистр;ecLowerCase — текст пишется в нижнем регистре;ecNormal(по умолчанию)- размер символом не меняется. HideSelection Если False, то выделенный текст сохраняется выделенным при потере компонента фокуса вводаРассмотрим основные события(Events) для Edit’а:OnChange – наступает при изменении текста, OnKeyDown – наступает при нажатии любой клавиши пользователем. OnKeyPress – наступает при нажатии клавиши символа. OnKeyUp – наступает при отпускании какой-либо клавиши пользователем. Методы TEdit Clear Очищает поле вводаClearSelection Удаляет выделенный текст ClearUndo Очищает буфер метода Undo CopyToClipboard Копирует выделенный текст в буфер обмена CutToClipboard Вырезает выделенный текст в буфер обмена, послеPasteFromClipboard Вставляет текст содержащийся в буфера обмена в позицию курсора SelectAll Выделяет весь текстUndo Восстанавливает текст в той форме, в которой он был перед последним получением компонента фокуса


Поделиться:


Последнее изменение этой страницы: 2017-02-08; просмотров: 557; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.206.212 (0.012 с.)