Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР Методы программирования Build1.0.pdf
Скачиваний:
98
Добавлен:
10.06.2015
Размер:
1.89 Mб
Скачать

85

Приложение Б. Компонент-сетка TStringGrid

Компонент TStringGrid (сетка строк) способен хранить текстовые данные. Он, по сути, является двумерным динамическим массивом типа String, а ячейка сетки – визуальное представление элемента массива.

Рисунок. Внешний вид сетки TStringGrid

Общее количество столбцов и строк соответственно задаётся в свойствах:

property

ColCount:

Longint;

//число

колонок

property

RowCount:

Longint;

//число

строк

Часть столбцов и строк сетки возможно сделать фиксированными. Фиксированный ряд (столбец) на экране компьютера отображается другим цветом. Ячейки такого рода не доступны для редактирования пользователем, не перемещаются с помощью полос прокрутки и обычно используются для размещения заголовков и комментариев.

property

FixedCols:

Integer;

//число

фиксированных

колонок

property

FixedRows:

Integer;

//число

фиксированных

строк

Для того, чтобы отказаться от фиксированных колонок или строк присвойте соответствующему свойству значение 0. Ещё одной особенностью фиксированного ряда (колонки) является то, что они могут располагаться только на первых позициях сетки. Другими словами, если в нашей сетке объявлен один фиксированный ряд, то его индекс aRow всегда равен нулю.

Для выделения фиксированных ячеек цветом используёте свойство:

property FixedColor: TColor;

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

property

DefaultColWidth: Integer;

//ширина

колонки по умолчанию

property

DefaultRowHeight: Integer;

//высота

строки по умолчанию

Присвоение перечисленным свойствам каких-то значений “причёсывает” все ячейки сетки под одну гребёнку – они получат одинаковые размеры высоты и ширины.

Сетка способна хранить текстовые данные. Такая возможность приобретена благодаря появлению нового свойства:

property Cells[ACol, ARow: Integer]: string;

Доступ к ячейке сетки осуществляется как к элементу двумерного массива, например:

StringGrid1.Cells[5,5]:=’Привет’;

Ещё один способ доступа к столбцу / строке реализован при посредничестве свойств:

property Cols[Index: Integer]: TStrings; //элементы колонки Index property Rows[Index: Integer]: TStrings; //элементы ряда Index

86

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

property Objects [ACol, ARow: Integer]: TObject;

Широкий спектр услуг по настройке сетки обеспечивает свойство:

property Options: TGridOptions; TGridOptions = set of TGridOption;

Таблица – Опции сетки TGridOption.

Значение

Результат

goFixedVertLine

Ячейки фиксированной области разделены вертикальными линиями.

goFixedHorzLine

Ячейки фиксированной области разделены горизонтальными линиями.

goVertLine

Колонки разделяются линиями.

goHorzLine

Строки разделяются линиями.

goRangeSelect

Одновременно может быть выделено несколько ячеек (опция не рабо-

 

тает при включённой опции goEditing).

goDrawFocusSelected

Сфокусированная ячейка выделяется цветом.

goRowSizing

Разрешение на установку индивидуальных размеров для строки, ко-

goColSizing

лонки.

goRowMoving

Разрешение на перемещение строк и колонок мышью.

goColMoving

 

goEditing

Разрешает пользователю редактировать текст ячеек.

goTabs

При включении переход между столбцами осуществляется при помощи

 

клавиши Tab и Shift+Tab.

goRowSelect

Запрещает выделение отдельной ячейки. Вместо этого выделяется

 

весь ряд. При использовании этой опции отключается

 

goAlwaysShowEditor.

goAlwaysShowEditor

Имеет значение при включенной опции goEditing. Если опция вклю-

 

чена, то выбрав ячейку пользователь сразу оказывается в режиме

 

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

 

нажатие клавиш Enter или F2.

goThumbTracking

Определяет порядок прорисовки содержимого ячеек при перемещении

 

бегунка полосы прокрутки сетки. Если опция отключена, то прори-

 

совка начинается после отпускания кнопки мыши, в противном слу-

 

чае прорисовка осуществляется при малейшем перемещении бегунка,

 

а это требует дополнительного расхода ресурса.

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

property Col: Longint; property Row: Longint;

