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