Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Класс TDrawGrid

Сетки строк

 

Компонент DrawGrid предназначен для создания таблицы, в ячейках которой расположены данные. Компонент обеспечива­ет двумерное представление данных, упорядоченных по стро­кам и столбцам.

Таблица делится на две части — фиксированную и рабочую. Фиксированная часть служит для показа заголовков столб­цов/строк и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и са­мый верхний ряд таблицы. Она может содержать произвольное количество столбцов и рядов, причем эти величины можно из­менять как в процессе разработки, так и программно. Рабочая часть состоит из ячеек, в которых находятся данные. Если ра­бочая часть не помещается целиком в пределах окна компонен­та, то у компонента автоматически появляются полосы про­крутки. При прокрутке рабочей области фиксированная часть не исчезает, но меняется ее содержимое — заголовки строк и рядов.

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

Свойства компонента DrawGrid

У компонента есть множество свойств, некоторые из них до­ступны уже в процессе разработки программы, остальные — только в ходе ее выполнения.

Рассмотрим основные свойства, доступные во время разра­ботки.

BorderStyle определяет наличие или отсутствие внешней рамки таблицы;

ColCount устанавливает количество столбцов таблицы, включая столбцы фиксированной части;

DefaultColWidth определяет ширину столбца по умолчанию;

Default Drawing при значении, равном True, происходит автоматическая прорисовка служебных элементов таблицы (фиксированной зоны, фона и прямоугольника сфокусированной ячейки и т. д.). Если свойство установлено в False, то прорисовки этих элементов необходимо определять в обработчике события OnDrawCell;

DefaultRowHeight содержит значение высоты строки по умолчанию;

FixedColor устанавливает цвет фиксированной зоны;

FixedCols определяет количество столбцов фиксированной зоны;

FixedRows определяет количество строк фиксированной зоны;

RowCount устанавливает количество строк таблицы.

Дополнительно к перечисленным свойствам необ­ходимо обратить особое внимание на свойство Options, определя­ющее некоторые особенности поведения компонента DrawGrid. Свойство Options определяется следующим образом:

type

TGridOption = (goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected, goRowSizing, goColSizing, goRowMoving, goColMoving, goEditing, goTabs, goRowSelect, goAlwaysShowEditor, goThumbTracking);

TGridOptions = set of TGridOption;

property Options: TGridOptions;

Каждое значение характеризует особенности поведения таб­лицы в процессе работы приложения:

goAlwaysShowEditor значение, равное True, позволяет редактировать сфокусированную (выделенную) ячейку. Редактирование возможно после выбора ячейки клавишей Tab (Tab+Shift). Подсвойство игнорируется, если goEditing установлено в False;

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

goColSizing контролирует изменение ширины

goDrawFocusSelected включение этого свойства приводит к выделению ячейки, в которой находится фокус. Если же свойство равно False, то ячейка, имеющая фокус, не выделяется никаким цветом;

goEditing значение True свойства позволяет редактировать содержимое ячейки (свойство игнорируется, если значение goRowSelect равно True). Редактирование начинается после щелчка на ячейке клавишей мыши или нажатия клавиши F2 и завершается при щелчке на другой ячейке или нажатии Enter;

goFixedHorzLine включение свойства заставляет прорисовывать горизонтальные полосы для разделения строк в фиксированной области;

goFixedVertLine установление значения в True заставляет отображать вертикальные полосы для разделения столбцов в фиксированной области;

goHorzLine при значении False будут отсутствовать горизонтальные линии в рабочей области;

goRangeSelect для того чтобы пользователь мог выбирать насколько ячеек одновременно, данное свойство следует установить в True (значение свойства будет игнорироваться, если свойство goEditing равно True);

goRowMoving свойство аналогично goColMoving, разрешает перемещение строки;

goRowSelect значение True этого свойства позволяет выделять все (а не отдельные) ячейки строки, в этом случае будет игнорироваться свойство goAlways ShowEditor;

goRowSizing включение свойства позволяет вручную (мышью) изменять высоту строк;

goTabs если свойство установлено в True, то можно выбирать ячейки клавишей Tab (Shift+Tab);

goThumbTracking ячейки таблицы будут обновляться в процессе использования полосы прокрутки. Если значение равно False, то обновление ячеек произойдет только после окончания прокрутки;