К наиболее важному событию сетки относится событие вызываемое при смене выделенной ячейки:

property OnSelectCell: TSelectCellEvent;

type TSelectCellEvent = procedure (Sender: TObject; ACol, ARow: Longint; var CanSelect: Boolean) of object;

Оно возникает в момент выбора пользователем ячейки сетки с помощью указателя мышки или клавиш управления курсором. Параметры ACol и ARow укажут координаты выбираемой ячейки. Благодаря переменной CanSelect программист в состоянии запретить (CanSelect:=false) или разрешить (true) выбор этой ячейки.

87

Приложение В. Компонент-диаграмма TChart

С точки зрения объектно-ориентированного программирования диаграмма представляет собой весьма сложную конструкцию. В своём составе TChart (TDBChart) инкапсулирует впечатляющий перечень взаимодействующих между собой, даже можно сказать поддерживающих друг друга в трудную минуту объектов. Управление большинством из них организовано, как из инспектора объектов, так и из специализированного редактора, вызываемого из контекстного меню компонента. К ключевым интегрированным объектам относятся экземпляры классов:

-TChartSeriesList

– контейнер для хранения отдельных графиков;

-TChartAxis, TChartDepthAxis

координатные оси диаграммы;

-TChartLegend – ле-

генда (подписи графиков) диаграммы;

-TChartTitle – за-

головок диаграммы.

Организация хранения графиков в диаграмме

Смысл существования компонента TChart состоит в умении хранить и выводить на экран разнообразные графики (потомки класса TChartSeries). Для “складирования” графиков в TChart предусмотрен специализированный контейнер. Если же контейнер пуст, то диаграмма представляет собой унылое зрелище и безответственно занимает драгоценное пространство на рабочей форме.

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

ненту TChart.

Точки графика, класс TChartValueList

Рисунок. Ключевые элементы диаграммы

Рисунок. Внешний вид редактора компонента

График TChartSeries это сердце диаграммы. Визуально он может быть представлен в виде обычной линии, заштрихованной области, пирамиды, цилиндра, или чего-нибудь ещё в этом духе. Линия графика строится по его точкам. Для хранения точек в рамках класса создано специальное хранилище – список точек:

property ValueList[Index : Longint] : TChartValueList;

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

property XValues : TChartValueList; //значения по оси X

88

property YValues : TChartValueList; //значения по оси Y

Они обеспечивают раздельный доступ к коллекции значений по осям X и Y графика соответственно. Например, чтобы добраться до интересующей нас точки, с целью редактирования её содержимого, воспользуйтесь свойством:

property Value[Index : Longint] : Double;

LineSeries1.YValues.Value[5] := 25 ;

LineSeries1.Repaint;

Ещё более удобный способ, позволяющий адресовать точку графика без явного обращения к хранилищу TChartValueList, реализован тройкой свойств:

property XValue[Index : Longint] : Double; //значение по оси X property YValue[Index : Longint] : Double; //значение по оси Y property XLabel[Index : Longint] : String; //пояснительная подпись

Здесь Index – порядковый номер точки.

Методы вставки новой точки

В классе TChartSeries реализовано несколько методов вставки в график новой точки. Добавление новой точки в конец набора обеспечивают методы:

function Add(Const AValue :Double; Const ALabel : String; AColor : TColor):Longint;

function AddY(Const AYValue : Double; Const AXLabel: String; AColor: TColor): Longint;

Здесь AValue – значение точки по координате Y, ALabel – необязательный пояснительный текст метки и AColor – цвет точки. Функции возвратят индекс точки в наборе.

with Series1 do begin

Add( 40, 'Точка 1', clRed ) ; Add( 60, 'Точка 2', clBlue ) ; Add( 30, 'Точка 3', clGreen ) ;

end;

Если необходимо внести новую точку, но описываемую не одной, как в случае Add() и AddY(), а двумя координатами X и Y, то используйте метод:

function AddXY(Const AXValue, AYValue: Double; Const AXLabel: String; AColor: TColor) : Longint;

В этом методе появился дополнительный параметр AXValue – значение по оси X.

Для вставки в график разрыва (пустой точки) используйте метод:

function AddNull(Const ALabel : String) : Longint;

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

procedure FillSampleValues(NumValues : Longint);

