Sign in Join
Wiki copytemporary

TsWorksheetGrid/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TsWorksheetGrid/ru

OldNewLine
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+![](/wiki-images/b/b7/Fpsgrid.png)
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).*

Back to history