Difference between revisions of "TsWorksheetGrid/ru"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "== Overview == <tt>TsWorksheetGrid</tt> is a specialized grid component which interfaces to a <code>TsWorksheet</code> from the FPSpreadsheet library and displays spreadsh...")
 
m (Fixed syntax highlighting)
 
(30 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Overview ==
+
{{TsWorksheetGrid}}
<tt>TsWorksheetGrid</tt> is a specialized grid component which interfaces to a <code>TsWorksheet</code> from the [[FPSpreadsheet]] library and displays spreadsheet data files like in a conventional [[Grids_Reference_Page|<tt>TStringGrid</tt>]].  
+
----
 +
-- [[User:Zoltanleo|Zoltanleo]] 15:36, 21 September 2018 (CEST) Ввиду сложности дословного перевода текста с английского на русский слова, требующиеся по смыслу, но отсутствующие в английской версии, указаны в квадратных скобках.
 +
----
 +
 
 +
 
 +
== Обзор ==
 +
<tt>TsWorksheetGrid</tt> - это специализированный компонент сетки, который взаимодействует с <code>TsWorksheet</code> из библиотеки [[FPSpreadsheet/ru|FPSpreadsheet]] и отображает файлы данных электронных таблиц, как обычный [[Grids_Reference_Page/ru|<tt>TStringGrid</tt>]].<br /><br />
  
 
[[image:fpsgrid.png]]
 
[[image:fpsgrid.png]]
  
== Programming interface ==
+
== Интерфейс программирования ==
<tt>TsWorksheetGrid</tt> inherits from TCustomGrid and behaves much like a standard [[Grids_Reference_Page|<tt>TStringGrid</tt>]]. The main difference is that the grid itself does not store data, but data are stored in a <tt>TWorksheet</tt> of [[FPSpreadsheet]]. The worksheet can be accessed by using the property <tt>Worksheet</tt> of the grid. Similarly, <tt>Workbook</tt> allows to access the entire workbook to which the worksheet belongs.
+
<tt>TsWorksheetGrid</tt> наследуется от TCustomGrid и ведет себя как стандартный [[Grids_Reference_Page/ru|<tt>TStringGrid</tt>]]. Основное различие заключается в том, что сама сетка не хранит данные, но данные хранятся в <tt>TWorksheet</tt> из [[FPSpreadsheet/ru|FPSpreadsheet]]. Доступ к рабочему листу можно получить с помощью свойства <tt>Worksheet</tt> сетки. Аналогично, <tt>Workbook</tt> позволяет получить доступ ко всей рабочей книге, к которой принадлежит рабочий лист.
  
A variety of properties are available to access cells, their values and attributes, in a StringGrid-like way, such as writing a cell value by means of <tt>Grid.Cells[ACol, ARow] := 1.234</tt>. The cells are identified in these properties by means of the cell's column and row indexes. Please note that the indexes are passed in the order "column first / row last", and they include the indexes occupied by the fixed cells, i.e. the top/left data cell has the indexes col=1 and row=1. This is different from fpspreadsheat where the indexes always start at 0 and are passed to functions in the opposite order "row first / column last".
+
Для доступа к ячейкам, их значениям и атрибутам доступно множество свойств, как и в случае StringGrid, например, запись значения ячейки с помощью <tt>Grid.Cells[ACol, ARow] := 1.234</tt>. Ячейки идентифицируются в этих свойствах с помощью индексов столбцов и строк ячейки. Обратите внимание, что индексы передаются в порядке "первый столбец/последняя строка" и включают индексы, занятые фиксированными ячейками, т.е. верхняя/левая ячейка данных имеет индексы col=1 и row=1. Это отличается от fpspreadsheat, где индексы всегда начинаются с 0 и передаются в функции в обратном порядке "первая строка/последний столбец".
  
=== Access to cell values ===
+
=== Доступ к значениям ячеек ===
The property <tt>Cells[ACol, ARow]</tt> provides access to the data in a cell given by its column and row indexes. This is similar to <tt>TStringGrid</tt>. Unlike <tt>TStringGrid</tt> which works with strings only, <tt>TsWorksheetGrid</tt>, however, accepts numbers, dates, booleans, and formulas as well. For this reason, the data type of <tt>Cells</tt> is a <tt>variant</tt>.
+
Свойство <tt>Cells[ACol, ARow]</tt> обеспечивает доступ к данным в ячейке, заданной его индексами столбцов и строк. Это похоже на <tt>TStringGrid</tt>. В отличие от <tt>TStringGrid</tt>, который работает только со строками, <tt> TsWorksheetGrid</tt>, принимает числа, даты, булевы типы и формулы. По этой причине тип данных <tt>Cells</tt> является <tt>variant</tt>.
  
==== Writing of cell values ====
+
==== Запись значений ячеек ====
Use this code to write data to a cell in a <tt>TsWorksheetGrid</tt> named <tt>Grid</tt> for simplicity:
+
Используйте этот код для записи данных в ячейку в <tt>TsWorksheetGrid</tt> с именем <tt>Grid</tt> для простоты:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
   // Write a string
+
   // Записываем строку
   Grid.Cells[1, 1] := 'This is a string';   
+
   Grid.Cells[1, 1] := 'Это - строка';   
   // Write a string with embedded HTML codes
+
   // Записываем строку со встроенными кодами HTML
   Grid.Cells[1, 2] := 'Chemical formula of <b>water</b>: H<sub>2</sub>O';
+
   Grid.Cells[1, 2] := 'Химическая формула <b>воды</b>: H<sub>2</sub>O';
   // Write a number
+
   // Записываем число
 
   Grid.Cells[1, 3] := 1.2345;
 
   Grid.Cells[1, 3] := 1.2345;
   // Write a date
+
   // Записываем дату
 
   Grid.Cells[1, 4] := EncodeDate(2016, 1, 18);
 
   Grid.Cells[1, 4] := EncodeDate(2016, 1, 18);
   // Write a formula
+
   // Записываем формулу
 
   Grid.Cells[1, 5] := '=A3+2';
 
   Grid.Cells[1, 5] := '=A3+2';
   // etc.
+
   // и т.д.
 
</syntaxhighlight>
 
</syntaxhighlight>
  
{{Note|A text assigned to a cell can contain embedded simple HTML codes to change the font for particular words or characters.}}
+
{{Note|Текст, назначенный ячейке, может содержать встроенные простые HTML-коды для изменения шрифта для определенных слов или символов.}}
  
==== Reading of cell values ====
+
==== Чтение значений ячеек ====
In the same way, cell values can be read into variables of decidated types:
+
Точно так же значения ячеек можно считывать в переменные выделенных типов:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
var
 
var
 
   str: String;
 
   str: String;
 
   x: Double;
 
   x: Double;
 
begin
 
begin
   str := Grid.Cells[1, 1];  // Variable "str" will contain the value "This is a string"
+
   str := Grid.Cells[1, 1];  // Переменная "str" будет содержать значение "Это  - строка",
   x := Grid.Cells[1, 2];    // x will be 1.2345
+
   x := Grid.Cells[1, 2];    // x будет 1.2345
   str := Grid.Cells[1, 2];  // Although the cell contains a number it is converted to the string "1.2345"
+
   str := Grid.Cells[1, 2];  // Хотя ячейка содержит число, она преобразуется в строку "1.2345"
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==== Comparing cell values ====
+
==== Сравнение значений ячеек ====
Since the Cells property is a variant it is a bit more difficult to compare string values. Use the string-to-variant conversion function <tt>VarToStr()</tt> provided by unit <tt>variants</tt>.
+
Так как свойство Cells является [типом] вариант, сравнение строки со строкой немного сложнее. Используйте функцию преобразования строк в вариант <tt>VarToStr()</tt>, предоставляемую модулем <tt>variant</tt>.
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
   // This straightforward comparison will fail:
+
   // Это простое сравнение не удастся:
   // if Grid.Cells[1,1] = 'This is a string' then ...
+
   // if Grid.Cells[1,1] = 'Это - строка' then ...
  
   // Use this instead:
+
   // Используйте вместо этого:
   if VarToStr(Grid.Cells[1,1]) = 'This is a string' then ...
+
   if VarToStr(Grid.Cells[1,1]) = 'Это - строка' then ...
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Numerical values often can be compared without an explicit conversion:
+
Численные значения часто можно сравнивать без явного преобразования:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   if Grid.Cells[1,2] = 1.2345 then ...
 
   if Grid.Cells[1,2] = 1.2345 then ...
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Formulas in cells ===
+
=== Формулы в ячейках ===
Since the <tt>TsWorksheetGreed</tt> works on top of a spreadsheet all formulas supported by [[FPSpreadsheet]] can be entered. See [[FPSpreadsheet:_List_of_formulas|this document]] for a complete list of supported formulas.
+
Поскольку <tt>TsWorksheetGreed</tt> работает поверх электронной таблицы, могут быть вводиться все формулы, поддерживаемые [[FPSpreadsheet/ru|FPSpreadsheet]]. См. [[FPSpreadsheet:_List_of_formulas|этот документ]] для полного списка поддерживаемых формул.
  
The formula string must begin with the character "=". Cell references must follow Excel's "A1" notation, i.e. column index must be characters "A".."Z" , and row index is a 1-based integer. If there are more than 26 columns then two (or three) characters can be used.  
+
Строка формулы должна начинаться с символа «=». Ссылки на ячейки должны следовать за символом "A1" в обозначении Excel, то есть индексом столбца должны быть символы «A» .. «Z», а индекс строки - целое число, начинающее [нумерацию] с 1. Если имеется более 26 столбцов, можно использовать два (или три) символа.
  
In case of a cell range, the coordinates of the top-left and bottom-right corners of the cell rectangle must be separated by a color, e.g. '=SUM(A1:C10)' calculates the sum of the values in the cell rectangle extending between A1 and C10.
+
В случае диапазона ячеек координаты верхних и нижних правых углов прямоугольника ячейки должны быть разделены цветом, напр., '=SUM(A1:C10)' вычисляет сумму значений в прямоугольнике ячейки, проходящих между A1 и C10.
  
Formulas referring to cells in other sheets can be used by following the Excel syntax: specify the sheet name followed by a "!" in front of the cell addresses, e.g. '=Sheet3!A1' or '=SUM(Sheet3:Sheet4!A1:C10)'.
+
Формулы, относящиеся к ячейкам других листов, можно использовать, следуя синтаксису Excel: укажите имя листа, за которым следует символ "!" перед адресом ячейки, напр., '=Sheet3!A1' или '=SUM(Sheet3:Sheet4!A1:C10)'.
  
Note that formulas are not automatically calculated by default. In order to activate automatic calculation of formulas set the grid property <tt>AutoCalc</tt> to true, or set the option <tt>boAutoCalc</tt> of the workbook used by the grid. "Automatic calculation" means that all formulas in the entire worksheet are recalculated whenever the content of any cell changes. Therefore, it is not required that the cells addressed by the formula already have values when the formula is entered.
+
Обратите внимание, что формулы по умолчанию автоматически не вычисляются. Чтобы активировать автоматический расчет формул, установите для свойства сетки <tt>AutoCalc</tt> значение true или установите опцию рабочей книги <tt>boAutoCalc</tt>, используемую сеткой. "Автоматический расчет" означает, что все формулы на всем листе пересчитываются всякий раз, когда изменяется содержимое любой ячейки. Поэтому не требуется, чтобы ячейки, адрессованные
 +
формулой, имели значения при ее вводе.
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
// Enable automatic calculation of formulas
+
// Включаем автоматический расчет формул
 
Grid.AutoCalc := true;         
 
Grid.AutoCalc := true;         
 
// or: Grid.Workbook.Options := Grid.Workbook.Options + [boAutoCalc];
 
// or: Grid.Workbook.Options := Grid.Workbook.Options + [boAutoCalc];
  
// Enter cells
+
// Вводим ячейки
Grid.Cells[1,1] := 1;        // this is cell A1
+
Grid.Cells[1,1] := 1;        // это - ячейка A1
Grid.Cells[1,2] := 2;        // this is cell A2
+
Grid.Cells[1,2] := 2;        // это - ячейка A2
  
// Enter formula
+
// Вводим формулу
Grid.Cells[1,3] := '=A1+A2';  // Calculates the sum of the values in A1 and A2  
+
Grid.Cells[1,3] := '=A1+A2';  // Вычисляем сумму значений в A1 и A2  
  
// Another formula in Cell B3
+
// Другая формула в ячейке B3
Grid.Cells[2,3] := '=B1*B2';  // It does not matter that the cells B1 and B2 do not exist, yet.
+
Grid.Cells[2,3] := '=B1*B2';  // Не имеет значения, что ячейки B1 и B2 еще не существуют.
  
// Enter cells needed by the formula
+
// Вводим ячейки, необходимые по формуле
Grid.Cells[2,1] := '=A3';    // Use the result of the previous formula
+
Grid.Cells[2,1] := '=A3';    // Используем результат предыдущей формулы
 
Grid.Cells[2,2] := 10;
 
Grid.Cells[2,2] := 10;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Cell formatting ===
+
=== Форматирование ячеек ===
Cell attributes can be attached to each cell in a similar way as the cell values. There is a set of grid properties representing each attribute:
+
Атрибуты ячеек могут быть прикреплены к каждой ячейке аналогично значениям ячейки. Существует набор свойств сетки, представляющих каждый атрибут:
  
* <tt>BackgroundColor[ACol, ARow: Integer]: TsColor</tt> - specifies the background color of the cell. <tt>TsColor</tt> is an integer containing the rgb components of the color. Unit <tt>fpsTypes</tt> provides a list of constants for a large number of predefined colors; the colors defined by the standard unit <tt>Graphics</tt> can be used as well (except for the system color values).
+
* <tt>BackgroundColor[ACol, ARow: Integer]: TsColor</tt> - задает цвет фона ячейки. <tt>TsColor</tt> - целое число, содержащее [значение] rgb-составляющей цвета. Модуль <tt>fpsTypes</tt> предоставляет список констант для большого количества предопределенных цветов; могут использоваться цвета, определенные стандартным модулем <tt>Graphics</tt> (за исключением значений цвета системы).
* <tt>CellBorder[ACol, ARow: Integer]: TsCellBorders</tt> - specifies which cell edges will be decorated by a border. Use the set values <tt>[cbEast, cbWest, cbNorth, cbSouth]</tt> for the right, left, top and border edges, respectively.
+
* <tt>CellBorder[ACol, ARow: Integer]: TsCellBorders</tt> - указывает, какие края ячеек будут обозначены рамкой. Используйте установленные значения  <tt>[cbEast, cbWest, cbNorth, cbSouth]</tt> для правого, левого, верхнего и нижнего краев соответственно.
* <tt>CellBorderStyle[ACol, ARow: Integer; ABorder: TsCellBorder]: TsCellBorderStyle</tt> - specifies the style to be used for the cell border line given in the parameter <tt>ABorder</tt>. The <tt>TsCellBorderStyle</tt> is a record containing information on the line style and line color. Note that the set <tt>CellBorder[ACol, ARow]</tt> must contain the element <tt>ABorder</tt> in order to activate this border line.
+
* <tt>CellBorderStyle[ACol, ARow: Integer; ABorder: TsCellBorder]: TsCellBorderStyle</tt> - указывает стиль, который будет использоваться для линии границы ячейки, указанной в параметре <tt>ABorder</tt>. <tt>TsCellBorderStyle</tt> - это запись, содержащая информацию о стиле линии и цвете линии. Обратите внимание, что набор <tt>CellBorder[ACol, ARow]</tt> должен содержать элемент <tt>ABorder</tt>, чтобы активировать эту границу.
* <tt>CellFont[ACol, ARow: Integer]: TFont</tt> - describes the font used when painting the cell text. Elements of the font can be changed separately by these properties:
+
* <tt>CellFont[ACol, ARow: Integer]: TFont</tt> - описывает шрифт, используемый при прорисовке текста ячейки. Элементы шрифта могут быть изменены отдельно этими свойствами:
** <tt>CellFontColor[ACol, ARow: Integer]: TsColor</tt> - identifies the text color. See "BackgroundColor" above for a description of the TsColor type.
+
** <tt>CellFontColor[ACol, ARow: Integer]: TsColor</tt> - определяет цвет текста. См. "BackgroundColor" выше для [получения] описания типа TsColor.
** <tt>CellFontName[ACol, ARow: Integer]: String</tt> - is the name of the font.
+
** <tt>CellFontName[ACol, ARow: Integer]: String</tt> - это имя шрифта.
** <tt>CellFontSize[ACol, ARow: Integer]: Single</tt> - is the point size of the font (1 pt = 1/72 inch).
+
** <tt>CellFontSize[ACol, ARow: Integer]: Single</tt> - это размер точки шрифта (1 pt = 1/72 дюйма).
** <tt>CellFontStyle[ACol, ARow: Integer]: TsFontStyles</tt> - is a set containing elements for using a bold, italic, underlined, or striked-out font.
+
** <tt>CellFontStyle[ACol, ARow: Integer]: TsFontStyles</tt> - представляет собой набор, содержащий элементы для использования <b>жирного шрифта</b>, <i>курсива</i>, <u>подчеркнутого</u> или <s>зачеркнутого</s> шрифтов.
* <tt>HorAlignment[ACol, ARow: Integer]: TsHorAlignment</tt> - allows to modify the horizontal alignment of the cell text (<tt>haLeft</tt>, <tt>haCenter</tt>, or <tt>haRight</tt>).
+
* <tt>HorAlignment[ACol, ARow: Integer]: TsHorAlignment</tt> - позволяет изменять горизонтальное выравнивание текста ячейки (<tt>haLeft</tt>, <tt>haCenter</tt>, или <tt>haRight</tt>).
* <tt>NumberFormat[ACol, ARow: Integer]: String</tt> - is an Excel-compatible number format string, e.g. <tt>'0.000'</tt> for displaying a number value with 3 decimal places. The number format is important if numbers are to be displayed as date or time values.
+
* <tt>NumberFormat[ACol, ARow: Integer]: String</tt> - представляет собой строку формата номера, совместимую с Excel, например. <tt>'0.000'</tt> для отображения числового значения с 3 десятичными знаками. Формат чисел важен, если цифры должны отображаться как значения даты или времени.
* <tt>TextRotation[ACol, ARow: Integer]: TsTextRotation</tt> - must be used for rotating the text within the cell. The type <tt>TsTextRotation</tt> provides <tt>trHorizontal</tt>, <tt>rt90DegreeClockwiseRotation</tt>, <tt>rt90DegreeCounterClockwiseRotation</tt>, and <tt>rtStacked</tt>.
+
* <tt>TextRotation[ACol, ARow: Integer]: TsTextRotation</tt> - должен использоваться для поворота текста внутри ячейки. Тип <tt>TsTextRotation</tt> обеспечивает [ориентацию] <tt>trHorizontal</tt> [(по горизонтали, по умолчанию)], <tt>rt90DegreeClockwiseRotation</tt> [(на 90° по часовой стрелке)], <tt>rt90DegreeCounterClockwiseRotation</tt> [(на 90° против часовой стрелки)] и <tt>rtStacked</tt> [(символов, располагающихся друг над другом, подобно японским иероглифам)].
* <tt>VertAlignment[ACol, ARow: Integer]: TsVertAlignment</tt> - allows to modify the horizontal alignment of the cell text (<tt>vaTop</tt>, <tt>vaCenter</tt>, or <tt>vaBottom</tt>).
+
* <tt>VertAlignment[ACol, ARow: Integer]: TsVertAlignment</tt> - позволяет изменять горизонтальное выравнивание текста ячейки (<tt>vaTop</tt> [(по верхнему краю)], <tt>vaCenter</tt> [(по центру)] или <tt>vaBottom</tt> [(по нижнему краю)]).
* <tt>Wordwrap[ACol, ARow: Integer]: Boolean</tt> - activates word-wrapping of text which is longer than the width of a cell (or the height if rotated text is used).
+
* <tt>Wordwrap[ACol, ARow: Integer]: Boolean</tt> - активирует автоперенос строки текста, длина которой больше ширины ячейки (или высота, если используется повернутый текст).
  
These properties can also be accessed for a range of cells specified by the indexes of the left column, top row, right column and bottom row of the cell block. Since these properties are related to several cells they are spelled in plural form (with appended "s"):  
+
Эти свойства также могут быть доступны для диапазона ячеек, указанных индексами левого столбца, верхней строки, правого столбца и нижней строки блока ячейки. Поскольку эти свойства связаны с несколькими ячейками, они пишутся во множественном числе (с окончанием "s"):
  
 
* <tt>BackgroundColors[ALeft, ATop, ARight, ABottom: Integer]: TsColor</tt>
 
* <tt>BackgroundColors[ALeft, ATop, ARight, ABottom: Integer]: TsColor</tt>
Line 123: Line 130:
 
* <tt>Wordwraps[ALeft, ATop, ARight, ABottom: Integer]: Boolean</tt>
 
* <tt>Wordwraps[ALeft, ATop, ARight, ABottom: Integer]: Boolean</tt>
  
If properties to be read do not have identical values within the cell block then a neutral or default value is returned.
+
Если свойства, подлежащие чтению, не имеют идентичных значений в блоке ячейки, возвращается нейтральное значение или значение по умолчанию.
  
  
'''Example'''
+
'''Примеры'''
  
This example adds a formula for today's date to cell A1, formats the cells to display the number as a date and selects a white, italic font on lightgray background. A red dotted border is drawn around the cell.
+
Этот пример добавляет формулу для сегодняшней даты в ячейку A1, форматирует ячейки для отображения числа в качестве даты и выбирает белый шрифт курсивом на светло-сером фоне. Вокруг ячейки пунктиром рисуется красная рамка.
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
const
 
const
 
   RED_DOTTED_BORDER: TsBorderStyle = (LineStyle: lsDotted; Color: scRed);
 
   RED_DOTTED_BORDER: TsBorderStyle = (LineStyle: lsDotted; Color: scRed);
  
// Set cell content
+
// Задаем содержимое ячейки
 
Grid.Cells[1,1] := '=TODAY()';
 
Grid.Cells[1,1] := '=TODAY()';
  
// Format as date
+
// Форматируем [содержимое] как дату
 
Grid.Numberformat[1,1] := 'yyyy/mm/dd';
 
Grid.Numberformat[1,1] := 'yyyy/mm/dd';
  
// Select background color
+
// Выбираем цвет фона [сетки]
 
Grid.BackgroundColor[1,1] := scSilver;
 
Grid.BackgroundColor[1,1] := scSilver;
  
// Select format
+
// Выбираем [цвет и стиль] шрифта
 
Grid.FontColor[1,1] := scWhite;
 
Grid.FontColor[1,1] := scWhite;
 
Grid.FontStyle[1,1] := [fssItalic];
 
Grid.FontStyle[1,1] := [fssItalic];
  
// Activate cell borders
+
// Прорисовываем границы ячейки
 
Grid.Border[1,1] := [cbEast, cbWest, cbNorth, cbSouth];
 
Grid.Border[1,1] := [cbEast, cbWest, cbNorth, cbSouth];
  
// Determine how cell borders will be drawn
+
// Определяем, как будут нарисованы границы ячеек
 
Grid.BorderStyle[1,1, cbEast] := RED_DOTTED_BORDER;
 
Grid.BorderStyle[1,1, cbEast] := RED_DOTTED_BORDER;
 
Grid.BorderStyle[1,1, cbWest] := RED_DOTTED_BORDER;
 
Grid.BorderStyle[1,1, cbWest] := RED_DOTTED_BORDER;
Line 156: Line 163:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Defining cell borders for a larger cell block by using these properties is a bit cumbersome because different styles may have to be used for the corder, border and inner cells. To simplyfy this task, the grid provides a method <tt>ShowCellBorders</tt> which gets the coordinates of the cell block and the styles of the left, top, right, bottom outer, and horizontal and vertical inner border lines. Use the constant <tt>NO_CELL_BORDER</tt> of no border line should be drawn at the specific location:
+
[Процесс] определения границ ячеек для более крупного блока ячеек с помощью этих свойств [вручную] будет довольно громоздким, потому что могут использоваться различные стили для внутренних, внутренних и внутренних ячеек. Чтобы решить эту задачу проще, сетка предоставляет метод <tt>ShowCellBorders</tt>, который получает координаты блока ячейки и стили левой, верхней, правой, нижней внешней и горизонтальной и вертикальной внутренних линий границы. Используйте константу <tt>NO_CELL_BORDER</tt>, при которой граница не должна быть выделена в определенном месте:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
const
 
const
 
   THICK_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsThick; Color: clBlack);
 
   THICK_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsThick; Color: clBlack);
 
   DOTTED_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsDotted; Color: clSilver);
 
   DOTTED_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsDotted; Color: clSilver);
  