В параметр передаётся количество генерируемых точек.

Удаление точек, очистка графика

Для удаления точки с индексом ValueIndex из набора вызовите процедуру:

procedure Delete(ValueIndex : Longint);

Для полной очистки содержимого графика используёте метод:

procedure Clear;

89

Приложение Г. Многострочный текстовый редактор – компонент TMemo

Создаваемые на базе класса TMemo элементы управления применяются для ввода и редактирования многострочного неформатированного текста.

Многострочный редактор представляет собой симбиоз оконного элемента управления и класса TStrings инкапсулированного в качестве свойства:

property Lines: TStrings;

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

Таблица. Основные методы коллек-

ции строк TStrings

Рисунок – Внешний вид компонента TMemo

Метод

 

Описание

procedure SaveToFile(const FileName: string);

Сохранение строк текста в файл.

procedure LoadFromFile(const FileName: string);

Загрузка текста из файла.

Function Add(const S: string): Integer;

 

Добавляет в конец набора строку

 

 

S и возвращает её порядковый

procedure AddStrings(Strings: TStrings);

 

номер.

 

Добавляет в конец набора другой

Procedure Append(const S: string);

 

набор Strings.

 

Аналогичен методу Add() за ис-

 

 

ключением того, что не возвра-

Procedure Clear;

 

щает номер добавленной строки.

 

Очищает набор от всех строк.

procedure Delete(Index: Integer);

 

Удаляет из набора строку с по-

 

 

рядковым номером Index.

procedure Insert(Index: Integer; const S: string);

Вставляет в набор строку string

 

 

в место, определенное перемен-

 

 

ной Index.

Взяв на вооружение представленные в таблице методы, текстовый компонент TMemo может стать превосходной основой для создания простейших приложений типа стандартного блокнота Windows. Следующие строки кода демонстрирую порядок загрузки в редактор данных из файла:

procedure TForm1.FormCreate(Sender: TObject); begin

Memo1.Lines.Clear;

Memo1.Lines.LoadFromFile('C:\textfile.txt'); Memo1.Lines.Add('Файл загружен '+DateTimeToStr(Now)); Memo1.ReadOnly:=True;

end;

Полезное свойство по определению позиции каретки внутри редактируемого текста возвращает номер строки и порядковый номер символа в строке:

property CaretPos: TPoint; //только для чтения

90

Оставлять или нет при потере элементом управления фокуса ввода подсветку выделенного в элементе управления текста решает свойство:

property HideSelection: Boolean;

Значение True – голосует за то, чтобы скрывать выделение, а False – как всегда против. Выделенный в элементе управления текст вы обнаружите в свойстве:

property SelText: string;

Свойство доступно не только для чтения, но и для записи.

При желании выделение текста производится не только мышкой или клавишами клавиатуры, но и программным способом. Для этого объявлены два свойства:

property SelStart: Integer; property SelLength: Integer;

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

Для выделения всего текста воспользуйтесь методом:

procedure SelectAll;

Для удаления выделенного текста пригодится процедура:

procedure ClearSelection;

Утверждая, что строки внутри окна ввода не поддаются форматированию, мы несколько принизили достоинства класса TMemo, но совсем чуть-чуть. Не учитывая возможности по настройке шрифта компонента, можно обнаружить ещё одно свойство, позволяющее выравнивать строки внутри окна влево, вправо или по центру:

property Alignment: TAlignment;

type TAlignment = (taLeftJustify, taRightJustify, taCenter);

В случае, если все строки не помещаются в видимой части окна включите линии прокрутки:

property ScrollBars: TScrollStyle;

type TScrollStyle = (ssNone, ssHorizontal, ssVertical, ssBoth);

Настройка поведения элемента управления в зависимости от длины строки производится свойством:

property WordWrap: Boolean;

Если свойство установлено в true и длина строки превышает горизонтальный размер видимой части окна, то осуществляется мягкий перенос непомещающихся символов на новую строку.

Реакция на нажатие клавиш ввода и табуляции определяется свойствами:

property WantReturns : Boolean; property WantTabs : Boolean;

Установленное в True свойство WantReturns разрешает ввод символа перевода строки. Переведя в True свойство WantTabs мы дадим разрешение на ввод символа табуляции в текстовые данные.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]