goVertLine при значении свойства, равном False, в рабочей области отсутствуют вертикальные линии.

Кроме перечисленных свойств, во время выполнения про­граммы становятся доступными еще некоторые свойства.

Свойство Col/Row определяет номер столбца/строки сфоку­сированной (выделенной) ячейки. Нумерация и строк и столб­цов начинается с нуля, включая строки и столбцы фиксирован­ной зоны.

Номер самого левого столбца, видимого в прокручиваемой зоне ячеек, содержится в LeftCol, а номер самого верхнего ряда — в свойстве TopRow.

Свойство EditorMode отвечает за возможность редактирования ячеек (свойство будет игнорироваться, если goAlwaysShowEditor равно True или goEditing равно False). Когда во время работы программы пользователь нажимает клавишу F2, EditorMode устанавливается в True автоматически. После того как пользо­ватель нажимает клавишу ввода, свойство принимает значение False.

Свойство Selection позволяет определить координаты текущего выделения. Описывается свойство следующим образом:

 

type

TGridCoord = record X: Longint; Y: Longint;

end;

TGridRect = record case Integer of

0: (Left, Top, Right, Bottom: Longint);

1: (TopLeft, BottomRight: TGridCoord);

end;

property Selection: TGridRect;

 

Свойство Selection определяет группу выделенных ячеек в координатах левая верхняя и правая нижняя ячейки. После выделения сфокусированной окажется правая нижняя ячейка.

Методы компонента DrawGrid

Экранные координаты прямоугольника ячейки можно полу­чить по номерам столбца ACol и ряда ARow с помощью метода CellRect:

function CellRect(ACol, ARow: Longint): TRect; где тип TRect — это

type

TRect = record case Integer of

0: (Left, Top, Right, Bottom: Integer);

1: (TopLeft, BottomRight: TPoirtt);

end;

TPoint = record-X: Longint; Y: Longint;

end;

Получить номер столбца ACol и номер строки ARow по эк­ранным координатам (X.Y) точки можно с помощью метода MouseToCell:

procedure MouseToCell(X, Y: Integer; var ACol, ARow: Longint);

Например, если необходимо определить, по какой ячейке был произведен щелчок мышью, то можно воспользоваться об­работчиком события OnMouseDown:

procedure TForral.DrawGridlMouseDown{Sender: TObject; Button:

TMouseButton; Shift: TShiftState; X, Y: Integer);

var ACol, Arow: Integer;

{переменные для хранения номера столбца/строки}

begin

DrawGridl.MouseToCell (х, у, Acol, Arow);

{используя параметры события OnMouseDown, определяем номера строки и столбца} end;

События компонента DrawGrid

Событие OnColumnMoved возникает при перемещении столб­ца. Оно происходит только тогда, когда подсвойство goColMoving равно True. Заголовок обработчика этого события имеет вид:

procedure TForml.DrawGridlColumnMoved(Sender: TObject; Fromlndex, Tolndex: Integer);

Параметр Fromlndex содержит «старый» индекс столбца, а Tolndex — «новый» индекс перемещаемого столбца.

Событие OnRowMoved возникает при перемещении строки. Оно происходит только тогда, когда goRowMoving включено в свойство Options. Заголовок обработчика этого события имеет вид:

procedure TForml.StringGridlRowMoved(Sender: TObject; Fromlndex, Tolndex: Integer);

Событие OnTopLeftChanged происходит при изменении зна­чения TopRow или LeftCol в результате прокрутки рабочей зоны:

procedure TForml.DrawGridlTopLeftChanged(Sender: TObject);

Событие OnSelectCell возникает при попытке выделить ячей­ку с табличными координатами (ACol, ARow). В параметре CanSelect обработчик сообщает о возможности выделения ячей­ки. Установите его значение равным False, чтобы пользователь не мог выделять ячейку. Событие описывается следующим об­разом:

procedure TForml.DrawGridlSelectCell (Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);

Событие OnSetEditText возникает по завершении редакти­рования ячейки с координатами (ACol, ARow). В параметре Va­lue обработчик получает результат ввода или редактирования текста. Событие произойдет только в том случае, когда свойст­во Options содержит значение goEditing. Описывается событие так:

procedure TForml.DrawGridlSetEditText (Sender: TObject; ACol, ARow: Integer; const Value: String);

 

 

 

