TsWorksheetGrid/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: TsWorksheetGrid/ru
| Old | New | Line | |
|---|---|---|---|
| 1 | + | ------------------------------------------------------------------------ | |
| 2 | + | ||
| 3 | + | -- Zoltanleo 15:36, 21 September 2018 (CEST) Ввиду сложности дословного перевода текста с английского на русский слова, требующиеся по смыслу, но отсутствующие в английской версии, указаны в квадратных скобках. | |
| 4 | + | ||
| 5 | + | ------------------------------------------------------------------------ | |
| 6 | + | ||
| 7 | + | ## Обзор | |
| 8 | + | ||
| 9 | + | `TsWorksheetGrid` - это специализированный компонент сетки, который взаимодействует с `TsWorksheet` из библиотеки [[FPSpreadsheet/ru|FPSpreadsheet]] и отображает файлы данных электронных таблиц, как обычный [[Grids Reference Page/ru|TStringGrid]].\ | |
| 10 | + | ||
| 11 | + |  | |
| 12 | + | ||
| 13 | + | ## Интерфейс программирования | |
| 14 | + | ||
| 15 | + | `TsWorksheetGrid` наследуется от TCustomGrid и ведет себя как стандартный [[Grids Reference Page/ru|TStringGrid]]. Основное различие заключается в том, что сама сетка не хранит данные, но данные хранятся в `TWorksheet` из [[FPSpreadsheet/ru|FPSpreadsheet]]. Доступ к рабочему листу можно получить с помощью свойства `Worksheet` сетки. Аналогично, `Workbook` позволяет получить доступ ко всей рабочей книге, к которой принадлежит рабочий лист. | |
| 16 | + | ||
| 17 | + | Для доступа к ячейкам, их значениям и атрибутам доступно множество свойств, как и в случае StringGrid, например, запись значения ячейки с помощью `Grid.Cells[ACol, ARow] := 1.234`. Ячейки идентифицируются в этих свойствах с помощью индексов столбцов и строк ячейки. Обратите внимание, что индексы передаются в порядке "первый столбец/последняя строка" и включают индексы, занятые фиксированными ячейками, т.е. верхняя/левая ячейка данных имеет индексы col=1 и row=1. Это отличается от fpspreadsheat, где индексы всегда начинаются с 0 и передаются в функции в обратном порядке "первая строка/последний столбец". | |
| 18 | + | ||
| 19 | + | ### Доступ к значениям ячеек | |
| 20 | + | ||
| 21 | + | Свойство `Cells[ACol, ARow]` обеспечивает доступ к данным в ячейке, заданной его индексами столбцов и строк. Это похоже на `TStringGrid`. В отличие от `TStringGrid`, который работает только со строками, `TsWorksheetGrid`, принимает числа, даты, булевы типы и формулы. По этой причине тип данных `Cells` является `variant`. | |
| 22 | + | ||
| 23 | + | #### Запись значений ячеек | |
| 24 | + | ||
| 25 | + | Используйте этот код для записи данных в ячейку в `TsWorksheetGrid` с именем `Grid` для простоты: | |
| 26 | + | ||
| 27 | + | ``` pascal | |
| 28 | + | // Записываем строку | |
| 29 | + | Grid.Cells[1, 1] := 'Это - строка'; | |
| 30 | + | // Записываем строку со встроенными кодами HTML | |
| 31 | + | Grid.Cells[1, 2] := 'Химическая формула <b>воды</b>: H<sub>2</sub>O'; | |
| 32 | + | // Записываем число | |
| 33 | + | Grid.Cells[1, 3] := 1.2345; | |
| 34 | + | // Записываем дату | |
| 35 | + | Grid.Cells[1, 4] := EncodeDate(2016, 1, 18); | |
| 36 | + | // Записываем формулу | |
| 37 | + | Grid.Cells[1, 5] := '=A3+2'; | |
| 38 | + | // и т.д. | |
| 39 | + | ``` | |
| 40 | + | ||
| 41 | + | > **Note:** Текст, назначенный ячейке, может содержать встроенные простые HTML-коды для изменения шрифта для определенных слов или символов. | |
| 42 | + | ||
| 43 | + | #### Чтение значений ячеек | |
| 44 | + | ||
| 45 | + | Точно так же значения ячеек можно считывать в переменные выделенных типов: | |
| 46 | + | ||
| 47 | + | ``` pascal | |
| 48 | + | var | |
| 49 | + | str: String; | |
| 50 | + | x: Double; | |
| 51 | + | begin | |
| 52 | + | str := Grid.Cells[1, 1]; // Переменная "str" будет содержать значение "Это - строка", | |
| 53 | + | x := Grid.Cells[1, 2]; // x будет 1.2345 | |
| 54 | + | str := Grid.Cells[1, 2]; // Хотя ячейка содержит число, она преобразуется в строку "1.2345" | |
| 55 | + | end; | |
| 56 | + | ``` | |
| 57 | + | ||
| 58 | + | #### Сравнение значений ячеек | |
| 59 | + | ||
| 60 | + | Так как свойство Cells является \[типом\] вариант, сравнение строки со строкой немного сложнее. Используйте функцию преобразования строк в вариант `VarToStr()`, предоставляемую модулем `variant`. | |
| 61 | + | ||
| 62 | + | ``` pascal | |
| 63 | + | // Это простое сравнение не удастся: | |
| 64 | + | // if Grid.Cells[1,1] = 'Это - строка' then ... | |
| 65 | + | ||
| 66 | + | // Используйте вместо этого: | |
| 67 | + | if VarToStr(Grid.Cells[1,1]) = 'Это - строка' then ... | |
| 68 | + | ``` | |
| 69 | + | ||
| 70 | + | Численные значения часто можно сравнивать без явного преобразования: | |
| 71 | + | ||
| 72 | + | ``` pascal | |
| 73 | + | if Grid.Cells[1,2] = 1.2345 then ... | |
| 74 | + | ``` | |
| 75 | + | ||
| 76 | + | ### Формулы в ячейках | |
| 77 | + | ||
| 78 | + | Поскольку `TsWorksheetGreed` работает поверх электронной таблицы, могут быть вводиться все формулы, поддерживаемые [[FPSpreadsheet/ru|FPSpreadsheet]]. См. [[FPSpreadsheet: List of formulas|этот документ]] для полного списка поддерживаемых формул. | |
| 79 | + | ||
| 80 | + | Строка формулы должна начинаться с символа «=». Ссылки на ячейки должны следовать за символом "A1" в обозначении Excel, то есть индексом столбца должны быть символы «A» .. «Z», а индекс строки - целое число, начинающее \[нумерацию\] с 1. Если имеется более 26 столбцов, можно использовать два (или три) символа. | |
| 81 | + | ||
| 82 | + | В случае диапазона ячеек координаты верхних и нижних правых углов прямоугольника ячейки должны быть разделены цветом, напр., '=SUM(A1:C10)' вычисляет сумму значений в прямоугольнике ячейки, проходящих между A1 и C10. | |
| 83 | + | ||
| 84 | + | Формулы, относящиеся к ячейкам других листов, можно использовать, следуя синтаксису Excel: укажите имя листа, за которым следует символ "!" перед адресом ячейки, напр., '=Sheet3!A1' или '=SUM(Sheet3:Sheet4!A1:C10)'. | |
| 85 | + | ||
| 86 | + | Обратите внимание, что формулы по умолчанию автоматически не вычисляются. Чтобы активировать автоматический расчет формул, установите для свойства сетки `AutoCalc` значение true или установите опцию рабочей книги `boAutoCalc`, используемую сеткой. "Автоматический расчет" означает, что все формулы на всем листе пересчитываются всякий раз, когда изменяется содержимое любой ячейки. Поэтому не требуется, чтобы ячейки, адрессованные | |
| 87 | + | ||
| 88 | + | `формулой, имели значения при ее вводе.` | |
| 89 | + | ||
| 90 | + | ``` pascal | |
| 91 | + | // Включаем автоматический расчет формул | |
| 92 | + | Grid.AutoCalc := true; | |
| 93 | + | // or: Grid.Workbook.Options := Grid.Workbook.Options + [boAutoCalc]; | |
| 94 | + | ||
| 95 | + | // Вводим ячейки | |
| 96 | + | Grid.Cells[1,1] := 1; // это - ячейка A1 | |
| 97 | + | Grid.Cells[1,2] := 2; // это - ячейка A2 | |
| 98 | + | ||
| 99 | + | // Вводим формулу | |
| 100 | + | Grid.Cells[1,3] := '=A1+A2'; // Вычисляем сумму значений в A1 и A2 | |
| 101 | + | ||
| 102 | + | // Другая формула в ячейке B3 | |
| 103 | + | Grid.Cells[2,3] := '=B1*B2'; // Не имеет значения, что ячейки B1 и B2 еще не существуют. | |
| 104 | + | ||
| 105 | + | // Вводим ячейки, необходимые по формуле | |
| 106 | + | Grid.Cells[2,1] := '=A3'; // Используем результат предыдущей формулы | |
| 107 | + | Grid.Cells[2,2] := 10; | |
| 108 | + | ``` | |
| 109 | + | ||
| 110 | + | ### Форматирование ячеек | |
| 111 | + | ||
| 112 | + | Атрибуты ячеек могут быть прикреплены к каждой ячейке аналогично значениям ячейки. Существует набор свойств сетки, представляющих каждый атрибут: | |
| 113 | + | ||
| 114 | + | - `BackgroundColor[ACol, ARow: Integer]: TsColor` - задает цвет фона ячейки. `TsColor` - целое число, содержащее \[значение\] rgb-составляющей цвета. Модуль `fpsTypes` предоставляет список констант для большого количества предопределенных цветов; могут использоваться цвета, определенные стандартным модулем `Graphics` (за исключением значений цвета системы). | |
| 115 | + | - `CellBorder[ACol, ARow: Integer]: TsCellBorders` - указывает, какие края ячеек будут обозначены рамкой. Используйте установленные значения `[cbEast, cbWest, cbNorth, cbSouth]` для правого, левого, верхнего и нижнего краев соответственно. | |
| 116 | + | - `CellBorderStyle[ACol, ARow: Integer; ABorder: TsCellBorder]: TsCellBorderStyle` - указывает стиль, который будет использоваться для линии границы ячейки, указанной в параметре `ABorder`. `TsCellBorderStyle` - это запись, содержащая информацию о стиле линии и цвете линии. Обратите внимание, что набор `CellBorder[ACol, ARow]` должен содержать элемент `ABorder`, чтобы активировать эту границу. | |
| 117 | + | - `CellFont[ACol, ARow: Integer]: TFont` - описывает шрифт, используемый при прорисовке текста ячейки. Элементы шрифта могут быть изменены отдельно этими свойствами: | |
| 118 | + | - `CellFontColor[ACol, ARow: Integer]: TsColor` - определяет цвет текста. См. "BackgroundColor" выше для \[получения\] описания типа TsColor. | |
| 119 | + | - `CellFontName[ACol, ARow: Integer]: String` - это имя шрифта. | |
| 120 | + | - `CellFontSize[ACol, ARow: Integer]: Single` - это размер точки шрифта (1 pt = 1/72 дюйма). | |
| 121 | + | - `CellFontStyle[ACol, ARow: Integer]: TsFontStyles` - представляет собой набор, содержащий элементы для использования жирного шрифта, курсива, подчеркнутого или зачеркнутого шрифтов. | |
| 122 | + | - `HorAlignment[ACol, ARow: Integer]: TsHorAlignment` - позволяет изменять горизонтальное выравнивание текста ячейки (`haLeft`, `haCenter`, или `haRight`). | |
| 123 | + | - `NumberFormat[ACol, ARow: Integer]: String` - представляет собой строку формата номера, совместимую с Excel, например. `'0.000'` для отображения числового значения с 3 десятичными знаками. Формат чисел важен, если цифры должны отображаться как значения даты или времени. | |
| 124 | + | - `TextRotation[ACol, ARow: Integer]: TsTextRotation` - должен использоваться для поворота текста внутри ячейки. Тип `TsTextRotation` обеспечивает \[ориентацию\] `trHorizontal` \[(по горизонтали, по умолчанию)\], `rt90DegreeClockwiseRotation` \[(на 90° по часовой стрелке)\], `rt90DegreeCounterClockwiseRotation` \[(на 90° против часовой стрелки)\] и `rtStacked` \[(символов, располагающихся друг над другом, подобно японским иероглифам)\]. | |
| 125 | + | - `VertAlignment[ACol, ARow: Integer]: TsVertAlignment` - позволяет изменять горизонтальное выравнивание текста ячейки (`vaTop` \[(по верхнему краю)\], `vaCenter` \[(по центру)\] или `vaBottom` \[(по нижнему краю)\]). | |
| 126 | + | - `Wordwrap[ACol, ARow: Integer]: Boolean` - активирует автоперенос строки текста, длина которой больше ширины ячейки (или высота, если используется повернутый текст). | |
| 127 | + | ||
| 128 | + | Эти свойства также могут быть доступны для диапазона ячеек, указанных индексами левого столбца, верхней строки, правого столбца и нижней строки блока ячейки. Поскольку эти свойства связаны с несколькими ячейками, они пишутся во множественном числе (с окончанием "s"): | |
| 129 | + | ||
| 130 | + | - `BackgroundColors[ALeft, ATop, ARight, ABottom: Integer]: TsColor` | |
| 131 | + | - `CellBorders[ALeft, ATop, ARight, ABottom: Integer]: TsCellBorders` | |
| 132 | + | - `CellBorderStyles[ALeft, ATop, ARight, ABottom: Integer; ABorder: TsCellBorder]: TsCellBorderStyle` | |
| 133 | + | - `CellFonts[ALeft, ATop, ARight, ABottom: Integer]: TFont` | |
| 134 | + | - `CellFontColors[ALeft, ATop, ARight, ABottom: Integer]: TsColor` | |
| 135 | + | - `CellFontNames[ALeft, ATop, ARight, ABottom: Integer]: String` | |
| 136 | + | - `CellFontStyles[ALeft, ATop, ARight, ABottom: Integer]: TsFontStyles` | |
| 137 | + | - `CellFontSizes[ALeft, ATop, ARight, ABottom: Integer]: Single` | |
| 138 | + | - `HorAlignments[ALeft, ATop, ARight, ABottom: Integer]: TsHorAlignment` | |
| 139 | + | - `NumberFormats[ALeft, ATop, ARight, ABottom: Integer]: String` | |
| 140 | + | - `TextRotations[ALeft, ATop, ARight, ABottom: Integer]: TsTextRotation` | |
| 141 | + | - `VertAlignments[ALeft, ATop, ARight, ABottom: Integer]: TsVertAlignment` | |
| 142 | + | - `Wordwraps[ALeft, ATop, ARight, ABottom: Integer]: Boolean` | |
| 143 | + | ||
| 144 | + | Если свойства, подлежащие чтению, не имеют идентичных значений в блоке ячейки, возвращается нейтральное значение или значение по умолчанию. | |
| 145 | + | ||
| 146 | + | **Примеры** | |
| 147 | + | ||
| 148 | + | Этот пример добавляет формулу для сегодняшней даты в ячейку A1, форматирует ячейки для отображения числа в качестве даты и выбирает белый шрифт курсивом на светло-сером фоне. Вокруг ячейки пунктиром рисуется красная рамка. | |
| 149 | + | ||
| 150 | + | ``` pascal | |
| 151 | + | const | |
| 152 | + | RED_DOTTED_BORDER: TsBorderStyle = (LineStyle: lsDotted; Color: scRed); | |
| 153 | + | ||
| 154 | + | // Задаем содержимое ячейки | |
| 155 | + | Grid.Cells[1,1] := '=TODAY()'; | |
| 156 | + | ||
| 157 | + | // Форматируем [содержимое] как дату | |
| 158 | + | Grid.Numberformat[1,1] := 'yyyy/mm/dd'; | |
| 159 | + | ||
| 160 | + | // Выбираем цвет фона [сетки] | |
| 161 | + | Grid.BackgroundColor[1,1] := scSilver; | |
| 162 | + | ||
| 163 | + | // Выбираем [цвет и стиль] шрифта | |
| 164 | + | Grid.FontColor[1,1] := scWhite; | |
| 165 | + | Grid.FontStyle[1,1] := [fssItalic]; | |
| 166 | + | ||
| 167 | + | // Прорисовываем границы ячейки | |
| 168 | + | Grid.Border[1,1] := [cbEast, cbWest, cbNorth, cbSouth]; | |
| 169 | + | ||
| 170 | + | // Определяем, как будут нарисованы границы ячеек | |
| 171 | + | Grid.BorderStyle[1,1, cbEast] := RED_DOTTED_BORDER; | |
| 172 | + | Grid.BorderStyle[1,1, cbWest] := RED_DOTTED_BORDER; | |
| 173 | + | Grid.BorderStyle[1,1, cbNorth] := RED_DOTTED_BORDER; | |
| 174 | + | Grid.BorderStyle[1,1, cbSouth] := RED_DOTTED_BORDER; | |
| 175 | + | ``` | |
| 176 | + | ||
| 177 | + | \[Процесс\] определения границ ячеек для более крупного блока ячеек с помощью этих свойств \[вручную\] будет довольно громоздким, потому что могут использоваться различные стили для внутренних, внутренних и внутренних ячеек. Чтобы решить эту задачу проще, сетка предоставляет метод `ShowCellBorders`, который получает координаты блока ячейки и стили левой, верхней, правой, нижней внешней и горизонтальной и вертикальной внутренних линий границы. Используйте константу `NO_CELL_BORDER`, при которой граница не должна быть выделена в определенном месте: | |
| 178 | + | ||
| 179 | + | ``` pascal | |
| 180 | + | const | |
| 181 | + | THICK_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsThick; Color: clBlack); | |
| 182 | + | DOTTED_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsDotted; Color: clSilver); | |
| 183 | + | ||
| 184 | + | // Нарисуем толстую рамку вокруг блока A1:C3, без внутренней границы | |
| 185 | + | Grid.ShowCellBorders(1,1, 3,3, // левая, верхняя, правая, нижняя координаты блока ячеек | |
| 186 | + | THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, // стили внешней границы | |
| 187 | + | NO_CELL_BORDER, NO_CELL_BORDER // стили внутренней границы | |
| 188 | + | ); | |
| 189 | + | ||
| 190 | + | // Нарисуйте толстую рамку вокруг блока A1: C3, серые горизонтальные внутренние линии пунктиром | |
| 191 | + | Grid.SetCellBorders(1,1, 3,3, | |
| 192 | + | THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, | |
| 193 | + | DOTTED_CELL_BORDER, NO_CELL_BORDER | |
| 194 | + | ); | |
| 195 | + | ``` | |
| 196 | + | ||
| 197 | + | ### Комментарии ячейки | |
| 198 | + | ||
| 199 | + | Комментарии могут быть добавлены в каждую ячейку с использованием свойства сетки `CellComment[ACol, ARow: Integer]: String`. Ячейки, содержащие комментарий, отмечены красным треугольником в верхнем правом углу ячейки. Если мышь перемещается в ячейку с комментарием, появляется всплывающее окно для отображения комментария. | |
| 200 | + | ||
| 201 | + | > **Note:** Чтобы всплывающее окно появилось, необходимо добавить флаг `goCellHints` в свойство `Options` сетки, а стандартное свойство сетки `ShowHint` должно \[иметь значение\] true. В противном случае всплывающие окна не будут отображаться. | |
| 202 | + | ||
| 203 | + | **Пример:** | |
| 204 | + | ||
| 205 | + | ``` pascal | |
| 206 | + | Grid.Cells[1,1] := '=pi()'; | |
| 207 | + | Grid.CellComment[1,1] := 'Число pi необходимо для вычисления площади и окружности круга.'; | |
| 208 | + | ``` | |
| 209 | + | ||
| 210 | + | ### Гиперссылки в ячейках | |
| 211 | + | ||
| 212 | + | Ячейки с прикрепленными гиперссылками позволяют пользователю перемещаться по другим ячейкам или другим документам \[простым\] нажатием на ячейку. Доступ к гиперссылкам можно получить с помощью свойства `Hyperlink[ACol, ARow: Integer]: String`. Строка гиперссылки содержит цель гиперссылки и необязательный текст всплывающей подсказки, который разделяется символом штриха ("\|"). Внутренние цели уже обрабатываются сеткой, но для навигации у гиперссылки должен быть определен обработчик событий для `OnClickHyperlink`. Чтобы отличить нормальные клики по ячейкам от кликов по гиперссылкам, кнопка мыши должна удерживаться доли секунды до того, как будет \[выполнен переход по\] гиперссылке. | |
| 213 | + | ||
| 214 | + | **Пример:** | |
| 215 | + | ||
| 216 | + | ``` pascal | |
| 217 | + | // Пример добавления внешней гиперссылки | |
| 218 | + | Grid.Cells[1,1] := 'Lazarus'; | |
| 219 | + | Grid.Hyperlink[1,1] := 'www.lazarus-ide.org|Открыть веб-сайт Lazarus'; | |
| 220 | + | ||
| 221 | + | // Пример добавления внутренней гиперссылки | |
| 222 | + | Grid.Cells[2,2] := 'Итого'; | |
| 223 | + | Grid.Hyperlink[2,2] := '#Sheet2!B10|Перейдите к итогам, начиная с ячейки B10 листа 2'; | |
| 224 | + | ||
| 225 | + | // Пример для обработчика событий OnClickHyperlink, необходимого для внешних гиперссылок | |
| 226 | + | uses | |
| 227 | + | ..., uriparser; | |
| 228 | + | ||
| 229 | + | procedure TForm1.GridOnClickHyperlink(Sender: TObject; const AHyperlink: TsHyperlink); | |
| 230 | + | begin | |
| 231 | + | var | |
| 232 | + | uri: TUri; | |
| 233 | + | begin | |
| 234 | + | uri := ParseURI(AHyperlink.Target); | |
| 235 | + | case Lowercase(uri.Protocol) of | |
| 236 | + | 'http', 'https', 'ftp', 'mailto', 'file': | |
| 237 | + | OpenUrl(AHyperlink.Target); | |
| 238 | + | else | |
| 239 | + | ShowMessage('Гиперссылка ' + AHyperlink.Target + ' нажата'); | |
| 240 | + | end; | |
| 241 | + | end; | |
| 242 | + | ``` | |
| 243 | + | ||
| 244 | + | > **Note:** Следуйте инструкциям выше, чтобы отобразить текст всплывающей подсказки в виде всплывающего окна. | |
| 245 | + | ||
| 246 | + | ### Объединенные ячейки | |
| 247 | + | ||
| 248 | + | Прямоугольная группа ячеек может быть объединена в один блок. Содержимое верхней/левой ячейки этого блока отображается во всех объединенных ячейках, содержимое других ячеек игнорируется. | |
| 249 | + | ||
| 250 | + | Используйте метод `MergeCells` для выполнения этой операции. В качестве параметров требуется объединить левую, верхнюю, правую и нижнюю координаты диапазона ячеек. Они также могут быть объединены в запись `TRect`. Метод `Unmerge` снова разделяет ранее объединенный блок на отдельные ячейки, здесь достаточно координат одной ячейки из объединенного диапазона. | |
| 251 | + | ||
| 252 | + | ``` pascal | |
| 253 | + | // Пример слияния | |
| 254 | + | Grid.MergeCells(1,1, 3,1); // Объединяем первые 3 ячейки первой строки | |
| 255 | + | Grid.Cells[1,1] := 'Итого'; // Записываем текст "Итого" по 3 ячейкам | |
| 256 | + | Grid.HorAlignment[1,1] := haCenter; // и центрируем его | |
| 257 | + | ||
| 258 | + | // Пример разделения | |
| 259 | + | Grid.UnmergeCells(1,1); // Разделяем объединенный блок (1,1..3,1) | |
| 260 | + | ``` | |
| 261 | + | ||
| 262 | + | ### Ширина столбцов и высота строк | |
| 263 | + | ||
| 264 | + | Column widths and row heights can be changed for all cells by setting the `DefaultColWidth` and `DefaultRowHeight`. This works also in design mode. In addition, the widths and heights of particular columns and rows can be modified by the properties `ColWidths[ACol]` and `RowHeights[ARow]`. These values must be given in pixels. | |
| 265 | + | ||
| 266 | + | Ширину столбцов и высоту строк можно изменить для всех ячеек, определив \[свойства\] `DefaultColWidth` и `DefaultRowHeight`. Это работает также в режиме разработки. Кроме того, ширина и высота отдельных столбцов и строк могут быть изменены свойствами `ColWidths[ACol]` и `RowHeights[ARow]`. Эти значения должны указываться в пикселях. | |
| 267 | + | ||
| 268 | + | ``` pascal | |
| 269 | + | Grid.DefaultColWidth := 80; // Это ширина всех столбцов, | |
| 270 | + | Grid.ColWidths[10] := 10; // исключая столбец #10, ширина которого составляет всего 10 пикселей. | |
| 271 | + | ||
| 272 | + | Grid.DefaultRowHeight := 20; // Все строки имеют высоту 20 пикселей, | |
| 273 | + | Grid.RowHeights[2] := 4; // Строка #2 служит в качестве разделителя и имеет высоту всего 4 пиксела. | |
| 274 | + | ``` | |
| 275 | + | ||
| 276 | + | ### Новые свойства сетки | |
| 277 | + | ||
| 278 | + | В дополнение к свойствам, унаследованным от его предков `TCustomDrawGrid` и `TCustomGrid`, `TsWorksheetGrid` вводит следующие новые **published-свойства**: | |
| 279 | + | ||
| 280 | + | - **AllowDragAndDrop** (boolean): если эта опция активна, ячейки можно перетащить в новое место. Переместите курсор мыши на границу ячеек, которые нужно перетащить, пока курсор мыши не станет четырехсторонней стрелкой, а затем начинайте перетаскивание. Если перетаскиваемая ячейка ссылается на формулу, формула НЕ обновляется - это поведение отличается от Excel, но согласуется с Open/LibreOffice Calc. | |
| 281 | + | - **AutoCalc** (boolean): формулы в сетке автоматически пересчитываются при изменении содержимого ячейки. | |
| 282 | + | - **AutoExpand** (set of `aeData, aeNavigation, aeDefault`): | |
| 283 | + | - Если опция `aeData` содержится в наборе `AutoExpand`, тогда сетка автоматически расширяется, если ячейки записываются за пределами предопределенного диапазона. | |
| 284 | + | - Если `AutoExpand` содержит параметр `aeNavigation`, тогда пользователь может *перемещаться* за пределами предопределенного диапазона ячеек; новые строки и столбцы автоматически добавляются в сетку (но не к основному листу). Если файл загружен в сетку, то размеры сетки автоматически расширяются до диапазона, необходимого для рабочего листа. | |
| 285 | + | - Опция `aeDefault` вступает в игру, если сетка меньше значений по умолчанию DEFAULT_COL_COUNT и DEFAULT_ROW_COUNT. Если этот параметр включен, сетка автоматически расширяется до этого размера по умолчанию \[(с добавлением "недостающих" столбцов и строк)\]. С другой стороны, если в сетке должно содержаться только определенное количество строк и столбцов, опция `aeDefault` должна быть **удалена до** установки \[свойств\] `RowCount`/`ColCount`. | |
| 286 | + | - **EditorLineMode** определяет, поддерживает ли редактор ячейки сетки только одиночные строки (`elmSingleLine`) или несколько строк (`elmMultiLine`). В последнем случае вы можете нажать CTRL + ENTER, чтобы начать новую строку во время редактирования ячейки. | |
| 287 | + | - **FrozenBorderPen**: если сетка имеет замороженные панели (см. `FrozenCols` и `FrozenRows`), разделительная линия вытягивает край последней замороженной строки и столбца , Свойство `FrozenBorderPen` определяет способ рисования этой строки. Установите \[значение свойства\] `FrozenBorderPen.Style = psClear`, чтобы скрыть эти линии. | |
| 288 | + | - **FrozenCols** и **FrozenRows** (integer): определяет количество НЕ прокручиваемых столбцов(строк) слева(сверху) сетки. Технически это настраиваемые фиксированные столбцы (строки) предка. Обратите внимание, что пользователь не может перемещаться или редактировать ячейки в этом диапазоне. | |
| 289 | + | - **ReadFormulas** (boolean): считывает формулы из входных файлов. Так как fpspreadsheet не поддерживает все формулы, доступные в приложениях электронной таблицы Office, есть вероятность, что при чтении файла может произойти сбой из-за формул; в этом случае чтение формул может быть отключено. | |
| 290 | + | - **SelectionPen** (TPen): определяет, как окрашивается граница выбранной ячейки. По умолчанию выбранная ячейка выделена черной линией шириной 3 пикселя. | |
| 291 | + | - **ShowGridLines** (boolean): позволяет отключить линии сетки | |
| 292 | + | - **ShowHeaders** (boolean): может использоваться для отключения заголовков столбцов и строк ('A', 'B', 'C', ..., '1', '2', '3'). Свойство **DisplayFixedColRow** имеет тот же эффект, но теперь устарело. | |
| 293 | + | - **TextOverflow** (boolean): если это свойство включено, то длинному текстовому контенту разрешается распространяться на соседние ячейки, если они пусты. Обратите внимание, что ячейки числовых данных округлены так, что ячейка не переполняется. | |
| 294 | + | - **WorkbookSource** (TsWorkbookSource): ссылки на источник рабочей книги, которые предоставляют данные. Если \[ссылки\] пустые, сетка использует внутренний источник рабочей книги. | |
| 295 | + | ||
| 296 | + | **События** | |
| 297 | + | ||
| 298 | + | - **OnClickHyperlink**: это событие срабатывает всякий раз, когда пользователь нажимает на ячейку со встроенной гиперссылкой. Поскольку щелчок по ячейке обычно приведет к переключению ячейки в режим редактирования, необходимо удерживать клавишу мыши примерно на полсекунды, чтобы вызвать событие гиперссылки. | |
| 299 | + | ||
| 300 | + | ### Рекомендуемые значения свойств | |
| 301 | + | ||
| 302 | + | Чтобы настроить сетку для работы аналогично хорошо известным приложениям Office, мы рекомендуем следующие настройки свойств сетки. Следует, однако, подчеркнуть, что различия в использовании существуют и не могут быть удалены без серьезной перезаписи унаследованной инфраструктуры сетки: | |
| 303 | + | ||
| 304 | + | - `AutoAdvance = aaDown`: клавиша ENTER переводит \[фокус\] с выбранной ячейки в следующую нижнюю ячейку | |
| 305 | + | - `AutoCalc = true`: автоматическое вычисление формул | |
| 306 | + | - `AutoEdit = true`: для редактирования ячейки просто начинайте печатать. Кроме того, вы можете начать редактирование, нажав F2 | |
| 307 | + | - `AutoExpand = [aeData, aeNavigation, aeDefault]`: не ограничивайте использование сетки предопределенными размерами сетки для пользовательского интерфейса, подобного Excel | |
| 308 | + | - `EditorLineMode = elmMultiLine`: активируйте редактор ячейки, поддерживающий многострочность во время редактирования | |
| 309 | + | - `MouseWheelOption = mwGrid`: колесико мыши прокручивает сетку, а не выбранную ячейку | |
| 310 | + | - `Options`: добавьте эти флаги в стандартные параметры, унаследованные от TCustomGrid: | |
| 311 | + | - `goColSizing`: пользователь может изменить ширину столбца, перетащив вертикальную разделительную линию между двумя ячейками заголовка столбца | |
| 312 | + | - `goRowSizing`: пользователь может изменить высоту строки, перетащив горизонтальную разделительную линию между двумя ячейками заголовка строки | |
| 313 | + | - `goDblClickAutosize`: двойной щелчок на разделительной линии между двумя ячейками заголовка столбца или строки изменяет ширину столбца или высоту строки до оптимального значения | |
| 314 | + | - `goEditing`: помещает сетку в режим редактирования (так же, как \[и\] `AutoEdit`) | |
| 315 | + | - `goThumbTracking`: немедленная прокрутка сетки, когда полоса прокрутки перетаскивается мышью (если эта опция отключена, прокрутка происходит в тот момент, когда кнопка мыши отпускается) | |
| 316 | + | - `TextOverflow = true`: разрешить длинный поток текста ячейки в пустые соседние ячейки | |
| 317 | + | ||
| 318 | + | ## Смотри также | |
| 319 | + | ||
| 320 | + | - [[FPSpreadsheet tutorial: Writing a mini spreadsheet application]] | |
| 321 | + | - [[FPSpreadsheet|API documentation of FPSpreadsheet]] | |
| 322 | + | - [[RPN Formulas in FPSpreadsheet|RPN formulas in FPSpreadsheet]] | |
| 323 | + | - [[FPSpreadsheet: List of formulas/ru|FPSpreadsheet: List of formulas]] | |
| 324 | + | - [[Grids Reference Page/ru|Grids reference page]] | |
| 325 | + | ||
| 326 | + | --- | |
| 327 | + | *From the Free Pascal wiki, page "TsWorksheetGrid/ru", as it stood on 2020-03-02 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