// Draw a thick border around the block A1:C3, no inner border
+
// Нарисуем толстую рамку вокруг блока A1:C3, без внутренней границы
Grid.ShowCellBorders(1,1, 3,3,      // left, top, right, bottom coordinates of cell block
+
Grid.ShowCellBorders(1,1, 3,3,      // левая, верхняя, правая, нижняя координаты блока ячеек
   THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER,  // outer border styles
+
   THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER,  // стили внешней границы
   NO_CELL_BORDER, NO_CELL_BORDER                                                // inner border styles
+
   NO_CELL_BORDER, NO_CELL_BORDER                                                // стили внутренней границы
 
);
 
);
  
// Draw a thick border around the block A1:C3, dotted gray horizontal inner lines
+
// Нарисуйте толстую рамку вокруг блока A1: C3, серые горизонтальные внутренние линии пунктиром
 
Grid.SetCellBorders(1,1, 3,3,  
 
Grid.SetCellBorders(1,1, 3,3,  
 
   THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER,  
 
   THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER,  
Line 176: Line 183:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Cell comments ===
+
=== Комментарии ячейки ===
  
Comments can be added to each cell by using the grid's property <tt>CellComment[ACol, ARow: Integer]: String</tt>. Cells containing a comment are marked with a red triangle in the upper right corner of a cell. If the mouse is moved into a cell with a comment a popup window appears to display the comment.
+
Комментарии могут быть добавлены в каждую ячейку с использованием свойства сетки <tt>CellComment[ACol, ARow: Integer]: String</tt>. Ячейки, содержащие комментарий, отмечены красным треугольником в верхнем правом углу ячейки. Если мышь перемещается в ячейку с комментарием, появляется всплывающее окно для отображения комментария.
  
{{Note|For the popup window to show up it is required to add the flag <tt>goCellHints</tt> to the grid's <tt>Options</tt>, and the standard grid property <tt>ShowHint</tt> must be true. Otherwise the popup windows will not appear.}}
+
{{Note|Чтобы всплывающее окно появилось, необходимо добавить флаг <tt>goCellHints</tt> в свойство <tt>Options</tt> сетки, а стандартное свойство сетки <tt>ShowHint</tt> должно [иметь значение] true. В противном случае всплывающие окна не будут отображаться.}}
  
'''Example:'''
+
'''Пример:'''
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
Grid.Cells[1,1] := '=pi()';
 
Grid.Cells[1,1] := '=pi()';
Grid.CellComment[1,1] := 'The number pi is needed to calculate the area and circumference of a circle.';
+
Grid.CellComment[1,1] := 'Число pi необходимо для вычисления площади и окружности круга.';
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Hyperlinks in cells ===
+
=== Гиперссылки в ячейках ===
  
Cells with attached hyperlinks allow the user to navigate to other cells or other documents by clicking on the cell. Hyperlinks can be accessed by using the property <tt>Hyperlink[ACol, ARow: Integer: String</tt>. The hyperlink string contains the hyperlink target and an optional tooltip text which is separated by means of a bar character ("|"). Internal targets are already handled by the grid, but for navitation to the hyperlink an event handler for <tt>OnClickHyperlink</tt> must be provided. To distinguish normal cell clicks from hyperlink clicks the mouse must be held down for fractions of a second before the hyperlink is executed.
+
Ячейки с прикрепленными гиперссылками позволяют пользователю перемещаться по другим ячейкам или другим документам [простым] нажатием на ячейку. Доступ к гиперссылкам можно получить с помощью свойства <tt>Hyperlink[ACol, ARow: Integer]: String</tt>. Строка гиперссылки содержит цель гиперссылки и необязательный текст всплывающей подсказки, который разделяется символом штриха ("|"). Внутренние цели уже обрабатываются сеткой, но для навигации  у гиперссылки должен быть определен обработчик событий для <tt>OnClickHyperlink</tt>. Чтобы отличить нормальные клики по ячейкам от кликов по гиперссылкам, кнопка мыши должна удерживаться доли секунды до того, как будет [выполнен переход по] гиперссылке.
  
'''Example:'''
+
'''Пример:'''
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
// Example for adding an external hyperlink
+
// Пример добавления внешней гиперссылки
 
Grid.Cells[1,1] := 'Lazarus';
 
Grid.Cells[1,1] := 'Lazarus';
Grid.Hyperlink[1,1] := 'www.lazarus-ide.org|Open Lazarus web site';
+
Grid.Hyperlink[1,1] := 'www.lazarus-ide.org|Открыть веб-сайт Lazarus';
  
// Example for adding an internal hyperlink
+
// Пример добавления внутренней гиперссылки
Grid.Cells[2,2] := 'Summary';
+
Grid.Cells[2,2] := 'Итого';
Grid.Hyperlink[2,2] := '#Sheet2!B10|Go to the summary starting at cell B10 of sheet2';
+
Grid.Hyperlink[2,2] := '#Sheet2!B10|Перейдите к итогам, начиная с ячейки B10 листа 2';
  
// Example for an OnClickHyperlink event handler needed for external hyperlinks
+
// Пример для обработчика событий OnClickHyperlink, необходимого для внешних гиперссылок
 
uses
 
uses
 
   ..., uriparser;
 
   ..., uriparser;
Line 216: Line 223:
 
       OpenUrl(AHyperlink.Target);
 
       OpenUrl(AHyperlink.Target);
 
     else
 
     else
       ShowMessage('Hyperlink ' + AHyperlink.Target + ' clicked');
+
       ShowMessage('Гиперссылка ' + AHyperlink.Target + ' нажата');
 
   end;
 
   end;
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
{{Note|Follow the instructions [[#Cell_comments|above]] to show the tooltip text as a popup window. }}
+
{{Note|Следуйте инструкциям [[#Комментарии ячейки|выше]], чтобы отобразить текст всплывающей подсказки в виде всплывающего окна. }}
  
=== Merged cells ===
+
=== Объединенные ячейки ===
  
A rectangular group of cells can be merged to a single block. The content of the top/left cell of this block is displayed across all the combined cells, the content of the other cells is ignored.
+
Прямоугольная группа ячеек может быть объединена в один блок. Содержимое верхней/левой ячейки этого блока отображается во всех объединенных ячейках, содержимое других ячеек игнорируется.
  
Use the method <tt>MergeCells</tt> to perform this operation. As parameters, it requires the left, top, right and bottom coordinates of the cell range to be merged. They also can be combined into a a <tt>TRect</tt> record. The method <tt>Unmerge</tt> splits a previously merged block again in the individual cells, here the coordinates of a single cell from the merged range is sufficient.
+
Используйте метод <tt>MergeCells</tt> для выполнения этой операции. В качестве параметров требуется объединить левую, верхнюю, правую и нижнюю координаты диапазона ячеек. Они также могут быть объединены в запись <tt>TRect</tt>. Метод <tt>Unmerge</tt> снова разделяет ранее объединенный блок на отдельные ячейки, здесь достаточно координат одной ячейки из объединенного диапазона.
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
   // Example for merging
+
   // Пример слияния
   Grid.MergeCells(1,1, 3,1);          // Combine the first 3 cells of the first row
+
   Grid.MergeCells(1,1, 3,1);          // Объединяем первые 3 ячейки первой строки
   Grid.Cells[1,1] := 'Summary';       // Write the text "Summary" across the 3 cells
+
   Grid.Cells[1,1] := 'Итого';         // Записываем текст "Итого" по 3 ячейкам
   Grid.HorAlignment[1,1] := haCenter; // and center it.
+
   Grid.HorAlignment[1,1] := haCenter; // и центрируем его
  
   // Example for unmerging
+
   // Пример разделения
   Grid.UnmergeCells(1,1);            // Splits the merged block (1,1..3,1)
+
   Grid.UnmergeCells(1,1);            // Разделяем объединенный блок (1,1..3,1)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Column widths and row heights ===
+
=== Ширина столбцов и высота строк ===
  
 
Column widths and row heights can be changed for all cells by setting the <tt>DefaultColWidth</tt> and <tt>DefaultRowHeight</tt>. This works also in design mode. In addition, the widths and heights of particular columns and rows can be modified by the properties <tt>ColWidths[ACol]</tt> and <tt>RowHeights[ARow]</tt>. These values must be given in pixels.
 
Column widths and row heights can be changed for all cells by setting the <tt>DefaultColWidth</tt> and <tt>DefaultRowHeight</tt>. This works also in design mode. In addition, the widths and heights of particular columns and rows can be modified by the properties <tt>ColWidths[ACol]</tt> and <tt>RowHeights[ARow]</tt>. These values must be given in pixels.
  
<syntaxhighlight>
+
Ширину столбцов и высоту строк можно изменить для всех ячеек, определив [свойства] <tt>DefaultColWidth</tt> и <tt>DefaultRowHeight</tt>. Это работает также в режиме разработки. Кроме того, ширина и высота отдельных столбцов и строк могут быть изменены свойствами <tt>ColWidths[ACol]</tt> и <tt>RowHeights[ARow]</tt>. Эти значения должны указываться в пикселях.
   Grid.DefaultColWidth := 80;  // This is the width of all columns
+
 
   Grid.ColWidths[10] := 10;    // except for column #10 which is only 10 pixels wide.
+
<syntaxhighlight lang=pascal>
 +
   Grid.DefaultColWidth := 80;  // Это ширина всех столбцов,
 +
   Grid.ColWidths[10] := 10;    // исключая столбец #10, ширина которого составляет всего 10 пикселей.
  
   Grid.DefaultRowHeight := 20; // All rows are 20 pixels high
+
   Grid.DefaultRowHeight := 20; // Все строки имеют высоту 20 пикселей,
   Grid.RowHeights[2] := 4;    // Row #2 serves as a spacer and is only 4 pixels high.
+
   Grid.RowHeights[2] := 4;    // Строка #2 служит в качестве разделителя и имеет высоту всего 4 пиксела.
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== New grid properties ===
+
=== Новые свойства сетки ===
In addition to the properties inherited from its ancestors <tt>TCustomDrawGrid</tt> and <tt>TCustomGrid</tt>, the <tt>TsWorksheetGrid</tt> introduces the following new '''published properties''':
+
В дополнение к свойствам, унаследованным от его предков <tt>TCustomDrawGrid</tt> и <tt>TCustomGrid</tt>, <tt>TsWorksheetGrid</tt> вводит следующие новые '''published-свойства''':
  
* '''AllowDragAndDrop''' (boolean): Cells can be dragged to a new location if this option is active. Move the mouse cursor to the border of the cells to be dragged until the mouse cursor becomes a four-sided arrow, and then begin dragging. If the dragged cell is referenced by a formula the formula is NOT updated - this behavior is different from Excel but agrees with Open/LibreOffice Calc.
+
* '''AllowDragAndDrop''' (boolean): если эта опция активна, ячейки можно перетащить в новое место. Переместите курсор мыши на границу ячеек, которые нужно перетащить, пока курсор мыши не станет четырехсторонней стрелкой, а затем начинайте перетаскивание. Если перетаскиваемая ячейка ссылается на формулу, формула НЕ обновляется - это поведение отличается от Excel, но согласуется с Open/LibreOffice Calc.
* '''AutoCalc''' (boolean): Formulas in the grid are automatically recalculated whenever cell content changes.
+
* '''AutoCalc''' (boolean): формулы в сетке автоматически пересчитываются при изменении содержимого ячейки.
 
* '''AutoExpand''' (set of <tt>aeData, aeNavigation, aeDefault</tt>):  
 
* '''AutoExpand''' (set of <tt>aeData, aeNavigation, aeDefault</tt>):  
** If the option <tt>aeData</tt> is contained in the set <tt>AutoExpand</tt> then the grid automatically expands if cells are written outside the predefined range.
+
** Если опция <tt>aeData</tt> содержится в наборе <tt>AutoExpand</tt>, тогда сетка автоматически расширяется, если ячейки записываются за пределами предопределенного диапазона.
** If <tt>AutoExpand</tt> contains the option <tt>aeNavigation</tt> then the user can ''navigate'' outside the predefined cell range; new rows and columns are automatically added to the grid (but not to the underlying worksheet). If a file is loaded into the grid then grid dimensions are automatically expanded to the range needed for the worksheet.  
+
** Если <tt>AutoExpand</tt> содержит параметр <tt>aeNavigation</tt>, тогда пользователь может ''перемещаться'' за пределами предопределенного диапазона ячеек; новые строки и столбцы автоматически добавляются в сетку (но не к основному листу). Если файл загружен в сетку, то размеры сетки автоматически расширяются до диапазона, необходимого для рабочего листа.
** The option <tt>aeDefault</tt> comes into play if a grid is smaller than the DEFAULT_COL_COUNT and DEFAULT_ROW_COUNT default values. If this option is included the grid is automatically expanded to this default size. On the other hand, if ony a given number of rows and columns should be contained in the grid the option <tt>aeDefault</tt> must be '''removed before''' setting <tt>RowCount</tt>/<tt>ColCount</tt>.
+
** Опция <tt>aeDefault</tt> вступает в игру, если сетка меньше значений по умолчанию DEFAULT_COL_COUNT и DEFAULT_ROW_COUNT. Если этот параметр включен, сетка автоматически расширяется до этого размера по умолчанию [(с добавлением "недостающих" столбцов и строк)]. С другой стороны, если в сетке должно содержаться только определенное количество строк и столбцов, опция <tt>aeDefault</tt> должна быть '''удалена до''' установки [свойств] <tt>RowCount</tt>/<tt>ColCount</tt>.
* '''EditorLineMode''' determines whether the grid's cell editor supports only single lines (<tt>elmSingleLine</tt>) or multiple lines (<code>elmMultiLine</code>). In the latter case, you can press CTRL+ENTER in order to begin a new line during editing a cell.
+
* '''EditorLineMode''' определяет, поддерживает ли редактор ячейки сетки только одиночные строки (<tt>elmSingleLine</tt>) или несколько строк (<code>elmMultiLine</code>). В последнем случае вы можете нажать CTRL + ENTER, чтобы начать новую строку во время редактирования ячейки.
* '''FrozenBorderPen''': if the grid has frozen panes (see <tt>FrozenCols</tt> and <tt>FrozenRows</tt>) a separating line is drawn out the edge of the last frozen row and column. The property <tt>FrozenBorderPen</tt> determines how this line is drawn. Set <tt>FrozenBorderPen.Style = psClear</tt> to hide these lines.
+
* '''FrozenBorderPen''': если сетка имеет замороженные панели (см. <tt>FrozenCols</tt> и <tt>FrozenRows</tt>), разделительная линия вытягивает край последней замороженной строки и столбца , Свойство <tt>FrozenBorderPen</tt> определяет способ рисования этой строки. Установите [значение свойства] <tt>FrozenBorderPen.Style = psClear</tt>, чтобы скрыть эти линии.
* '''FrozenCols''' and '''FrozenRows''' (integer): determines the number of non-scrolling columns (rows) at the left (top) of the grid. Technically these are custom-drawn fixed columns (rows) of the ancestor. Note that the user cannot navigate or edit cells within this range.
+
* '''FrozenCols''' и '''FrozenRows''' (integer): определяет количество НЕ прокручиваемых столбцов(строк) слева(сверху) сетки. Технически это настраиваемые фиксированные столбцы (строки) предка. Обратите внимание, что пользователь не может перемещаться или редактировать ячейки в этом диапазоне.
* '''ReadFormulas''' (boolean): Reads formulas from the input files. Since fpspreadsheet does not support all formulas available in the Office spreadsheet applications there is a chance that reading of a file may crash due to formulas; in this case, reading of formulas can be disabled.
+
* '''ReadFormulas''' (boolean): считывает формулы из входных файлов. Так как fpspreadsheet не поддерживает все формулы, доступные в приложениях электронной таблицы Office, есть вероятность, что при чтении файла может произойти сбой из-за формул; в этом случае чтение формул может быть отключено.
* '''SelectionPen''' (TPen): determines how the border of the selected cell is painted. By default, the selected cell is outlined by a 3-pixel-wide black line.
+
* '''SelectionPen''' (TPen): определяет, как окрашивается граница выбранной ячейки. По умолчанию выбранная ячейка выделена черной линией шириной 3 пикселя.
* '''ShowGridLines''' (boolean): allows to turn off the grid lines
+
* '''ShowGridLines''' (boolean): позволяет отключить линии сетки
* '''ShowHeaders''' (boolean): can be used to turn off the column and row headers ('A', 'B', 'C', ..., '1', '2', '3'). The property '''DisplayFixedColRow''' has the same effect, but is deprecated now.
+
* '''ShowHeaders''' (boolean): может использоваться для отключения заголовков столбцов и строк ('A', 'B', 'C', ..., '1', '2', '3'). Свойство '''DisplayFixedColRow''' имеет тот же эффект, но теперь устарело.
* '''TextOverflow''' (boolean): If this property is on then long text content is allowed to extend into adjacent cells if these are empty. Note that numerical data cells are rounded such that the cell does not overflow.
+
* '''TextOverflow''' (boolean): если это свойство включено, то длинному текстовому контенту разрешается распространяться на соседние ячейки, если они пусты. Обратите внимание, что ячейки числовых данных округлены так, что ячейка не переполняется.
* '''WorkbookSource''' (TsWorkbookSource): links to the workbook source which provides the data. If empty, the grid uses an internal workbook source.
+
* '''WorkbookSource''' (TsWorkbookSource): ссылки на источник рабочей книги, которые предоставляют данные. Если [ссылки] пустые, сетка использует внутренний источник рабочей книги.
  
'''Events'''
+
'''События'''
* '''OnClickHyperlink''': This event fires whenever the user clicks a cell with an embedded hyperlink. Since clicking a cell normally would bring a cell into edit mode it is necessary to hold the mouse key down for about half a second to trigger the hyperlink event.
+
* '''OnClickHyperlink''': это событие срабатывает всякий раз, когда пользователь нажимает на ячейку со встроенной гиперссылкой. Поскольку щелчок по ячейке обычно приведет к переключению ячейки в режим редактирования, необходимо удерживать клавишу мыши примерно на полсекунды, чтобы вызвать событие гиперссылки.
  
=== Recommended property values ===
+
=== Рекомендуемые значения свойств ===
In order to set up the grid to behave similar to the well-known Office applications we recommend the following grid property settings. It should be emphasized, though, that differences in usage do exist and cannot be removed without a major re-write of the inherited grid infrastructure:
+
Чтобы настроить сетку для работы аналогично хорошо известным приложениям Office, мы рекомендуем следующие настройки свойств сетки. Следует, однако, подчеркнуть, что различия в использовании существуют и не могут быть удалены без серьезной перезаписи унаследованной инфраструктуры сетки:
  
* <tt>AutoAdvance = aaDown</tt>: The ENTER key advances the selected cell to the next lower cell.
+
* <tt>AutoAdvance = aaDown</tt>: клавиша ENTER переводит [фокус] с выбранной ячейки в следующую нижнюю ячейку
* <tt>AutoCalc = true</tt>: Automatically calculate formulas
+
* <tt>AutoCalc = true</tt>: автоматическое вычисление формул
* <tt>AutoEdit = true</tt>: For editing a cell, just begin typing. Alternatively you can begin edit mode by pressing F2.
+
* <tt>AutoEdit = true</tt>: для редактирования ячейки просто начинайте печатать. Кроме того, вы можете начать редактирование, нажав F2
* <tt>AutoExpand = [aeData, aeNavigation, aeDefault]</tt>: Don't restrict usage of the grid to the predefined grid dimensions, for an Excel-like user-interface.
+
* <tt>AutoExpand = [aeData, aeNavigation, aeDefault]</tt>: не ограничивайте использование сетки предопределенными размерами сетки для пользовательского интерфейса, подобного Excel
* <tt>EditorLineMode = elmMultiLine</tt>: Activate cell editor supporting multiple lines during editing.
+
* <tt>EditorLineMode = elmMultiLine</tt>: активируйте редактор ячейки, поддерживающий многострочность во время редактирования
* <tt>MouseWheelOption = mwGrid</tt>: The mouse wheel scrolls the grid, not the selected cell.
+
* <tt>MouseWheelOption = mwGrid</tt>: колесико мыши прокручивает сетку, а не выбранную ячейку
* <tt>Options</tt>: add these flags to the standard options inherited from TCustomGrid:
+
* <tt>Options</tt>: добавьте эти флаги в стандартные параметры, унаследованные от TCustomGrid:
** <tt>goColSizing</tt>: the user can change a column width by dragging the vertical separating line between two column header cells
+
** <tt>goColSizing</tt>: пользователь может изменить ширину столбца, перетащив вертикальную разделительную линию между двумя ячейками заголовка столбца
** <tt>goRowSizing</tt>: the user can change a row height by dragging the horizontal separating line between two row header cells
+
** <tt>goRowSizing</tt>: пользователь может изменить высоту строки, перетащив горизонтальную разделительную линию между двумя ячейками заголовка строки
** <tt>goDblClickAutosize</tt>: a double-click on a separating line between two column or row header cells resizes the column width or row height to its optimum value.
+
** <tt>goDblClickAutosize</tt>: двойной щелчок на разделительной линии между двумя ячейками заголовка столбца или строки изменяет ширину столбца или высоту строки до оптимального значения
** <tt>goEditing</tt>: puts the grid into edit mode (same as <tt>AutoEdit</tt>)
+
** <tt>goEditing</tt>: помещает сетку в режим редактирования (так же, как [и] <tt>AutoEdit</tt>)
** <tt>goThumbTracking</tt>: immediate scrolling of the grid while the scrollbar is dragged with the mouse (if this option is off scrolling occurs at the moment when the mouse button is released).
+
** <tt>goThumbTracking</tt>: немедленная прокрутка сетки, когда полоса прокрутки перетаскивается мышью (если эта опция отключена, прокрутка происходит в тот момент, когда кнопка мыши отпускается)
* <tt>TextOverflow = true</tt>: allow long cell text flow into empty adjacent cells
+
* <tt>TextOverflow = true</tt>: разрешить длинный поток текста ячейки в пустые соседние ячейки
  
== See also ==
+
== Смотри также ==
 
* [[FPSpreadsheet_tutorial:_Writing_a_mini_spreadsheet_application|FPSpreadsheet tutorial: Writing a mini spreadsheet application]]
 
* [[FPSpreadsheet_tutorial:_Writing_a_mini_spreadsheet_application|FPSpreadsheet tutorial: Writing a mini spreadsheet application]]
 
* [[FPSpreadsheet|API documentation of FPSpreadsheet]]
 
* [[FPSpreadsheet|API documentation of FPSpreadsheet]]
 
* [[RPN_Formulas_in_FPSpreadsheet|RPN formulas in FPSpreadsheet]]
 
* [[RPN_Formulas_in_FPSpreadsheet|RPN formulas in FPSpreadsheet]]
* [[FPSpreadsheet:_List_of_formulas|FPSpreadsheet: List of formulas]]
+
* [[FPSpreadsheet:_List_of_formulas/ru|FPSpreadsheet: List of formulas]]
* [[Grids_Reference_Page|Grids reference page]]
+
* [[Grids_Reference_Page/ru|Grids reference page]]
 
 
[[Category:Lazarus]]
 
[[Category:Components]]
 
[[Category:Lazarus-CCR]]
 
[[Category:FPSpreadsheet]]
 

Latest revision as of 02:49, 2 March 2020

English (en) русский (ru)


-- Zoltanleo 15:36, 21 September 2018 (CEST) Ввиду сложности дословного перевода текста с английского на русский слова, требующиеся по смыслу, но отсутствующие в английской версии, указаны в квадратных скобках.



Обзор

TsWorksheetGrid - это специализированный компонент сетки, который взаимодействует с TsWorksheet из библиотеки FPSpreadsheet и отображает файлы данных электронных таблиц, как обычный TStringGrid.

fpsgrid.png

Интерфейс программирования

TsWorksheetGrid наследуется от TCustomGrid и ведет себя как стандартный TStringGrid. Основное различие заключается в том, что сама сетка не хранит данные, но данные хранятся в TWorksheet из FPSpreadsheet. Доступ к рабочему листу можно получить с помощью свойства Worksheet сетки. Аналогично, Workbook позволяет получить доступ ко всей рабочей книге, к которой принадлежит рабочий лист.

Для доступа к ячейкам, их значениям и атрибутам доступно множество свойств, как и в случае StringGrid, например, запись значения ячейки с помощью Grid.Cells[ACol, ARow] := 1.234. Ячейки идентифицируются в этих свойствах с помощью индексов столбцов и строк ячейки. Обратите внимание, что индексы передаются в порядке "первый столбец/последняя строка" и включают индексы, занятые фиксированными ячейками, т.е. верхняя/левая ячейка данных имеет индексы col=1 и row=1. Это отличается от fpspreadsheat, где индексы всегда начинаются с 0 и передаются в функции в обратном порядке "первая строка/последний столбец".

Доступ к значениям ячеек

Свойство Cells[ACol, ARow] обеспечивает доступ к данным в ячейке, заданной его индексами столбцов и строк. Это похоже на TStringGrid. В отличие от TStringGrid, который работает только со строками, TsWorksheetGrid, принимает числа, даты, булевы типы и формулы. По этой причине тип данных Cells является variant.

Запись значений ячеек

Используйте этот код для записи данных в ячейку в TsWorksheetGrid с именем Grid для простоты:

  // Записываем строку
  Grid.Cells[1, 1] := 'Это - строка';  
  // Записываем строку со встроенными кодами HTML
  Grid.Cells[1, 2] := 'Химическая формула <b>воды</b>: H<sub>2</sub>O';
  // Записываем число
  Grid.Cells[1, 3] := 1.2345;
  // Записываем дату
  Grid.Cells[1, 4] := EncodeDate(2016, 1, 18);
  // Записываем формулу
  Grid.Cells[1, 5] := '=A3+2';
  // и т.д.
Light bulb  Примечание: Текст, назначенный ячейке, может содержать встроенные простые HTML-коды для изменения шрифта для определенных слов или символов.

Чтение значений ячеек

Точно так же значения ячеек можно считывать в переменные выделенных типов:

var
  str: String;
  x: Double;
begin
  str := Grid.Cells[1, 1];  // Переменная "str" будет содержать значение "Это  - строка",
  x := Grid.Cells[1, 2];    // x будет 1.2345
  str := Grid.Cells[1, 2];  // Хотя ячейка содержит число, она преобразуется в строку "1.2345"
end;

Сравнение значений ячеек

Так как свойство Cells является [типом] вариант, сравнение строки со строкой немного сложнее. Используйте функцию преобразования строк в вариант VarToStr(), предоставляемую модулем variant.

  // Это простое сравнение не удастся:
  // if Grid.Cells[1,1] = 'Это - строка' then ...

  // Используйте вместо этого:
  if VarToStr(Grid.Cells[1,1]) = 'Это - строка' then ...

Численные значения часто можно сравнивать без явного преобразования:

  if Grid.Cells[1,2] = 1.2345 then ...

Формулы в ячейках

Поскольку TsWorksheetGreed работает поверх электронной таблицы, могут быть вводиться все формулы, поддерживаемые FPSpreadsheet. См. этот документ для полного списка поддерживаемых формул.

Строка формулы должна начинаться с символа «=». Ссылки на ячейки должны следовать за символом "A1" в обозначении Excel, то есть индексом столбца должны быть символы «A» .. «Z», а индекс строки - целое число, начинающее [нумерацию] с 1. Если имеется более 26 столбцов, можно использовать два (или три) символа.

В случае диапазона ячеек координаты верхних и нижних правых углов прямоугольника ячейки должны быть разделены цветом, напр., '=SUM(A1:C10)' вычисляет сумму значений в прямоугольнике ячейки, проходящих между A1 и C10.

Формулы, относящиеся к ячейкам других листов, можно использовать, следуя синтаксису Excel: укажите имя листа, за которым следует символ "!" перед адресом ячейки, напр., '=Sheet3!A1' или '=SUM(Sheet3:Sheet4!A1:C10)'.

Обратите внимание, что формулы по умолчанию автоматически не вычисляются. Чтобы активировать автоматический расчет формул, установите для свойства сетки AutoCalc значение true или установите опцию рабочей книги boAutoCalc, используемую сеткой. "Автоматический расчет" означает, что все формулы на всем листе пересчитываются всякий раз, когда изменяется содержимое любой ячейки. Поэтому не требуется, чтобы ячейки, адрессованные

формулой, имели значения при ее вводе.
// Включаем автоматический расчет формул
Grid.AutoCalc := true;        
// or: Grid.Workbook.Options := Grid.Workbook.Options + [boAutoCalc];

// Вводим ячейки
Grid.Cells[1,1] := 1;         // это - ячейка A1
Grid.Cells[1,2] := 2;         // это - ячейка A2

// Вводим формулу
Grid.Cells[1,3] := '=A1+A2';  // Вычисляем сумму значений в A1 и A2 

// Другая формула в ячейке B3
Grid.Cells[2,3] := '=B1*B2';  // Не имеет значения, что ячейки B1 и B2 еще не существуют.

// Вводим ячейки, необходимые по формуле
Grid.Cells[2,1] := '=A3';     // Используем результат предыдущей формулы
Grid.Cells[2,2] := 10;

Форматирование ячеек

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

  • BackgroundColor[ACol, ARow: Integer]: TsColor - задает цвет фона ячейки. TsColor - целое число, содержащее [значение] rgb-составляющей цвета. Модуль fpsTypes предоставляет список констант для большого количества предопределенных цветов; могут использоваться цвета, определенные стандартным модулем Graphics (за исключением значений цвета системы).
  • CellBorder[ACol, ARow: Integer]: TsCellBorders - указывает, какие края ячеек будут обозначены рамкой. Используйте установленные значения [cbEast, cbWest, cbNorth, cbSouth] для правого, левого, верхнего и нижнего краев соответственно.
  • CellBorderStyle[ACol, ARow: Integer; ABorder: TsCellBorder]: TsCellBorderStyle - указывает стиль, который будет использоваться для линии границы ячейки, указанной в параметре ABorder. TsCellBorderStyle - это запись, содержащая информацию о стиле линии и цвете линии. Обратите внимание, что набор CellBorder[ACol, ARow] должен содержать элемент ABorder, чтобы активировать эту границу.
  • CellFont[ACol, ARow: Integer]: TFont - описывает шрифт, используемый при прорисовке текста ячейки. Элементы шрифта могут быть изменены отдельно этими свойствами:
    • CellFontColor[ACol, ARow: Integer]: TsColor - определяет цвет текста. См. "BackgroundColor" выше для [получения] описания типа TsColor.
    • CellFontName[ACol, ARow: Integer]: String - это имя шрифта.
    • CellFontSize[ACol, ARow: Integer]: Single - это размер точки шрифта (1 pt = 1/72 дюйма).
    • CellFontStyle[ACol, ARow: Integer]: TsFontStyles - представляет собой набор, содержащий элементы для использования жирного шрифта, курсива, подчеркнутого или зачеркнутого шрифтов.
  • HorAlignment[ACol, ARow: Integer]: TsHorAlignment - позволяет изменять горизонтальное выравнивание текста ячейки (haLeft, haCenter, или haRight).
  • NumberFormat[ACol, ARow: Integer]: String - представляет собой строку формата номера, совместимую с Excel, например. '0.000' для отображения числового значения с 3 десятичными знаками. Формат чисел важен, если цифры должны отображаться как значения даты или времени.
  • TextRotation[ACol, ARow: Integer]: TsTextRotation - должен использоваться для поворота текста внутри ячейки. Тип TsTextRotation обеспечивает [ориентацию] trHorizontal [(по горизонтали, по умолчанию)], rt90DegreeClockwiseRotation [(на 90° по часовой стрелке)], rt90DegreeCounterClockwiseRotation [(на 90° против часовой стрелки)] и rtStacked [(символов, располагающихся друг над другом, подобно японским иероглифам)].
  • VertAlignment[ACol, ARow: Integer]: TsVertAlignment - позволяет изменять горизонтальное выравнивание текста ячейки (vaTop [(по верхнему краю)], vaCenter [(по центру)] или vaBottom [(по нижнему краю)]).
  • Wordwrap[ACol, ARow: Integer]: Boolean - активирует автоперенос строки текста, длина которой больше ширины ячейки (или высота, если используется повернутый текст).

Эти свойства также могут быть доступны для диапазона ячеек, указанных индексами левого столбца, верхней строки, правого столбца и нижней строки блока ячейки. Поскольку эти свойства связаны с несколькими ячейками, они пишутся во множественном числе (с окончанием "s"):

  • BackgroundColors[ALeft, ATop, ARight, ABottom: Integer]: TsColor
  • CellBorders[ALeft, ATop, ARight, ABottom: Integer]: TsCellBorders
  • CellBorderStyles[ALeft, ATop, ARight, ABottom: Integer; ABorder: TsCellBorder]: TsCellBorderStyle
  • CellFonts[ALeft, ATop, ARight, ABottom: Integer]: TFont
  • CellFontColors[ALeft, ATop, ARight, ABottom: Integer]: TsColor
  • CellFontNames[ALeft, ATop, ARight, ABottom: Integer]: String
  • CellFontStyles[ALeft, ATop, ARight, ABottom: Integer]: TsFontStyles
  • CellFontSizes[ALeft, ATop, ARight, ABottom: Integer]: Single
  • HorAlignments[ALeft, ATop, ARight, ABottom: Integer]: TsHorAlignment
  • NumberFormats[ALeft, ATop, ARight, ABottom: Integer]: String
  • TextRotations[ALeft, ATop, ARight, ABottom: Integer]: TsTextRotation
  • VertAlignments[ALeft, ATop, ARight, ABottom: Integer]: TsVertAlignment
  • Wordwraps[ALeft, ATop, ARight, ABottom: Integer]: Boolean

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


Примеры

Этот пример добавляет формулу для сегодняшней даты в ячейку A1, форматирует ячейки для отображения числа в качестве даты и выбирает белый шрифт курсивом на светло-сером фоне. Вокруг ячейки пунктиром рисуется красная рамка.

const
  RED_DOTTED_BORDER: TsBorderStyle = (LineStyle: lsDotted; Color: scRed);

// Задаем содержимое ячейки
Grid.Cells[1,1] := '=TODAY()';

// Форматируем [содержимое] как дату
Grid.Numberformat[1,1] := 'yyyy/mm/dd';

// Выбираем цвет фона [сетки]
Grid.BackgroundColor[1,1] := scSilver;

// Выбираем [цвет и стиль] шрифта 
Grid.FontColor[1,1] := scWhite;
Grid.FontStyle[1,1] := [fssItalic];

// Прорисовываем границы ячейки 
Grid.Border[1,1] := [cbEast, cbWest, cbNorth, cbSouth];

// Определяем, как будут нарисованы границы ячеек
Grid.BorderStyle[1,1, cbEast] := RED_DOTTED_BORDER;
Grid.BorderStyle[1,1, cbWest] := RED_DOTTED_BORDER;
Grid.BorderStyle[1,1, cbNorth] := RED_DOTTED_BORDER;
Grid.BorderStyle[1,1, cbSouth] := RED_DOTTED_BORDER;

[Процесс] определения границ ячеек для более крупного блока ячеек с помощью этих свойств [вручную] будет довольно громоздким, потому что могут использоваться различные стили для внутренних, внутренних и внутренних ячеек. Чтобы решить эту задачу проще, сетка предоставляет метод ShowCellBorders, который получает координаты блока ячейки и стили левой, верхней, правой, нижней внешней и горизонтальной и вертикальной внутренних линий границы. Используйте константу NO_CELL_BORDER, при которой граница не должна быть выделена в определенном месте:

const
  THICK_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsThick; Color: clBlack);
  DOTTED_CELL_BORDER: TsCellBorderStyle = (LineStyle: lsDotted; Color: clSilver);

// Нарисуем толстую рамку вокруг блока A1:C3, без внутренней границы
Grid.ShowCellBorders(1,1, 3,3,      // левая, верхняя, правая, нижняя координаты блока ячеек
  THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER,   // стили внешней границы
  NO_CELL_BORDER, NO_CELL_BORDER                                                // стили внутренней границы
);

// Нарисуйте толстую рамку вокруг блока A1: C3, серые горизонтальные внутренние линии пунктиром
Grid.SetCellBorders(1,1, 3,3, 
  THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, THICK_CELL_BORDER, 
  DOTTED_CELL_BORDER, NO_CELL_BORDER
);

Комментарии ячейки

Комментарии могут быть добавлены в каждую ячейку с использованием свойства сетки CellComment[ACol, ARow: Integer]: String. Ячейки, содержащие комментарий, отмечены красным треугольником в верхнем правом углу ячейки. Если мышь перемещается в ячейку с комментарием, появляется всплывающее окно для отображения комментария.

Light bulb  Примечание: Чтобы всплывающее окно появилось, необходимо добавить флаг goCellHints в свойство Options сетки, а стандартное свойство сетки ShowHint должно [иметь значение] true. В противном случае всплывающие окна не будут отображаться.

Пример:

Grid.Cells[1,1] := '=pi()';
Grid.CellComment[1,1] := 'Число pi необходимо для вычисления площади и окружности круга.';

Гиперссылки в ячейках

Ячейки с прикрепленными гиперссылками позволяют пользователю перемещаться по другим ячейкам или другим документам [простым] нажатием на ячейку. Доступ к гиперссылкам можно получить с помощью свойства Hyperlink[ACol, ARow: Integer]: String. Строка гиперссылки содержит цель гиперссылки и необязательный текст всплывающей подсказки, который разделяется символом штриха ("|"). Внутренние цели уже обрабатываются сеткой, но для навигации у гиперссылки должен быть определен обработчик событий для OnClickHyperlink. Чтобы отличить нормальные клики по ячейкам от кликов по гиперссылкам, кнопка мыши должна удерживаться доли секунды до того, как будет [выполнен переход по] гиперссылке.

Пример:

// Пример добавления внешней гиперссылки
Grid.Cells[1,1] := 'Lazarus';
Grid.Hyperlink[1,1] := 'www.lazarus-ide.org|Открыть веб-сайт Lazarus';

// Пример добавления внутренней гиперссылки
Grid.Cells[2,2] := 'Итого';
Grid.Hyperlink[2,2] := '#Sheet2!B10|Перейдите к итогам, начиная с ячейки B10 листа 2';

// Пример для обработчика событий OnClickHyperlink, необходимого для внешних гиперссылок
uses
  ..., uriparser;

procedure TForm1.GridOnClickHyperlink(Sender: TObject; const AHyperlink: TsHyperlink);
begin
var
  uri: TUri;
begin
  uri := ParseURI(AHyperlink.Target);
  case Lowercase(uri.Protocol) of
    'http', 'https', 'ftp', 'mailto', 'file':
      OpenUrl(AHyperlink.Target);
    else
      ShowMessage('Гиперссылка ' + AHyperlink.Target + ' нажата');
  end;
end;
Light bulb  Примечание: Следуйте инструкциям выше, чтобы отобразить текст всплывающей подсказки в виде всплывающего окна.

Объединенные ячейки

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

Используйте метод MergeCells для выполнения этой операции. В качестве параметров требуется объединить левую, верхнюю, правую и нижнюю координаты диапазона ячеек. Они также могут быть объединены в запись TRect. Метод Unmerge снова разделяет ранее объединенный блок на отдельные ячейки, здесь достаточно координат одной ячейки из объединенного диапазона.

  // Пример слияния
  Grid.MergeCells(1,1, 3,1);          // Объединяем первые 3 ячейки первой строки
  Grid.Cells[1,1] := 'Итого';         // Записываем текст "Итого" по 3 ячейкам
  Grid.HorAlignment[1,1] := haCenter; // и центрируем его

  // Пример разделения
  Grid.UnmergeCells(1,1);             // Разделяем объединенный блок (1,1..3,1)

Ширина столбцов и высота строк

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.

Ширину столбцов и высоту строк можно изменить для всех ячеек, определив [свойства] DefaultColWidth и DefaultRowHeight. Это работает также в режиме разработки. Кроме того, ширина и высота отдельных столбцов и строк могут быть изменены свойствами ColWidths[ACol] и RowHeights[ARow]. Эти значения должны указываться в пикселях.

  Grid.DefaultColWidth := 80;  // Это ширина всех столбцов, 
  Grid.ColWidths[10] := 10;    // исключая столбец #10, ширина которого составляет всего 10 пикселей.

  Grid.DefaultRowHeight := 20; // Все строки имеют высоту 20 пикселей,
  Grid.RowHeights[2] := 4;     // Строка #2 служит в качестве разделителя и имеет высоту всего 4 пиксела.

Новые свойства сетки

В дополнение к свойствам, унаследованным от его предков TCustomDrawGrid и TCustomGrid, TsWorksheetGrid вводит следующие новые published-свойства:

  • AllowDragAndDrop (boolean): если эта опция активна, ячейки можно перетащить в новое место. Переместите курсор мыши на границу ячеек, которые нужно перетащить, пока курсор мыши не станет четырехсторонней стрелкой, а затем начинайте перетаскивание. Если перетаскиваемая ячейка ссылается на формулу, формула НЕ обновляется - это поведение отличается от Excel, но согласуется с Open/LibreOffice Calc.
  • AutoCalc (boolean): формулы в сетке автоматически пересчитываются при изменении содержимого ячейки.
  • AutoExpand (set of aeData, aeNavigation, aeDefault):
    • Если опция aeData содержится в наборе AutoExpand, тогда сетка автоматически расширяется, если ячейки записываются за пределами предопределенного диапазона.
    • Если AutoExpand содержит параметр aeNavigation, тогда пользователь может перемещаться за пределами предопределенного диапазона ячеек; новые строки и столбцы автоматически добавляются в сетку (но не к основному листу). Если файл загружен в сетку, то размеры сетки автоматически расширяются до диапазона, необходимого для рабочего листа.
    • Опция aeDefault вступает в игру, если сетка меньше значений по умолчанию DEFAULT_COL_COUNT и DEFAULT_ROW_COUNT. Если этот параметр включен, сетка автоматически расширяется до этого размера по умолчанию [(с добавлением "недостающих" столбцов и строк)]. С другой стороны, если в сетке должно содержаться только определенное количество строк и столбцов, опция aeDefault должна быть удалена до установки [свойств] RowCount/ColCount.
  • EditorLineMode определяет, поддерживает ли редактор ячейки сетки только одиночные строки (elmSingleLine) или несколько строк (elmMultiLine). В последнем случае вы можете нажать CTRL + ENTER, чтобы начать новую строку во время редактирования ячейки.
  • FrozenBorderPen: если сетка имеет замороженные панели (см. FrozenCols и FrozenRows), разделительная линия вытягивает край последней замороженной строки и столбца , Свойство FrozenBorderPen определяет способ рисования этой строки. Установите [значение свойства] FrozenBorderPen.Style = psClear, чтобы скрыть эти линии.
  • FrozenCols и FrozenRows (integer): определяет количество НЕ прокручиваемых столбцов(строк) слева(сверху) сетки. Технически это настраиваемые фиксированные столбцы (строки) предка. Обратите внимание, что пользователь не может перемещаться или редактировать ячейки в этом диапазоне.
  • ReadFormulas (boolean): считывает формулы из входных файлов. Так как fpspreadsheet не поддерживает все формулы, доступные в приложениях электронной таблицы Office, есть вероятность, что при чтении файла может произойти сбой из-за формул; в этом случае чтение формул может быть отключено.
  • SelectionPen (TPen): определяет, как окрашивается граница выбранной ячейки. По умолчанию выбранная ячейка выделена черной линией шириной 3 пикселя.
  • ShowGridLines (boolean): позволяет отключить линии сетки
  • ShowHeaders (boolean): может использоваться для отключения заголовков столбцов и строк ('A', 'B', 'C', ..., '1', '2', '3'). Свойство DisplayFixedColRow имеет тот же эффект, но теперь устарело.
  • TextOverflow (boolean): если это свойство включено, то длинному текстовому контенту разрешается распространяться на соседние ячейки, если они пусты. Обратите внимание, что ячейки числовых данных округлены так, что ячейка не переполняется.
  • WorkbookSource (TsWorkbookSource): ссылки на источник рабочей книги, которые предоставляют данные. Если [ссылки] пустые, сетка использует внутренний источник рабочей книги.

События

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

Рекомендуемые значения свойств

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

  • AutoAdvance = aaDown: клавиша ENTER переводит [фокус] с выбранной ячейки в следующую нижнюю ячейку
  • AutoCalc = true: автоматическое вычисление формул
  • AutoEdit = true: для редактирования ячейки просто начинайте печатать. Кроме того, вы можете начать редактирование, нажав F2
  • AutoExpand = [aeData, aeNavigation, aeDefault]: не ограничивайте использование сетки предопределенными размерами сетки для пользовательского интерфейса, подобного Excel
  • EditorLineMode = elmMultiLine: активируйте редактор ячейки, поддерживающий многострочность во время редактирования
  • MouseWheelOption = mwGrid: колесико мыши прокручивает сетку, а не выбранную ячейку
  • Options: добавьте эти флаги в стандартные параметры, унаследованные от TCustomGrid:
    • goColSizing: пользователь может изменить ширину столбца, перетащив вертикальную разделительную линию между двумя ячейками заголовка столбца
    • goRowSizing: пользователь может изменить высоту строки, перетащив горизонтальную разделительную линию между двумя ячейками заголовка строки
    • goDblClickAutosize: двойной щелчок на разделительной линии между двумя ячейками заголовка столбца или строки изменяет ширину столбца или высоту строки до оптимального значения
    • goEditing: помещает сетку в режим редактирования (так же, как [и] AutoEdit)
    • goThumbTracking: немедленная прокрутка сетки, когда полоса прокрутки перетаскивается мышью (если эта опция отключена, прокрутка происходит в тот момент, когда кнопка мыши отпускается)
  • TextOverflow = true: разрешить длинный поток текста ячейки в пустые соседние ячейки

Смотри также