События OnGetMaskEdit и OnGetEditText возникают при ре­дактировании текста в ячейке с табличными координатами (ACol, ARow). В параметре Value первого события обработчик должен вернуть шаблон для редактора TEditMask. Параметр Value для события OnGetEditText должен содержать текстовую информацию для редактора TEditMask. Описание событий вы­глядит следующим образом:

procedure TForml.DrawGridlGetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String);

procedure TForml.DrawGridlGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);

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

procedure TForml.DrawGridlDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

Событие происходит в случае необходимости перерисовки ячей­ки с номером столбца ACol и номером строки ARow. Параметр Rect определяет прямоугольник прорисовки, a State — состояние ячейки (gdSelected — ячейка выделена, gdFocused — ячейка сфо­кусирована, gdFixed — ячейка принадлежит фиксированной зоне таблицы). Для прорисовки используется свойство Canvas.

Упражнение 6.1.1. Создайте приложение, которое позволяет просматривать символы системных шрифтов.

Решение

Создайте новый проект. Сохраните новое приложение в пап­ке Fonts, файл модуля — под именем Main.pas, файл проек­та — fonts, dpr.

1-й этап. Визуальное проектирование

Положите на форму компонент TPanel:

Измените значения свойств формы следующим образом:

Разместите на компоненте Panel 1 компонент ComboBox (рис. 6.1.1.). Пусть имя этого компонента будет FontListCB. Далее расположите на форме компонент DrawGrid:

 

Name FontDG
Align alClient
RowCount  
ColCount  
FixedCols  
FixedRows  
DafaultColWidth  
DefaultRowHeight  

Измените размеры формы так, чтобы сетка не имела полос прокрутки, а вокруг ячеек не было пустого пространства.

2-й этап. Разработка программного кода

Для того чтобы содержимое каждой ячейки перерисовыва­лось, создадим обработчик события OnDrawCell для компонен­та FontDG. Для изображения символов шрифта воспользуемся свойством Canvas компонента FontDG. Непосредственно нам понадобится метод TextRect свойства Canvas. Этот метод исполь­зуется для вывода текстовой информации в определенной ячей­ке. Обработчик события будет выглядеть так:

procedure TFonts.FontDGDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

begin

with FontDG.Canvas do TextRect (Rect, Rect.Left, Rect.Top,

Char({ARow+1)*32+ACol));

{параметры ячейки для вывода символов шрифта берутся из параметров обработчика события, а символ шрифта для отображения в ячейке определяется в зависимости от строки и столбца} end;

Эксперимент. Сохраните проект. Убедитесь, что в ячейках таблицы отображаются символы системного шрифта, установ­ленного по умолчанию. ♦

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

Названия всех экранных шрифтов можно узнать с помощью глобальной переменной Screen типа TScreen. Данная перемен­ная автоматически добавляется во все приложения Delphi. Пе­ременная Screen содержит информацию о текущем состоянии экрана приложения: названия форм и модулей данных, кото­рые используются приложением; данные об активной форме и компонентах, используемых этой формой; размер и разрешение используемого экрана; информацию о доступных приложению курсорах и шрифтах.

Информация о доступных приложению шрифтах содержит­ся в свойстве Font, принадлежащем переменной Screen.

Создадим следующий обработчик:

procedure TFonts.FormCreate(Sender: TObject);

begin

with FontListCB do

begin

Items: = Screen.Fonts;

{в свойстве Fonts переменной Screen содержатся названия всех экранных шрифтов}

Itemlndex: =Items.IndexOf{Font.Name);

{свойства IndexOf содержит номер строки в списке FontListCB, которая выбрана, и, соответственно, содержит имя текущего шрифта}

end;

end;

Эксперимент. Сохраните и запустите проект. Компонент FontDG содержит символы шрифта, установленного в FontListCB. Сколько шрифтов установлено на компьютере? Что происходит при выборе другого шрифта?

Для того чтобы связать значение имени шрифта у FontDG и FontListCB, создадим еще один обработчик события:

procedure TFonts.FontListCBClick (Sender: TObject);

begin

FontDG.Font.Name: = FontListCB.Text;

end;

Эксперимент. Сохраните и запустите проект. Что происходит при изменении шрифта? ♦

 

<== предыдущая лекция | следующая лекция ==>
Хозяйство | Промышленность




© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.